@banta/sdk 4.6.26 → 4.7.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 (131) hide show
  1. package/{esm2015/banta-sdk.js → esm2020/banta-sdk.mjs} +0 -0
  2. package/{esm2015/lib/attachment-scraper.js → esm2020/lib/attachment-scraper.mjs} +0 -0
  3. package/esm2020/lib/banta/banta.component.mjs +204 -0
  4. package/esm2020/lib/banta-logo.component.mjs +11 -0
  5. package/esm2020/lib/banta-sdk.module.mjs +144 -0
  6. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +185 -0
  7. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/esm2020/lib/chat/chat.module.mjs +51 -0
  10. package/{esm2015/lib/chat/index.js → esm2020/lib/chat/index.mjs} +0 -0
  11. package/esm2020/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2015/lib/chat-backend-base.js → esm2020/lib/chat-backend-base.mjs} +0 -0
  13. package/esm2020/lib/chat-backend.mjs +83 -0
  14. package/{esm2015/lib/chat-source-base.js → esm2020/lib/chat-source-base.mjs} +0 -0
  15. package/esm2020/lib/chat-source.mjs +169 -0
  16. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +69 -0
  17. package/esm2020/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +666 -0
  19. package/esm2020/lib/comments/comment/comment.component.mjs +217 -0
  20. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +377 -0
  21. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +379 -0
  23. package/esm2020/lib/comments/comments.module.mjs +111 -0
  24. package/{esm2015/lib/comments/index.js → esm2020/lib/comments/index.mjs} +0 -0
  25. package/esm2020/lib/comments/live-comment.component.mjs +80 -0
  26. package/esm2020/lib/comments/reply-send-options.directive.mjs +13 -0
  27. package/esm2020/lib/common/attachment/attachment.component.mjs +113 -0
  28. package/esm2020/lib/common/attachments/attachments.component.mjs +72 -0
  29. package/esm2020/lib/common/common.module.mjs +59 -0
  30. package/{esm2015/lib/common/index.js → esm2020/lib/common/index.mjs} +0 -0
  31. package/{esm2015/lib/common/lazy-connection.js → esm2020/lib/common/lazy-connection.mjs} +0 -0
  32. package/esm2020/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2020/lib/common/markdown-to-html.pipe.mjs +76 -0
  34. package/esm2020/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2020/lib/common/timestamp.component.mjs +113 -0
  36. package/esm2020/lib/common/trust-resource-url.pipe.mjs +22 -0
  37. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +113 -0
  38. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +88 -0
  39. package/esm2020/lib/emoji/emoji.module.mjs +55 -0
  40. package/{esm2015/lib/emoji/emojis.js → esm2020/lib/emoji/emojis.mjs} +0 -0
  41. package/{esm2015/lib/emoji/index.js → esm2020/lib/emoji/index.mjs} +0 -0
  42. package/esm2020/lib/giphy-attachments.mjs +16 -0
  43. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  44. package/esm2020/lib/live-message.component.mjs +96 -0
  45. package/{esm2015/lib/message-menu-item.js → esm2020/lib/message-menu-item.mjs} +0 -0
  46. package/{esm2015/lib/sdk-options.js → esm2020/lib/sdk-options.mjs} +0 -0
  47. package/esm2020/lib/tweet-attachments.mjs +13 -0
  48. package/esm2020/lib/url-attachments.mjs +42 -0
  49. package/esm2020/lib/youtube-attachments.mjs +22 -0
  50. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  51. package/fesm2015/{banta-sdk.js → banta-sdk.mjs} +2323 -2008
  52. package/fesm2015/banta-sdk.mjs.map +1 -0
  53. package/fesm2020/banta-sdk.mjs +10490 -0
  54. package/fesm2020/banta-sdk.mjs.map +1 -0
  55. package/{banta-sdk.d.ts → index.d.ts} +1 -0
  56. package/lib/banta/banta.component.d.ts +3 -0
  57. package/lib/banta-logo.component.d.ts +3 -0
  58. package/lib/banta-sdk.module.d.ts +24 -0
  59. package/lib/chat/banta-chat/banta-chat.component.d.ts +3 -0
  60. package/lib/chat/chat-message/chat-message.component.d.ts +3 -0
  61. package/lib/chat/chat-view/chat-view.component.d.ts +3 -0
  62. package/lib/chat/chat.module.d.ts +13 -0
  63. package/lib/chat/live-chat-message.component.d.ts +3 -0
  64. package/lib/chat-backend.d.ts +3 -0
  65. package/lib/chat-source.d.ts +3 -3
  66. package/lib/comments/attachment-button/attachment-button.component.d.ts +3 -0
  67. package/lib/comments/attachment-scraper.directive.d.ts +3 -0
  68. package/lib/comments/banta-comments/banta-comments.component.d.ts +3 -0
  69. package/lib/comments/comment/comment.component.d.ts +3 -0
  70. package/lib/comments/comment-field/comment-field.component.d.ts +3 -0
  71. package/lib/comments/comment-sort/comment-sort.component.d.ts +3 -0
  72. package/lib/comments/comment-view/comment-view.component.d.ts +3 -0
  73. package/lib/comments/comments.module.d.ts +28 -0
  74. package/lib/comments/live-comment.component.d.ts +3 -0
  75. package/lib/comments/reply-send-options.directive.d.ts +3 -0
  76. package/lib/common/attachment/attachment.component.d.ts +3 -0
  77. package/lib/common/attachments/attachments.component.d.ts +3 -0
  78. package/lib/common/common.module.d.ts +15 -0
  79. package/lib/common/lightbox/lightbox.component.d.ts +3 -0
  80. package/lib/common/markdown-to-html.pipe.d.ts +3 -0
  81. package/lib/common/mention-linker.pipe.d.ts +3 -0
  82. package/lib/common/timestamp.component.d.ts +3 -0
  83. package/lib/common/trust-resource-url.pipe.d.ts +3 -0
  84. package/lib/emoji/emoji-selector-button.component.d.ts +3 -0
  85. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +3 -0
  86. package/lib/emoji/emoji.module.d.ts +14 -0
  87. package/lib/live-message.component.d.ts +3 -0
  88. package/lib/url-attachments.d.ts +3 -0
  89. package/package.json +22 -10
  90. package/banta-sdk.metadata.json +0 -1
  91. package/bundles/banta-sdk.umd.js +0 -11895
  92. package/bundles/banta-sdk.umd.js.map +0 -1
  93. package/bundles/banta-sdk.umd.min.js +0 -2
  94. package/bundles/banta-sdk.umd.min.js.map +0 -1
  95. package/esm2015/lib/banta/banta.component.js +0 -201
  96. package/esm2015/lib/banta-logo.component.js +0 -20
  97. package/esm2015/lib/banta-sdk.module.js +0 -98
  98. package/esm2015/lib/chat/banta-chat/banta-chat.component.js +0 -175
  99. package/esm2015/lib/chat/chat-message/chat-message.component.js +0 -56
  100. package/esm2015/lib/chat/chat-view/chat-view.component.js +0 -167
  101. package/esm2015/lib/chat/chat.module.js +0 -32
  102. package/esm2015/lib/chat/live-chat-message.component.js +0 -71
  103. package/esm2015/lib/chat-backend.js +0 -92
  104. package/esm2015/lib/chat-source.js +0 -205
  105. package/esm2015/lib/comments/attachment-button/attachment-button.component.js +0 -70
  106. package/esm2015/lib/comments/attachment-scraper.directive.js +0 -109
  107. package/esm2015/lib/comments/banta-comments/banta-comments.component.js +0 -678
  108. package/esm2015/lib/comments/comment/comment.component.js +0 -186
  109. package/esm2015/lib/comments/comment-field/comment-field.component.js +0 -350
  110. package/esm2015/lib/comments/comment-sort/comment-sort.component.js +0 -34
  111. package/esm2015/lib/comments/comment-view/comment-view.component.js +0 -364
  112. package/esm2015/lib/comments/comments.module.js +0 -62
  113. package/esm2015/lib/comments/live-comment.component.js +0 -71
  114. package/esm2015/lib/comments/reply-send-options.directive.js +0 -9
  115. package/esm2015/lib/common/attachment/attachment.component.js +0 -105
  116. package/esm2015/lib/common/attachments/attachments.component.js +0 -66
  117. package/esm2015/lib/common/common.module.js +0 -36
  118. package/esm2015/lib/common/lightbox/lightbox.component.js +0 -30
  119. package/esm2015/lib/common/markdown-to-html.pipe.js +0 -74
  120. package/esm2015/lib/common/mention-linker.pipe.js +0 -31
  121. package/esm2015/lib/common/timestamp.component.js +0 -106
  122. package/esm2015/lib/common/trust-resource-url.pipe.js +0 -21
  123. package/esm2015/lib/emoji/emoji-selector-button.component.js +0 -108
  124. package/esm2015/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.js +0 -86
  125. package/esm2015/lib/emoji/emoji.module.js +0 -34
  126. package/esm2015/lib/giphy-attachments.js +0 -20
  127. package/esm2015/lib/live-message.component.js +0 -74
  128. package/esm2015/lib/tweet-attachments.js +0 -16
  129. package/esm2015/lib/url-attachments.js +0 -46
  130. package/esm2015/lib/youtube-attachments.js +0 -25
  131. package/fesm2015/banta-sdk.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class TimestampComponent {
5
+ constructor() {
6
+ this.relative = '';
7
+ this.tooltip = '';
8
+ this.updateInterval = null;
9
+ this.showAbsolute = false;
10
+ }
11
+ ngOnDestroy() {
12
+ if (this.updateInterval)
13
+ clearInterval(this.updateInterval);
14
+ }
15
+ get value() {
16
+ return this._value;
17
+ }
18
+ update() {
19
+ let now = Date.now();
20
+ let diff = now - this.value;
21
+ let minute = 1000 * 60;
22
+ let hour = minute * 60;
23
+ let day = hour * 24;
24
+ let week = day * 7;
25
+ let month = day * 30;
26
+ let year = day * 365;
27
+ this.showAbsolute = false;
28
+ let updateTime = 0;
29
+ if (diff > year) {
30
+ this.showAbsolute = true;
31
+ this.relative = 'abs';
32
+ return;
33
+ }
34
+ if (diff > month) {
35
+ let months = Math.floor(diff / month);
36
+ if (months === 1)
37
+ this.relative = `${months} month ago`;
38
+ else
39
+ this.relative = `${months} months ago`;
40
+ }
41
+ else if (diff > week) {
42
+ let weeks = Math.floor(diff / week);
43
+ if (weeks === 1)
44
+ this.relative = `${weeks} week ago`;
45
+ else
46
+ this.relative = `${weeks} weeks ago`;
47
+ }
48
+ else if (diff > day) {
49
+ let days = Math.floor(diff / day);
50
+ if (days === 1)
51
+ this.relative = `${days} day ago`;
52
+ else
53
+ this.relative = `${days} days ago`;
54
+ }
55
+ else if (diff > hour) {
56
+ let hours = Math.floor(diff / hour);
57
+ if (hours === 1)
58
+ this.relative = `${hours} hour ago`;
59
+ else
60
+ this.relative = `${hours} hours ago`;
61
+ updateTime = 1000 * 60 * 30;
62
+ }
63
+ else if (diff > minute) {
64
+ let minutes = Math.floor(diff / minute);
65
+ if (minutes === 1)
66
+ this.relative = `${minutes} minute ago`;
67
+ else
68
+ this.relative = `${minutes} minutes ago`;
69
+ updateTime = 1000 * 45;
70
+ }
71
+ else if (diff > 30000) {
72
+ this.relative = `about a minute ago`;
73
+ updateTime = 1000 * 60;
74
+ }
75
+ else {
76
+ this.relative = `just now`;
77
+ updateTime = 1000 * 30;
78
+ }
79
+ if (typeof window !== 'undefined') {
80
+ clearInterval(this.updateInterval);
81
+ if (updateTime > 0) {
82
+ this.updateInterval = setInterval(() => this.update());
83
+ }
84
+ }
85
+ }
86
+ set value(v) {
87
+ this._value = v;
88
+ this.update();
89
+ }
90
+ }
91
+ TimestampComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TimestampComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
92
+ TimestampComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TimestampComponent, selector: "banta-timestamp", inputs: { value: "value" }, ngImport: i0, template: `
93
+ <span *ngIf="showAbsolute" [title]="value | date : 'short'">
94
+ {{value | date : 'shortDate'}}
95
+ </span>
96
+ <span *ngIf="!showAbsolute" [title]="value | date : 'short'">
97
+ {{relative}}
98
+ </span>
99
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TimestampComponent, decorators: [{
101
+ type: Component,
102
+ args: [{ selector: 'banta-timestamp', template: `
103
+ <span *ngIf="showAbsolute" [title]="value | date : 'short'">
104
+ {{value | date : 'shortDate'}}
105
+ </span>
106
+ <span *ngIf="!showAbsolute" [title]="value | date : 'short'">
107
+ {{relative}}
108
+ </span>
109
+ ` }]
110
+ }], propDecorators: { value: [{
111
+ type: Input
112
+ }] } });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXN0YW1wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi90aW1lc3RhbXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFjakQsTUFBTSxPQUFPLGtCQUFrQjtJQVovQjtRQWNJLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRUwsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFZOUIsaUJBQVksR0FBRyxLQUFLLENBQUM7S0E2RXhCO0lBdkZHLFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQ0ksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBSUQsTUFBTTtRQUVGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFbkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFFdEMsSUFBSSxNQUFNLEtBQUssQ0FBQztnQkFDWixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUM7O2dCQUV0QyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUM7U0FFOUM7YUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFcEMsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxXQUFXLENBQUM7O2dCQUVwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxZQUFZLENBQUM7U0FDNUM7YUFBTSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQztnQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUM7O2dCQUVsQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxXQUFXLENBQUM7O2dCQUVwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxZQUFZLENBQUM7WUFFekMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFO1lBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLElBQUksT0FBTyxLQUFLLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLE9BQU8sYUFBYSxDQUFDOztnQkFFeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLE9BQU8sY0FBYyxDQUFDO1lBQzdDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxJQUFJLEdBQUcsS0FBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsb0JBQW9CLENBQUM7WUFDckMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQzNCLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQzFEO1NBQ0o7SUFDTCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDOztnSEE3RlEsa0JBQWtCO29HQUFsQixrQkFBa0IsbUZBVmpCOzs7Ozs7O0tBT1Q7NEZBR1Esa0JBQWtCO2tCQVo5QixTQUFTOytCQUNJLGlCQUFpQixZQUNqQjs7Ozs7OztLQU9UOzhCQWdCRyxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS10aW1lc3RhbXAnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dBYnNvbHV0ZVwiIFt0aXRsZV09XCJ2YWx1ZSB8IGRhdGUgOiAnc2hvcnQnXCI+XHJcbiAgICAgICAgICAgIHt7dmFsdWUgfCBkYXRlIDogJ3Nob3J0RGF0ZSd9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFzaG93QWJzb2x1dGVcIiBbdGl0bGVdPVwidmFsdWUgfCBkYXRlIDogJ3Nob3J0J1wiPlxyXG4gICAgICAgICAgICB7e3JlbGF0aXZlfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaW1lc3RhbXBDb21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSBfdmFsdWUgOiBudW1iZXI7XHJcbiAgICByZWxhdGl2ZSA9ICcnO1xyXG4gICAgdG9vbHRpcCA9ICcnO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlSW50ZXJ2YWwgPSBudWxsO1xyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZUludGVydmFsKVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlSW50ZXJ2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBYnNvbHV0ZSA9IGZhbHNlO1xyXG5cclxuICAgIHVwZGF0ZSgpIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgZGlmZiA9IG5vdyAtIHRoaXMudmFsdWU7XHJcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDEwMDAqNjA7XHJcbiAgICAgICAgbGV0IGhvdXIgPSBtaW51dGUgKiA2MDtcclxuICAgICAgICBsZXQgZGF5ID0gaG91ciAqIDI0O1xyXG4gICAgICAgIGxldCB3ZWVrID0gZGF5ICogNztcclxuICAgICAgICBsZXQgbW9udGggPSBkYXkgKiAzMDtcclxuICAgICAgICBsZXQgeWVhciA9IGRheSAqIDM2NTtcclxuICAgICAgICB0aGlzLnNob3dBYnNvbHV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB1cGRhdGVUaW1lID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGRpZmYgPiB5ZWFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Fic29sdXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9ICdhYnMnO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlmZiA+IG1vbnRoKSB7XHJcbiAgICAgICAgICAgIGxldCBtb250aHMgPSBNYXRoLmZsb29yKGRpZmYgLyBtb250aCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobW9udGhzID09PSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke21vbnRoc30gbW9udGggYWdvYDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke21vbnRoc30gbW9udGhzIGFnb2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IHdlZWspIHtcclxuICAgICAgICAgICAgbGV0IHdlZWtzID0gTWF0aC5mbG9vcihkaWZmIC8gd2Vlayk7XHJcblxyXG4gICAgICAgICAgICBpZiAod2Vla3MgPT09IDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7d2Vla3N9IHdlZWsgYWdvYDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke3dlZWtzfSB3ZWVrcyBhZ29gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IGRheSkge1xyXG4gICAgICAgICAgICBsZXQgZGF5cyA9IE1hdGguZmxvb3IoZGlmZiAvIGRheSk7XHJcbiAgICAgICAgICAgIGlmIChkYXlzID09PSAxKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZSA9IGAke2RheXN9IGRheSBhZ29gO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7ZGF5c30gZGF5cyBhZ29gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IGhvdXIpIHtcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcihkaWZmIC8gaG91cik7XHJcbiAgICAgICAgICAgIGlmIChob3VycyA9PT0gMSlcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgJHtob3Vyc30gaG91ciBhZ29gO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7aG91cnN9IGhvdXJzIGFnb2A7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB1cGRhdGVUaW1lID0gMTAwMCAqIDYwICogMzA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gbWludXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihkaWZmIC8gbWludXRlKTtcclxuICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYCR7bWludXRlc30gbWludXRlIGFnb2A7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgJHttaW51dGVzfSBtaW51dGVzIGFnb2A7XHJcbiAgICAgICAgICAgIHVwZGF0ZVRpbWUgPSAxMDAwICogNDU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMzBfMDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpdmUgPSBgYWJvdXQgYSBtaW51dGUgYWdvYDtcclxuICAgICAgICAgICAgdXBkYXRlVGltZSA9IDEwMDAgKiA2MDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aXZlID0gYGp1c3Qgbm93YDtcclxuICAgICAgICAgICAgdXBkYXRlVGltZSA9IDEwMDAgKiAzMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVUaW1lID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMudXBkYXRlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldCB2YWx1ZSh2KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,22 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/platform-browser";
4
+ export class BantaTrustResourceUrlPipe {
5
+ constructor(sanitizer) {
6
+ this.sanitizer = sanitizer;
7
+ }
8
+ transform(value) {
9
+ if (!value)
10
+ return undefined;
11
+ return this.sanitizer.bypassSecurityTrustResourceUrl(value);
12
+ }
13
+ }
14
+ BantaTrustResourceUrlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaTrustResourceUrlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
15
+ BantaTrustResourceUrlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaTrustResourceUrlPipe, name: "trustResourceUrl" });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaTrustResourceUrlPipe, decorators: [{
17
+ type: Pipe,
18
+ args: [{
19
+ name: 'trustResourceUrl'
20
+ }]
21
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tb24vdHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU1wRCxNQUFNLE9BQU8seUJBQXlCO0lBQ2xDLFlBQ1ksU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztJQUVuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUVyQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7dUhBWFEseUJBQXlCO3FIQUF6Qix5QkFBeUI7NEZBQXpCLHlCQUF5QjtrQkFIckMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsa0JBQWtCO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAndHJ1c3RSZXNvdXJjZVVybCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh2YWx1ZSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,113 @@
1
+ /// <reference types="@types/resize-observer-browser" />
2
+ import { Component, Output, ViewChild, Input } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "@angular/material/icon";
7
+ import * as i3 from "@angular/material/button";
8
+ import * as i4 from "@angular/cdk/portal";
9
+ import * as i5 from "./emoji-selector-panel/emoji-selector-panel.component";
10
+ export class EmojiSelectorButtonComponent {
11
+ constructor(elementRef, overlay) {
12
+ this.elementRef = elementRef;
13
+ this.overlay = overlay;
14
+ this._selected = new Subject();
15
+ this.showEmojiPanel = false;
16
+ this.overlayX = 'end';
17
+ this.overlayY = 'top';
18
+ this.originX = 'end';
19
+ this.originY = 'bottom';
20
+ }
21
+ get selected() {
22
+ return this._selected;
23
+ }
24
+ get isOpen() {
25
+ return this.overlayRef;
26
+ }
27
+ /**
28
+ * Insert the given emoji.
29
+ * @param str
30
+ */
31
+ insert(str) {
32
+ this._selected.next(str);
33
+ this.close();
34
+ }
35
+ close() {
36
+ if (this.overlayRef) {
37
+ this.overlayRef.dispose();
38
+ this.overlayRef = null;
39
+ }
40
+ }
41
+ show() {
42
+ if (this.isOpen) {
43
+ this.close();
44
+ }
45
+ this.overlayRef = this.overlay.create({
46
+ positionStrategy: this.overlay.position()
47
+ .flexibleConnectedTo(this.elementRef)
48
+ .withPositions([
49
+ {
50
+ originX: this.originX,
51
+ originY: this.originY,
52
+ overlayX: this.overlayX,
53
+ overlayY: this.overlayY
54
+ }
55
+ ])
56
+ .withFlexibleDimensions(true),
57
+ hasBackdrop: true,
58
+ disposeOnNavigation: true,
59
+ scrollStrategy: this.overlay.scrollStrategies.reposition({
60
+ autoClose: true
61
+ })
62
+ });
63
+ this.overlayRef.backdropClick().subscribe(() => {
64
+ this.close();
65
+ });
66
+ this.overlayRef.keydownEvents().subscribe(event => {
67
+ if (event.key === 'Escape') {
68
+ this.close();
69
+ }
70
+ });
71
+ this.overlayRef.attach(this.selectorPanelTemplate);
72
+ }
73
+ }
74
+ EmojiSelectorButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiSelectorButtonComponent, deps: [{ token: i0.ElementRef }, { token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
75
+ EmojiSelectorButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: { overlayX: "overlayX", overlayY: "overlayY", originX: "originX", originY: "originY" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "selectorPanelTemplate", first: true, predicate: ["selectorPanelTemplate"], descendants: true }], ngImport: i0, template: `
76
+ <button #button type="button" mat-icon-button (click)="show()">
77
+ <mat-icon>emoji_emotions</mat-icon>
78
+ </button>
79
+ <ng-template cdkPortal #selectorPanelTemplate="cdkPortal">
80
+ <emoji-selector-panel
81
+ #panel
82
+ (selected)="insert($event)"
83
+ ></emoji-selector-panel>
84
+ </ng-template>
85
+ `, isInline: true, styles: [":host{display:block;position:relative}button{color:#666}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.CdkPortal, selector: "[cdkPortal]", exportAs: ["cdkPortal"] }, { kind: "component", type: i5.EmojiSelectorPanelComponent, selector: "emoji-selector-panel", outputs: ["selected"] }] });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiSelectorButtonComponent, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'emoji-selector-button', template: `
89
+ <button #button type="button" mat-icon-button (click)="show()">
90
+ <mat-icon>emoji_emotions</mat-icon>
91
+ </button>
92
+ <ng-template cdkPortal #selectorPanelTemplate="cdkPortal">
93
+ <emoji-selector-panel
94
+ #panel
95
+ (selected)="insert($event)"
96
+ ></emoji-selector-panel>
97
+ </ng-template>
98
+ `, styles: [":host{display:block;position:relative}button{color:#666}\n"] }]
99
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Overlay }]; }, propDecorators: { selectorPanelTemplate: [{
100
+ type: ViewChild,
101
+ args: ['selectorPanelTemplate']
102
+ }], selected: [{
103
+ type: Output
104
+ }], overlayX: [{
105
+ type: Input
106
+ }], overlayY: [{
107
+ type: Input
108
+ }], originX: [{
109
+ type: Input
110
+ }], originY: [{
111
+ type: Input
112
+ }] } });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktc2VsZWN0b3ItYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2Vtb2ppL2Vtb2ppLXNlbGVjdG9yLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBSXhELE9BQU8sRUFBRSxTQUFTLEVBQTJCLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUEyQjNDLE1BQU0sT0FBTyw0QkFBNEI7SUFDckMsWUFDWSxVQUFtQyxFQUNuQyxPQUFnQjtRQURoQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBTXBCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBNkJkLGFBQVEsR0FBK0IsS0FBSyxDQUFDO1FBQzdDLGFBQVEsR0FBZ0MsS0FBSyxDQUFDO1FBQzlDLFlBQU8sR0FBK0IsS0FBSyxDQUFDO1FBQzVDLFlBQU8sR0FBZ0MsUUFBUSxDQUFDO0lBckN6RCxDQUFDO0lBT0QsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFJRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFHO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBT0QsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7aUJBQ3BDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7aUJBQ3BDLGFBQWEsQ0FBQztnQkFDWDtvQkFDSSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7aUJBQzFCO2FBQ0osQ0FBQztpQkFDRCxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDakMsV0FBVyxFQUFFLElBQUk7WUFDakIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7Z0JBQ3JELFNBQVMsRUFBRSxJQUFJO2FBQ2xCLENBQUM7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN2RCxDQUFDOzswSEE5RVEsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsZ1VBdEIzQjs7Ozs7Ozs7OztLQVVUOzRGQVlRLDRCQUE0QjtrQkF4QnhDLFNBQVM7K0JBQ0ksdUJBQXVCLFlBQ3ZCOzs7Ozs7Ozs7O0tBVVQ7dUhBbUJtQyxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQU05QixRQUFRO3NCQURYLE1BQU07Z0JBMkJFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdHlwZXMvcmVzaXplLW9ic2VydmVyLWJyb3dzZXJcIiAvPlxyXG5cclxuaW1wb3J0IHsgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIE91dHB1dCwgVmlld0NoaWxkLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVtb2ppU2VsZWN0b3JQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdlbW9qaS1zZWxlY3Rvci1idXR0b24nLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8YnV0dG9uICNidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2hvdygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5lbW9qaV9lbW90aW9uczwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbCAjc2VsZWN0b3JQYW5lbFRlbXBsYXRlPVwiY2RrUG9ydGFsXCI+XHJcbiAgICAgICAgICAgIDxlbW9qaS1zZWxlY3Rvci1wYW5lbCBcclxuICAgICAgICAgICAgICAgICNwYW5lbFxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluc2VydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2Vtb2ppLXNlbGVjdG9yLXBhbmVsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYFxyXG4gICAgICAgIDpob3N0IHtcclxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJ1dHRvbiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiAjNjY2XHJcbiAgICAgICAgfVxyXG4gICAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtb2ppU2VsZWN0b3JCdXR0b25Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdG9yUGFuZWxUZW1wbGF0ZScpIHNlbGVjdG9yUGFuZWxUZW1wbGF0ZTogVGVtcGxhdGVQb3J0YWw8YW55PjtcclxuXHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHNob3dFbW9qaVBhbmVsID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSA6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcclxuXHJcbiAgICBnZXQgaXNPcGVuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIGVtb2ppLlxyXG4gICAgICogQHBhcmFtIHN0ciBcclxuICAgICAqL1xyXG4gICAgaW5zZXJ0KHN0cikge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQoc3RyKTtcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBvdmVybGF5WDogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgPSAnZW5kJztcclxuICAgIEBJbnB1dCgpIG92ZXJsYXlZOiAndG9wJyB8ICdjZW50ZXInIHwgJ2JvdHRvbScgPSAndG9wJztcclxuICAgIEBJbnB1dCgpIG9yaWdpblg6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnID0gJ2VuZCc7XHJcbiAgICBASW5wdXQoKSBvcmlnaW5ZOiAndG9wJyB8ICdjZW50ZXInIHwgJ2JvdHRvbScgPSAnYm90dG9tJztcclxuXHJcbiAgICBzaG93KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5LnBvc2l0aW9uKClcclxuICAgICAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcclxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICAgICAgICAgICAgICB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiB0aGlzLm9yaWdpblgsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiB0aGlzLm9yaWdpblksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlYOiB0aGlzLm92ZXJsYXlYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5WTogdGhpcy5vdmVybGF5WVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0cnVlKSxcclxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHtcclxuICAgICAgICAgICAgICAgIGF1dG9DbG9zZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHRoaXMuc2VsZWN0b3JQYW5lbFRlbXBsYXRlKTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,88 @@
1
+ import { Component, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { EMOJIS } from '../emojis';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/platform-browser";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "@angular/material/icon";
9
+ import * as i5 from "@angular/material/button";
10
+ import * as i6 from "@angular/material/form-field";
11
+ import * as i7 from "@angular/material/input";
12
+ export class EmojiSelectorPanelComponent {
13
+ constructor(sanitizer) {
14
+ this.sanitizer = sanitizer;
15
+ this.activeCategory = 'people';
16
+ this.searchResults = [];
17
+ this.searchVisible = false;
18
+ this.selected = new Subject();
19
+ }
20
+ get searchQuery() {
21
+ return this._searchQuery;
22
+ }
23
+ set searchQuery(value) {
24
+ this._searchQuery = value;
25
+ setTimeout(() => {
26
+ this.searchResults = Object.keys(EMOJIS).filter(k => k.includes(value)).map(k => EMOJIS[k]);
27
+ this.searchResults.splice(50, this.searchResults.length);
28
+ console.log(`looking for '${value}' => ${this.searchResults.length} results`);
29
+ });
30
+ }
31
+ humanize(str) {
32
+ return str.replace(/(^| )[a-z]/g, k => k.toUpperCase()).replace(/_/g, ' ');
33
+ }
34
+ select(char) {
35
+ this.selected.next(char);
36
+ }
37
+ pairs(object) {
38
+ return Object.keys(object).map(key => [key, object[key]]);
39
+ }
40
+ hideSearch() {
41
+ // because of the "outside click detection"
42
+ setTimeout(() => {
43
+ this.searchVisible = false;
44
+ });
45
+ }
46
+ showSearch() {
47
+ // because of the "outside click detection"
48
+ setTimeout(() => {
49
+ this.searchVisible = true;
50
+ });
51
+ }
52
+ ngOnInit() {
53
+ let cats = {};
54
+ let categoryIcons = {
55
+ symbols: 'warning',
56
+ people: 'people',
57
+ animals_and_nature: 'nature',
58
+ travel_and_places: 'location_on',
59
+ activity: 'local_activity',
60
+ food_and_drink: 'restaurant',
61
+ objects: 'computer',
62
+ flags: 'flag'
63
+ };
64
+ for (let pair of this.pairs(EMOJIS)) {
65
+ let name = pair[0];
66
+ let emoji = pair[1];
67
+ if (!cats[emoji.category]) {
68
+ cats[emoji.category] = {
69
+ name: emoji.category,
70
+ icon: categoryIcons[emoji.category] || 'code',
71
+ emojis: []
72
+ };
73
+ }
74
+ emoji.html = this.sanitizer.bypassSecurityTrustHtml(twemoji.parse(emoji.char || '', { base: 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/' }));
75
+ cats[emoji.category].emojis.push(emoji);
76
+ }
77
+ this.categories = this.pairs(cats).map(pair => pair[1]);
78
+ }
79
+ }
80
+ EmojiSelectorPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiSelectorPanelComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
81
+ EmojiSelectorPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: EmojiSelectorPanelComponent, selector: "emoji-selector-panel", outputs: { selected: "selected" }, ngImport: i0, template: "<div class=\"search-box\" *ngIf=\"searchVisible\">\r\n\t<a mat-icon-button href=\"javascript:;\" (click)=\"hideSearch()\">\r\n\t\t<mat-icon>arrow_back</mat-icon>\r\n\t</a>\r\n\t<mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n\t\t<mat-label>Search for emoji</mat-label>\r\n\t\t<input name=\"search\" type=\"text\" matInput placeholder=\"Start typing\" [(ngModel)]=\"searchQuery\" />\r\n\t</mat-form-field>\r\n</div>\r\n\r\n<div class=\"selector\">\r\n\t<ng-container *ngIf=\"searchVisible\">\r\n\t\t<div class=\"emoji-list\">\r\n\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t*ngFor=\"let emoji of searchResults\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t<div class=\"categories\">\r\n\t\t\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t\t\t<a [title]=\"humanize(category.name)\" [class.active]=\"activeCategory === category.name\" mat-icon-button *ngFor=\"let category of categories\" (click)=\"activeCategory = category.name\">\r\n\t\t\t\t\t<mat-icon>{{category.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<a title=\"Search\" [class.active] mat-icon-button (click)=\"showSearch()\">\r\n\t\t\t\t\t<mat-icon>search</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<ng-container *ngFor=\"let category of categories\">\r\n\t\t\t<div class=\"emoji-list\" *ngIf=\"activeCategory && activeCategory == category.name\">\r\n\t\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t\t*ngFor=\"let emoji of category.emojis\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>", styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em - 5px)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:.4s opacity ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width: 500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}:host-context(.banta-mobile) .selector{flex-direction:row;height:27em}:host-context(.banta-mobile) .emoji-list{height:auto}\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: "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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }] });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiSelectorPanelComponent, decorators: [{
83
+ type: Component,
84
+ args: [{ selector: 'emoji-selector-panel', template: "<div class=\"search-box\" *ngIf=\"searchVisible\">\r\n\t<a mat-icon-button href=\"javascript:;\" (click)=\"hideSearch()\">\r\n\t\t<mat-icon>arrow_back</mat-icon>\r\n\t</a>\r\n\t<mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n\t\t<mat-label>Search for emoji</mat-label>\r\n\t\t<input name=\"search\" type=\"text\" matInput placeholder=\"Start typing\" [(ngModel)]=\"searchQuery\" />\r\n\t</mat-form-field>\r\n</div>\r\n\r\n<div class=\"selector\">\r\n\t<ng-container *ngIf=\"searchVisible\">\r\n\t\t<div class=\"emoji-list\">\r\n\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t*ngFor=\"let emoji of searchResults\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t<div class=\"categories\">\r\n\t\t\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t\t\t<a [title]=\"humanize(category.name)\" [class.active]=\"activeCategory === category.name\" mat-icon-button *ngFor=\"let category of categories\" (click)=\"activeCategory = category.name\">\r\n\t\t\t\t\t<mat-icon>{{category.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<a title=\"Search\" [class.active] mat-icon-button (click)=\"showSearch()\">\r\n\t\t\t\t\t<mat-icon>search</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<ng-container *ngFor=\"let category of categories\">\r\n\t\t\t<div class=\"emoji-list\" *ngIf=\"activeCategory && activeCategory == category.name\">\r\n\t\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t\t*ngFor=\"let emoji of category.emojis\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>", styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em - 5px)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:.4s opacity ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width: 500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}:host-context(.banta-mobile) .selector{flex-direction:row;height:27em}:host-context(.banta-mobile) .emoji-list{height:auto}\n"] }]
85
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; }, propDecorators: { selected: [{
86
+ type: Output
87
+ }] } });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvZW1vamkvZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvZW1vamkvZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFPbkMsTUFBTSxPQUFPLDJCQUEyQjtJQUV2QyxZQUNTLFNBQXdCO1FBQXhCLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFJakMsbUJBQWMsR0FBWSxRQUFRLENBQUM7UUFDbkMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHakIsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBUi9DLENBQUM7SUFZTCxJQUFJLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEtBQUs7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBWTtRQUNwQixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQWE7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFVBQVU7UUFDVCwyQ0FBMkM7UUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVFLFVBQVU7UUFDWiwyQ0FBMkM7UUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVKLFFBQVE7UUFFUCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLGFBQWEsR0FBRztZQUNuQixPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsUUFBUTtZQUNoQixrQkFBa0IsRUFBRSxRQUFRO1lBQzVCLGlCQUFpQixFQUFFLGFBQWE7WUFDaEMsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixjQUFjLEVBQUUsWUFBWTtZQUM1QixPQUFPLEVBQUUsVUFBVTtZQUNuQixLQUFLLEVBQUUsTUFBTTtTQUNiLENBQUM7UUFDRixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRztvQkFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUNwQixJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNO29CQUM3QyxNQUFNLEVBQUUsRUFBRTtpQkFDVixDQUFBO2FBQ0Q7WUFFRCxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsNERBQTRELEVBQUUsQ0FBQyxDQUN2RyxDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7O3lIQXhGVywyQkFBMkI7NkdBQTNCLDJCQUEyQiwrRkN0QnhDLDByREFzQ007NEZEaEJPLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDQyxzQkFBc0I7bUdBZ0J4QixRQUFRO3NCQURmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIHZhciB0d2Vtb2ppOiB7XHJcbiAgICBwYXJzZShzdHI6IHN0cmluZywgb3B0aW9ucz86IHsgZm9sZGVyPzogc3RyaW5nLCBleHQ/OiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcgfSk6IHN0cmluZztcclxufVxyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmludGVyZmFjZSBFbW9qaSB7XHJcblx0a2V5d29yZHMgOiBzdHJpbmdbXTtcclxuXHRjaGFyIDogc3RyaW5nO1xyXG5cdGh0bWw/IDogU2FmZUh0bWw7XHJcblx0Y2F0ZWdvcnkgOiBzdHJpbmc7XHJcbn1cclxuXHJcbmltcG9ydCB7IEVNT0pJUyB9IGZyb20gJy4uL2Vtb2ppcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2Vtb2ppLXNlbGVjdG9yLXBhbmVsJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2Vtb2ppLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtb2ppU2VsZWN0b3JQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBzYW5pdGl6ZXIgOiBEb21TYW5pdGl6ZXJcclxuXHQpIHsgfVxyXG5cclxuXHRjYXRlZ29yaWVzIDogYW55W107XHJcblx0YWN0aXZlQ2F0ZWdvcnkgOiBzdHJpbmcgPSAncGVvcGxlJztcclxuXHRzZWFyY2hSZXN1bHRzIDogYW55W10gPSBbXTtcclxuICAgIHNlYXJjaFZpc2libGUgPSBmYWxzZTtcclxuXHRcclxuXHRAT3V0cHV0KClcclxuXHRwcml2YXRlIHNlbGVjdGVkIDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcblx0cHJpdmF0ZSBfc2VhcmNoUXVlcnkgOiBzdHJpbmc7XHJcblxyXG5cdGdldCBzZWFyY2hRdWVyeSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zZWFyY2hRdWVyeTtcclxuXHR9XHJcblxyXG5cdHNldCBzZWFyY2hRdWVyeSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5fc2VhcmNoUXVlcnkgPSB2YWx1ZTtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNlYXJjaFJlc3VsdHMgPSBPYmplY3Qua2V5cyhFTU9KSVMpLmZpbHRlcihrID0+IGsuaW5jbHVkZXModmFsdWUpKS5tYXAoayA9PiBFTU9KSVNba10pO1xyXG5cdFx0XHR0aGlzLnNlYXJjaFJlc3VsdHMuc3BsaWNlKDUwLCB0aGlzLnNlYXJjaFJlc3VsdHMubGVuZ3RoKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGxvb2tpbmcgZm9yICcke3ZhbHVlfScgPT4gJHt0aGlzLnNlYXJjaFJlc3VsdHMubGVuZ3RofSByZXN1bHRzYCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGh1bWFuaXplKHN0ciA6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHN0ci5yZXBsYWNlKC8oXnwgKVthLXpdL2csIGsgPT4gay50b1VwcGVyQ2FzZSgpKS5yZXBsYWNlKC9fL2csICcgJyk7XHJcblx0fVxyXG5cclxuXHRzZWxlY3QoY2hhciA6IHN0cmluZykge1xyXG5cdFx0dGhpcy5zZWxlY3RlZC5uZXh0KGNoYXIpO1xyXG5cdH1cclxuXHJcblx0cGFpcnMob2JqZWN0KSB7XHJcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoa2V5ID0+IFtrZXksIG9iamVjdFtrZXldXSk7XHJcblx0fVxyXG5cclxuXHRoaWRlU2VhcmNoKCkge1xyXG5cdFx0Ly8gYmVjYXVzZSBvZiB0aGUgXCJvdXRzaWRlIGNsaWNrIGRldGVjdGlvblwiXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cdH1cclxuXHRcclxuICAgIHNob3dTZWFyY2goKSB7XHJcblx0XHQvLyBiZWNhdXNlIG9mIHRoZSBcIm91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXCJcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblxyXG5cdFx0bGV0IGNhdHMgPSB7fTtcclxuXHRcdGxldCBjYXRlZ29yeUljb25zID0ge1xyXG5cdFx0XHRzeW1ib2xzOiAnd2FybmluZycsXHJcblx0XHRcdHBlb3BsZTogJ3Blb3BsZScsXHJcblx0XHRcdGFuaW1hbHNfYW5kX25hdHVyZTogJ25hdHVyZScsXHJcblx0XHRcdHRyYXZlbF9hbmRfcGxhY2VzOiAnbG9jYXRpb25fb24nLFxyXG5cdFx0XHRhY3Rpdml0eTogJ2xvY2FsX2FjdGl2aXR5JyxcclxuXHRcdFx0Zm9vZF9hbmRfZHJpbms6ICdyZXN0YXVyYW50JyxcclxuXHRcdFx0b2JqZWN0czogJ2NvbXB1dGVyJyxcclxuXHRcdFx0ZmxhZ3M6ICdmbGFnJ1xyXG5cdFx0fTtcclxuXHRcdGZvciAobGV0IHBhaXIgb2YgdGhpcy5wYWlycyhFTU9KSVMpKSB7XHJcblx0XHRcdGxldCBuYW1lID0gcGFpclswXTtcclxuXHRcdFx0bGV0IGVtb2ppIDogRW1vamkgPSBwYWlyWzFdO1xyXG5cclxuXHRcdFx0aWYgKCFjYXRzW2Vtb2ppLmNhdGVnb3J5XSkge1xyXG5cdFx0XHRcdGNhdHNbZW1vamkuY2F0ZWdvcnldID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogZW1vamkuY2F0ZWdvcnksXHJcblx0XHRcdFx0XHRpY29uOiBjYXRlZ29yeUljb25zW2Vtb2ppLmNhdGVnb3J5XSB8fCAnY29kZScsXHJcblx0XHRcdFx0XHRlbW9qaXM6IFtdXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbW9qaS5odG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcblx0XHRcdFx0dHdlbW9qaS5wYXJzZShlbW9qaS5jaGFyIHx8ICcnLCB7IGJhc2U6ICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvdHdpdHRlci90d2Vtb2ppQDE0LjAuMi9hc3NldHMvJyB9KVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Y2F0c1tlbW9qaS5jYXRlZ29yeV0uZW1vamlzLnB1c2goZW1vamkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMucGFpcnMoY2F0cykubWFwKHBhaXIgPT4gcGFpclsxXSk7XHJcblx0fVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiICpuZ0lmPVwic2VhcmNoVmlzaWJsZVwiPlxyXG5cdDxhIG1hdC1pY29uLWJ1dHRvbiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImhpZGVTZWFyY2goKVwiPlxyXG5cdFx0PG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG5cdDwvYT5cclxuXHQ8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBmbG9hdExhYmVsPVwiYWx3YXlzXCI+XHJcblx0XHQ8bWF0LWxhYmVsPlNlYXJjaCBmb3IgZW1vamk8L21hdC1sYWJlbD5cclxuXHRcdDxpbnB1dCBuYW1lPVwic2VhcmNoXCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlN0YXJ0IHR5cGluZ1wiIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIiAvPlxyXG5cdDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInNlbGVjdG9yXCI+XHJcblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaFZpc2libGVcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJlbW9qaS1saXN0XCI+XHJcblx0XHRcdDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2VsZWN0KGVtb2ppLmNoYXIpXCIgXHJcblx0XHRcdFx0Km5nRm9yPVwibGV0IGVtb2ppIG9mIHNlYXJjaFJlc3VsdHNcIiBbaW5uZXJIdG1sXT1cImVtb2ppLmh0bWwgfHwgJydcIj5cclxuXHRcdFx0PC9hPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWFyY2hWaXNpYmxlXCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY2F0ZWdvcmllc1wiPlxyXG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlYXJjaFZpc2libGVcIj5cclxuXHRcdFx0XHQ8YSBbdGl0bGVdPVwiaHVtYW5pemUoY2F0ZWdvcnkubmFtZSlcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUNhdGVnb3J5ID09PSBjYXRlZ29yeS5uYW1lXCIgbWF0LWljb24tYnV0dG9uICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzXCIgKGNsaWNrKT1cImFjdGl2ZUNhdGVnb3J5ID0gY2F0ZWdvcnkubmFtZVwiPlxyXG5cdFx0XHRcdFx0PG1hdC1pY29uPnt7Y2F0ZWdvcnkuaWNvbn19PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2E+XHJcblxyXG5cdFx0XHRcdDxhIHRpdGxlPVwiU2VhcmNoXCIgW2NsYXNzLmFjdGl2ZV0gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93U2VhcmNoKClcIj5cclxuXHRcdFx0XHRcdDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG5cdFx0XHRcdDwvYT5cclxuXHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXNcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImVtb2ppLWxpc3RcIiAqbmdJZj1cImFjdGl2ZUNhdGVnb3J5ICYmIGFjdGl2ZUNhdGVnb3J5ID09IGNhdGVnb3J5Lm5hbWVcIj5cclxuXHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInNlbGVjdChlbW9qaS5jaGFyKVwiIFxyXG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IGVtb2ppIG9mIGNhdGVnb3J5LmVtb2ppc1wiIFtpbm5lckh0bWxdPVwiZW1vamkuaHRtbCB8fCAnJ1wiPlxyXG5cdFx0XHRcdDwvYT5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
@@ -0,0 +1,55 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { EmojiSelectorPanelComponent } from './emoji-selector-panel/emoji-selector-panel.component';
3
+ import { CommonModule } from '@angular/common';
4
+ import { EmojiSelectorButtonComponent } from './emoji-selector-button.component';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatButtonModule } from '@angular/material/button';
7
+ import { MatFormFieldModule } from '@angular/material/form-field';
8
+ import { MatInputModule } from '@angular/material/input';
9
+ import { FormsModule } from '@angular/forms';
10
+ import { OverlayModule } from '@angular/cdk/overlay';
11
+ import { PortalModule } from '@angular/cdk/portal';
12
+ import * as i0 from "@angular/core";
13
+ const COMPONENTS = [
14
+ EmojiSelectorPanelComponent,
15
+ EmojiSelectorButtonComponent
16
+ ];
17
+ export class EmojiModule {
18
+ }
19
+ EmojiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ EmojiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: EmojiModule, declarations: [EmojiSelectorPanelComponent,
21
+ EmojiSelectorButtonComponent], imports: [CommonModule,
22
+ FormsModule,
23
+ MatIconModule,
24
+ MatButtonModule,
25
+ MatFormFieldModule,
26
+ MatInputModule,
27
+ OverlayModule,
28
+ PortalModule], exports: [EmojiSelectorPanelComponent,
29
+ EmojiSelectorButtonComponent] });
30
+ EmojiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiModule, imports: [CommonModule,
31
+ FormsModule,
32
+ MatIconModule,
33
+ MatButtonModule,
34
+ MatFormFieldModule,
35
+ MatInputModule,
36
+ OverlayModule,
37
+ PortalModule] });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: EmojiModule, decorators: [{
39
+ type: NgModule,
40
+ args: [{
41
+ declarations: COMPONENTS,
42
+ imports: [
43
+ CommonModule,
44
+ FormsModule,
45
+ MatIconModule,
46
+ MatButtonModule,
47
+ MatFormFieldModule,
48
+ MatInputModule,
49
+ OverlayModule,
50
+ PortalModule
51
+ ],
52
+ exports: COMPONENTS
53
+ }]
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvZW1vamkvZW1vamkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUVuRCxNQUFNLFVBQVUsR0FBRztJQUNmLDJCQUEyQjtJQUMzQiw0QkFBNEI7Q0FDL0IsQ0FBQztBQWdCRixNQUFNLE9BQU8sV0FBVzs7eUdBQVgsV0FBVzswR0FBWCxXQUFXLGlCQWxCcEIsMkJBQTJCO1FBQzNCLDRCQUE0QixhQU14QixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxhQUFhO1FBQ2IsWUFBWSxhQWRoQiwyQkFBMkI7UUFDM0IsNEJBQTRCOzBHQWlCbkIsV0FBVyxZQVhoQixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxhQUFhO1FBQ2IsWUFBWTs0RkFJUCxXQUFXO2tCQWR2QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxVQUFVO29CQUN4QixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixZQUFZO3FCQUNmO29CQUNELE9BQU8sRUFBRSxVQUFVO2lCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVtb2ppU2VsZWN0b3JQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZW1vamktc2VsZWN0b3ItcGFuZWwvZW1vamktc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRW1vamlTZWxlY3RvckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZW1vamktc2VsZWN0b3ItYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcblxyXG5jb25zdCBDT01QT05FTlRTID0gW1xyXG4gICAgRW1vamlTZWxlY3RvclBhbmVsQ29tcG9uZW50LFxyXG4gICAgRW1vamlTZWxlY3RvckJ1dHRvbkNvbXBvbmVudFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogQ09NUE9ORU5UUyxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgICAgIE92ZXJsYXlNb2R1bGUsXHJcbiAgICAgICAgUG9ydGFsTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogQ09NUE9ORU5UU1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1vamlNb2R1bGUge1xyXG5cclxufSJdfQ==
@@ -0,0 +1,16 @@
1
+ export class GiphyAttachmentResolver {
2
+ async resolveFragment(message, fragment) {
3
+ if (fragment.type === 'url' && fragment.text.startsWith('https://giphy.com/gifs')) {
4
+ let gifId = /[^-\/]+$/.exec(fragment.text)?.toString();
5
+ if (!gifId)
6
+ return null;
7
+ return {
8
+ type: 'iframe',
9
+ url: `https://giphy.com/embed/${gifId}`,
10
+ style: 'inline'
11
+ };
12
+ }
13
+ return null;
14
+ }
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lwaHktYXR0YWNobWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9naXBoeS1hdHRhY2htZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2hDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBb0IsRUFBRSxRQUE0QjtRQUNwRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDL0UsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUs7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFFaEIsT0FBTztnQkFDSCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxHQUFHLEVBQUUsMkJBQTJCLEtBQUssRUFBRTtnQkFDdkMsS0FBSyxFQUFFLFFBQVE7YUFDbEIsQ0FBQztTQUNMO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCwgQXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSBcIi4vYXR0YWNobWVudC1zY3JhcGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR2lwaHlBdHRhY2htZW50UmVzb2x2ZXIgaW1wbGVtZW50cyBBdHRhY2htZW50UmVzb2x2ZXIge1xyXG4gICAgYXN5bmMgcmVzb2x2ZUZyYWdtZW50KG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBmcmFnbWVudDogQXR0YWNobWVudEZyYWdtZW50KTogUHJvbWlzZTxDaGF0TWVzc2FnZUF0dGFjaG1lbnQ+IHtcclxuICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSA9PT0gJ3VybCcgJiYgZnJhZ21lbnQudGV4dC5zdGFydHNXaXRoKCdodHRwczovL2dpcGh5LmNvbS9naWZzJykpIHtcclxuICAgICAgICAgICAgbGV0IGdpZklkID0gL1teLVxcL10rJC8uZXhlYyhmcmFnbWVudC50ZXh0KT8udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKCFnaWZJZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpZnJhbWUnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9naXBoeS5jb20vZW1iZWQvJHtnaWZJZH1gLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdpbmxpbmUnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufSJdfQ==
File without changes
@@ -0,0 +1,96 @@
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 "./comments/live-comment.component";
6
+ import * as i3 from "./chat/live-chat-message.component";
7
+ export class LiveMessageComponent {
8
+ constructor() {
9
+ this._upvoted = new Subject();
10
+ this._reported = new Subject();
11
+ this._selected = new Subject();
12
+ }
13
+ get upvoted() {
14
+ return this._upvoted;
15
+ }
16
+ get reported() {
17
+ return this._reported;
18
+ }
19
+ get selected() {
20
+ return this._selected;
21
+ }
22
+ get message() {
23
+ return this._message;
24
+ }
25
+ set message(value) {
26
+ this._message = value;
27
+ this.viewType = this.getViewType(value);
28
+ }
29
+ getViewType(message) {
30
+ if (message.topicId.endsWith('_firehose'))
31
+ return 'chat';
32
+ else if (message.topicId.endsWith('_thepoint'))
33
+ return 'comment';
34
+ return 'comment';
35
+ }
36
+ upvote() {
37
+ this._upvoted.next();
38
+ }
39
+ report() {
40
+ this._reported.next();
41
+ }
42
+ select() {
43
+ this._selected.next();
44
+ }
45
+ }
46
+ LiveMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
47
+ LiveMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LiveMessageComponent, selector: "banta-live-message", inputs: { message: "message" }, outputs: { upvoted: "upvoted", reported: "reported", selected: "selected" }, ngImport: i0, template: `
48
+ <ng-container *ngIf="message">
49
+ <banta-live-chat-message
50
+ *ngIf="viewType === 'chat'"
51
+ [message]="message"
52
+ (upvoted)="upvote(message)"
53
+ (reported)="report(message)"
54
+ (selected)="select(message)">
55
+ </banta-live-chat-message>
56
+
57
+ <banta-live-comment
58
+ *ngIf="viewType === 'comment'"
59
+ [message]="message"
60
+ (upvoted)="upvote(message)"
61
+ (reported)="report(message)"
62
+ (selected)="select(message)">
63
+ </banta-live-comment>
64
+ </ng-container>
65
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LiveCommentComponent, selector: "banta-live-comment", inputs: ["message"], outputs: ["upvoted", "reported", "selected"] }, { kind: "component", type: i3.LiveChatMessageComponent, selector: "banta-live-chat-message", inputs: ["message"], outputs: ["upvoted", "reported", "selected"] }] });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveMessageComponent, decorators: [{
67
+ type: Component,
68
+ args: [{ selector: 'banta-live-message', template: `
69
+ <ng-container *ngIf="message">
70
+ <banta-live-chat-message
71
+ *ngIf="viewType === 'chat'"
72
+ [message]="message"
73
+ (upvoted)="upvote(message)"
74
+ (reported)="report(message)"
75
+ (selected)="select(message)">
76
+ </banta-live-chat-message>
77
+
78
+ <banta-live-comment
79
+ *ngIf="viewType === 'comment'"
80
+ [message]="message"
81
+ (upvoted)="upvote(message)"
82
+ (reported)="report(message)"
83
+ (selected)="select(message)">
84
+ </banta-live-comment>
85
+ </ng-container>
86
+ ` }]
87
+ }], ctorParameters: function () { return []; }, propDecorators: { upvoted: [{
88
+ type: Output
89
+ }], reported: [{
90
+ type: Output
91
+ }], selected: [{
92
+ type: Output
93
+ }], message: [{
94
+ type: Input
95
+ }] } });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2xpdmUtbWVzc2FnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBeUIzQyxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCO1FBS1EsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFMeEMsQ0FBQztJQVNELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sV0FBVyxDQUFDLE9BQXFCO1FBQ3JDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDO2FBQ2IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDMUMsT0FBTyxTQUFTLENBQUM7UUFFckIsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7a0hBeERRLG9CQUFvQjtzR0FBcEIsb0JBQW9CLHVLQXJCbkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQWtCVDs0RkFHUSxvQkFBb0I7a0JBdkJoQyxTQUFTOytCQUNJLG9CQUFvQixZQUNwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0JUOzBFQWdCRyxPQUFPO3NCQURWLE1BQU07Z0JBTUgsUUFBUTtzQkFEWCxNQUFNO2dCQU1ILFFBQVE7c0JBRFgsTUFBTTtnQkFNSCxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGl2ZS1tZXNzYWdlJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGJhbnRhLWxpdmUtY2hhdC1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdUeXBlID09PSAnY2hhdCdcIlxyXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGUobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydChtZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0KG1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgIDwvYmFudGEtbGl2ZS1jaGF0LW1lc3NhZ2U+XHJcblxyXG4gICAgICAgICAgICA8YmFudGEtbGl2ZS1jb21tZW50IFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ2aWV3VHlwZSA9PT0gJ2NvbW1lbnQnXCJcclxuICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlKG1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnQobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdChtZXNzYWdlKVwiPlxyXG4gICAgICAgICAgICA8L2JhbnRhLWxpdmUtY29tbWVudD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpdmVNZXNzYWdlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcbiAgICBwcml2YXRlIF91cHZvdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICB2aWV3VHlwZSA6IHN0cmluZztcclxuXHJcbiAgICBAT3V0cHV0KCkgXHJcbiAgICBnZXQgdXB2b3RlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXB2b3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgXHJcbiAgICBnZXQgcmVwb3J0ZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcG9ydGVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBAT3V0cHV0KCkgXHJcbiAgICBnZXQgc2VsZWN0ZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgbWVzc2FnZSgpIDogQ2hhdE1lc3NhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtZXNzYWdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudmlld1R5cGUgPSB0aGlzLmdldFZpZXdUeXBlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZpZXdUeXBlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLnRvcGljSWQuZW5kc1dpdGgoJ19maXJlaG9zZScpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2NoYXQnO1xyXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UudG9waWNJZC5lbmRzV2l0aCgnX3RoZXBvaW50JykpXHJcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XHJcblxyXG4gICAgICAgIHJldHVybiAnY29tbWVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgdXB2b3RlKCkge1xyXG4gICAgICAgIHRoaXMuX3Vwdm90ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcG9ydCgpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbn0iXX0=
@@ -0,0 +1,13 @@
1
+ export class TweetAttachmentResolver {
2
+ async resolveFragment(message, fragment) {
3
+ if (fragment.type === 'url' && fragment.text.startsWith('https://twitter.com/')) {
4
+ return {
5
+ type: 'tweet',
6
+ url: fragment.text,
7
+ style: 'block'
8
+ };
9
+ }
10
+ return null;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdlZXQtYXR0YWNobWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi90d2VldC1hdHRhY2htZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2hDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBb0IsRUFBRSxRQUE0QjtRQUNwRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDN0UsT0FBTztnQkFDSCxJQUFJLEVBQUUsT0FBTztnQkFDYixHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ2xCLEtBQUssRUFBRSxPQUFPO2FBQ2pCLENBQUM7U0FDTDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZUF0dGFjaG1lbnQgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RnJhZ21lbnQsIEF0dGFjaG1lbnRSZXNvbHZlciB9IGZyb20gXCIuL2F0dGFjaG1lbnQtc2NyYXBlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFR3ZWV0QXR0YWNobWVudFJlc29sdmVyIGltcGxlbWVudHMgQXR0YWNobWVudFJlc29sdmVyIHtcclxuICAgIGFzeW5jIHJlc29sdmVGcmFnbWVudChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PiB7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT09ICd1cmwnICYmIGZyYWdtZW50LnRleHQuc3RhcnRzV2l0aCgnaHR0cHM6Ly90d2l0dGVyLmNvbS8nKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3R3ZWV0JyxcclxuICAgICAgICAgICAgICAgIHVybDogZnJhZ21lbnQudGV4dCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiAnYmxvY2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufSJdfQ==