@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,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 "./comment/comment.component";
7
+ export class LiveCommentComponent {
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
+ }
50
+ LiveCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveCommentComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component });
51
+ LiveCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LiveCommentComponent, selector: "banta-live-comment", inputs: { message: "message" }, outputs: { upvoted: "upvoted", reported: "reported", selected: "selected" }, ngImport: i0, template: `
52
+ <banta-comment
53
+ *ngIf="message"
54
+ [message]="message"
55
+ (upvoted)="upvote()"
56
+ (reported)="report()"
57
+ (selected)="select()"
58
+ ></banta-comment>
59
+ `, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CommentComponent, selector: "banta-comment", inputs: ["maxLength", "message", "customMenuItems", "showReplyAction", "permissions", "mine", "editing", "genericAvatarUrl"], outputs: ["loaded", "userSelected", "usernameSelected", "avatarSelected", "reported", "liked", "unliked", "selected", "edited", "deleted", "editStarted", "editEnded", "shared"] }] });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LiveCommentComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'banta-live-comment', template: `
63
+ <banta-comment
64
+ *ngIf="message"
65
+ [message]="message"
66
+ (upvoted)="upvote()"
67
+ (reported)="report()"
68
+ (selected)="select()"
69
+ ></banta-comment>
70
+ ` }]
71
+ }], ctorParameters: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1jb21tZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL2xpdmUtY29tbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBZ0IzQyxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQ1ksT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFNN0IsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFMeEMsQ0FBQztJQU9ELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNiLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2IsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksS0FBSyxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVc7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXZCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1NBQzFGO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7a0hBL0RRLG9CQUFvQjtzR0FBcEIsb0JBQW9CLHVLQVhuQjs7Ozs7Ozs7S0FRVDs0RkFHUSxvQkFBb0I7a0JBYmhDLFNBQVM7K0JBQ0ksb0JBQW9CLFlBQ3BCOzs7Ozs7OztLQVFUO3NHQWdCRyxPQUFPO3NCQURWLE1BQU07Z0JBTUgsUUFBUTtzQkFEWCxNQUFNO2dCQU1ILFFBQVE7c0JBRFgsTUFBTTtnQkFNSCxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tICcuLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGl2ZS1jb21tZW50JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQgXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGUoKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnQoKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnQ+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVzOiBbYGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXZlQ29tbWVudENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcbiAgICBwcml2YXRlIF91cHZvdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1cHZvdGVkKCkgOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXB2b3RlZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcmVwb3J0ZWQoKSA6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIDogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1lc3NhZ2UoKSA6IENoYXRNZXNzYWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlIDogRnVuY3Rpb247XHJcblxyXG4gICAgc2V0IG1lc3NhZ2UodmFsdWUpIHtcclxuICAgICAgICBsZXQgb3JpZ2luYWxJZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsSWQgPSB0aGlzLl9tZXNzYWdlLmlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICYmIG9yaWdpbmFsSWQgPT09IHZhbHVlLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMudW5zdWJzY3JpYmUpXHJcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMuYmFja2VuZC53YXRjaE1lc3NhZ2UodmFsdWUsIG1lc3NhZ2UgPT4gdGhpcy5tZXNzYWdlID0gbWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlcG9ydCgpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHVwdm90ZSgpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,13 @@
1
+ import { Directive } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class BantaReplySendOptionsDirective {
4
+ }
5
+ BantaReplySendOptionsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaReplySendOptionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
+ BantaReplySendOptionsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: BantaReplySendOptionsDirective, selector: "[bantaReplySendOptions]", ngImport: i0 });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaReplySendOptionsDirective, decorators: [{
8
+ type: Directive,
9
+ args: [{
10
+ selector: `[bantaReplySendOptions]`
11
+ }]
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbHktc2VuZC1vcHRpb25zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1lbnRzL3JlcGx5LXNlbmQtb3B0aW9ucy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDhCQUE4Qjs7NEhBQTlCLDhCQUE4QjtnSEFBOUIsOEJBQThCOzRGQUE5Qiw4QkFBOEI7a0JBSDFDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogYFtiYW50YVJlcGx5U2VuZE9wdGlvbnNdYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFSZXBseVNlbmRPcHRpb25zRGlyZWN0aXZlIHt9Il19
@@ -0,0 +1,113 @@
1
+ import { Component, HostBinding, 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/cdk/bidi";
7
+ import * as i4 from "@angular/material/progress-spinner";
8
+ import * as i5 from "@angular/material/button";
9
+ import * as i6 from "../trust-resource-url.pipe";
10
+ export class BantaAttachmentComponent {
11
+ constructor(elementRef) {
12
+ this.elementRef = elementRef;
13
+ this.loading = false;
14
+ this.editing = false;
15
+ this.loadingMessage = 'Please wait...';
16
+ this.error = false;
17
+ this.errorMessage = 'An error has occurred';
18
+ this.removed = new Subject();
19
+ this.activated = new Subject();
20
+ this.loaded = new Subject();
21
+ this._viewLoaded = false;
22
+ }
23
+ get attachment() { return this._attachment; }
24
+ set attachment(value) {
25
+ this._attachment = value;
26
+ this.checkLoad();
27
+ }
28
+ ngOnInit() {
29
+ if (typeof window !== 'undefined') {
30
+ setTimeout(() => {
31
+ if (!window['twttr'])
32
+ return;
33
+ window['twttr'].widgets.load();
34
+ }, 100);
35
+ }
36
+ }
37
+ ngAfterViewInit() {
38
+ this._viewLoaded = true;
39
+ this.checkLoad();
40
+ }
41
+ checkLoad() {
42
+ if (!this._attachment || !this._viewLoaded || !this.elementRef?.nativeElement)
43
+ return;
44
+ if (typeof window === 'undefined')
45
+ this.loaded.next();
46
+ else
47
+ setTimeout(() => this.loaded.next(), 250);
48
+ }
49
+ activate() {
50
+ this.activated.next();
51
+ }
52
+ remove() {
53
+ this.removed.next();
54
+ }
55
+ get isError() {
56
+ return this.error || this.attachment?.transientState?.error;
57
+ }
58
+ get theErrorMessage() {
59
+ return this.errorMessage || this.attachment?.transientState?.errorMessage;
60
+ }
61
+ get isLoading() {
62
+ return this.loading || !this.attachment || this.attachment.transientState?.loading || !this.attachment.url;
63
+ }
64
+ get isImageAttachment() {
65
+ if (this.attachment.type.startsWith('image/'))
66
+ return true;
67
+ return false;
68
+ }
69
+ get hasFrame() {
70
+ if (!this.attachment)
71
+ return false;
72
+ return this.attachment.type === 'iframe' || (this.attachment.type === 'card'
73
+ && this.attachment.card.player);
74
+ }
75
+ get frameUrl() {
76
+ if (!this.attachment)
77
+ return undefined;
78
+ if (this.attachment.type === 'iframe') {
79
+ return this.attachment.url;
80
+ }
81
+ else if (this.attachment.type === 'card') {
82
+ return this.attachment.card.player;
83
+ }
84
+ }
85
+ }
86
+ BantaAttachmentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
87
+ BantaAttachmentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaAttachmentComponent, selector: "banta-attachment", inputs: { attachment: "attachment", loading: "loading", editing: "editing", loadingMessage: "loadingMessage", error: "error", errorMessage: "errorMessage" }, outputs: { removed: "removed", activated: "activated", loaded: "loaded" }, host: { properties: { "class.loading": "this.isLoading" } }, ngImport: i0, template: "<button type=\"button\" (click)=\"remove()\" mat-mini-fab color=\"primary\" class=\"remove-button\" *ngIf=\"editing\">\r\n <mat-icon>close</mat-icon>\r\n</button>\r\n\r\n<ng-container *ngIf=\"isError\">\r\n <mat-icon class=\"error\">close</mat-icon>\r\n <em class=\"error\">{{theErrorMessage}}</em>\r\n</ng-container>\r\n<ng-container *ngIf=\"!isError\">\r\n <ng-container *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n <em>{{loadingMessage}}</em>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <iframe *ngIf=\"hasFrame\"\r\n sandbox=\"allow-scripts allow-popups allow-same-origin allow-presentation\" \r\n [src]=\"frameUrl | trustResourceUrl\"></iframe>\r\n <a *ngIf=\"attachment.type === 'card'\" class=\"card-attachment\" [href]=\"attachment.url\" target=\"_blank\" [class.has-image]=\"attachment.card.image\">\r\n <img \r\n *ngIf=\"attachment.card.image\"\r\n class=\"thumbnail\" \r\n [src]=\"attachment.card.image\"\r\n />\r\n <div class=\"description\">\r\n <h1>{{attachment.card.title}}</h1>\r\n <div class=\"summary\">\r\n {{attachment.card.description}}\r\n </div>\r\n <cite>{{attachment.card.url}}</cite>\r\n </div>\r\n </a>\r\n <a class=\"image-attachment\" *ngIf=\"isImageAttachment\" href=\"javascript:;\" (click)=\"activate()\">\r\n <img [src]=\"attachment.url\" alt=\"Image Attachment\">\r\n </a>\r\n <blockquote *ngIf=\"attachment.type === 'tweet'\" \r\n class=\"twitter-tweet\">\r\n <p lang=\"en\" dir=\"ltr\"></p>\r\n <a [href]=\"attachment.url\"></a>\r\n </blockquote>\r\n </ng-container>\r\n</ng-container>", styles: [":host{position:relative;display:block}:host.loading{outline:1px solid #333;padding:1em 0;width:300px;text-align:center}:host.loading mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.card-attachment{display:flex;align-items:flex-start;gap:1em;width:100%;border:1px solid #666;border-radius:4px;padding:1em;box-sizing:border-box;background-color:#191919;margin:1em 0}a.card-attachment img{width:250px;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover;border-radius:10px}a.card-attachment.has-image h1{font-size:22px}a.card-attachment h1{min-width:0;margin:0 0 .5em;font-size:26px}a.card-attachment cite{min-width:0;opacity:.75;margin-top:1em;display:block;font-size:80%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}a.card-attachment .description{min-width:0;width:100%}a.card-attachment .summary{overflow-x:hidden;text-overflow:ellipsis}.remove-button{position:absolute;right:10px;top:10px;margin:0;z-index:1}a.image-attachment{width:300px;position:relative;text-align:center}a.image-attachment.with-border{outline:1px solid #333;padding:1em 0}a.image-attachment mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.image-attachment mat-icon.error{display:block;font-size:48px;width:48px;height:48px;margin:0 auto .5em}a.image-attachment .error{color:#b76363}a.image-attachment img{width:300px;border-radius:10px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}iframe{border:none;width:100%;aspect-ratio:16/9}@media (max-width: 700px){a.card-attachment{flex-direction:column}a.card-attachment img{width:100%}}\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: "directive", type: i3.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5.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: "pipe", type: i6.BantaTrustResourceUrlPipe, name: "trustResourceUrl" }] });
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentComponent, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'banta-attachment', template: "<button type=\"button\" (click)=\"remove()\" mat-mini-fab color=\"primary\" class=\"remove-button\" *ngIf=\"editing\">\r\n <mat-icon>close</mat-icon>\r\n</button>\r\n\r\n<ng-container *ngIf=\"isError\">\r\n <mat-icon class=\"error\">close</mat-icon>\r\n <em class=\"error\">{{theErrorMessage}}</em>\r\n</ng-container>\r\n<ng-container *ngIf=\"!isError\">\r\n <ng-container *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n <em>{{loadingMessage}}</em>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <iframe *ngIf=\"hasFrame\"\r\n sandbox=\"allow-scripts allow-popups allow-same-origin allow-presentation\" \r\n [src]=\"frameUrl | trustResourceUrl\"></iframe>\r\n <a *ngIf=\"attachment.type === 'card'\" class=\"card-attachment\" [href]=\"attachment.url\" target=\"_blank\" [class.has-image]=\"attachment.card.image\">\r\n <img \r\n *ngIf=\"attachment.card.image\"\r\n class=\"thumbnail\" \r\n [src]=\"attachment.card.image\"\r\n />\r\n <div class=\"description\">\r\n <h1>{{attachment.card.title}}</h1>\r\n <div class=\"summary\">\r\n {{attachment.card.description}}\r\n </div>\r\n <cite>{{attachment.card.url}}</cite>\r\n </div>\r\n </a>\r\n <a class=\"image-attachment\" *ngIf=\"isImageAttachment\" href=\"javascript:;\" (click)=\"activate()\">\r\n <img [src]=\"attachment.url\" alt=\"Image Attachment\">\r\n </a>\r\n <blockquote *ngIf=\"attachment.type === 'tweet'\" \r\n class=\"twitter-tweet\">\r\n <p lang=\"en\" dir=\"ltr\"></p>\r\n <a [href]=\"attachment.url\"></a>\r\n </blockquote>\r\n </ng-container>\r\n</ng-container>", styles: [":host{position:relative;display:block}:host.loading{outline:1px solid #333;padding:1em 0;width:300px;text-align:center}:host.loading mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.card-attachment{display:flex;align-items:flex-start;gap:1em;width:100%;border:1px solid #666;border-radius:4px;padding:1em;box-sizing:border-box;background-color:#191919;margin:1em 0}a.card-attachment img{width:250px;aspect-ratio:16/9;-o-object-fit:cover;object-fit:cover;border-radius:10px}a.card-attachment.has-image h1{font-size:22px}a.card-attachment h1{min-width:0;margin:0 0 .5em;font-size:26px}a.card-attachment cite{min-width:0;opacity:.75;margin-top:1em;display:block;font-size:80%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}a.card-attachment .description{min-width:0;width:100%}a.card-attachment .summary{overflow-x:hidden;text-overflow:ellipsis}.remove-button{position:absolute;right:10px;top:10px;margin:0;z-index:1}a.image-attachment{width:300px;position:relative;text-align:center}a.image-attachment.with-border{outline:1px solid #333;padding:1em 0}a.image-attachment mat-spinner{display:block;margin:0 auto .5em;width:-moz-fit-content;width:fit-content}a.image-attachment mat-icon.error{display:block;font-size:48px;width:48px;height:48px;margin:0 auto .5em}a.image-attachment .error{color:#b76363}a.image-attachment img{width:300px;border-radius:10px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}iframe{border:none;width:100%;aspect-ratio:16/9}@media (max-width: 700px){a.card-attachment{flex-direction:column}a.card-attachment img{width:100%}}\n"] }]
91
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { attachment: [{
92
+ type: Input
93
+ }], loading: [{
94
+ type: Input
95
+ }], editing: [{
96
+ type: Input
97
+ }], loadingMessage: [{
98
+ type: Input
99
+ }], error: [{
100
+ type: Input
101
+ }], errorMessage: [{
102
+ type: Input
103
+ }], removed: [{
104
+ type: Output
105
+ }], activated: [{
106
+ type: Output
107
+ }], loaded: [{
108
+ type: Output
109
+ }], isLoading: [{
110
+ type: HostBinding,
111
+ args: ['class.loading']
112
+ }] } });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tb24vYXR0YWNobWVudC9hdHRhY2htZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU8vQixNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDLFlBQ1ksVUFBbUM7UUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFXdEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLG1CQUFjLEdBQVcsZ0JBQWdCLENBQUM7UUFDMUMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGlCQUFZLEdBQVcsdUJBQXVCLENBQUM7UUFDOUMsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDOUIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFZL0IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUEzQjVCLENBQUM7SUFHRCxJQUFhLFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksVUFBVSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFVRCxRQUFRO1FBQ0osSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDaEIsT0FBTztnQkFDWCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNYO0lBQ0wsQ0FBQztJQUdELGVBQWU7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFNBQVM7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWE7WUFDekUsT0FBTztRQUVYLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDOztZQUVuQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUNJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQy9HLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQixPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNO2VBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDakMsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDaEIsT0FBTyxTQUFTLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztTQUM5QjthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQzs7c0hBOUZRLHdCQUF3QjswR0FBeEIsd0JBQXdCLDhWQ1RyQyw2MURBd0NlOzRGRC9CRix3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksa0JBQWtCO2lHQVlmLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBNkNILFNBQVM7c0JBRFosV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWF0dGFjaG1lbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUF0dGFjaG1lbnRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2F0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudDtcclxuICAgIEBJbnB1dCgpIGdldCBhdHRhY2htZW50KCkgeyByZXR1cm4gdGhpcy5fYXR0YWNobWVudDsgfVxyXG4gICAgc2V0IGF0dGFjaG1lbnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9hdHRhY2htZW50ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jaGVja0xvYWQoKTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGVkaXRpbmcgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgPSAnUGxlYXNlIHdhaXQuLi4nO1xyXG4gICAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCc7XHJcbiAgICBAT3V0cHV0KCkgcmVtb3ZlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgYWN0aXZhdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBsb2FkZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghd2luZG93Wyd0d3R0ciddKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHdpbmRvd1sndHd0dHInXS53aWRnZXRzLmxvYWQoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdmlld0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0xvYWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9hdHRhY2htZW50IHx8ICF0aGlzLl92aWV3TG9hZGVkIHx8ICF0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZC5uZXh0KCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZGVkLm5leHQoKSwgMjUwKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlKCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IgfHwgdGhpcy5hdHRhY2htZW50Py50cmFuc2llbnRTdGF0ZT8uZXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRoZUVycm9yTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgfHwgdGhpcy5hdHRhY2htZW50Py50cmFuc2llbnRTdGF0ZT8uZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubG9hZGluZycpXHJcbiAgICBnZXQgaXNMb2FkaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgfHwgIXRoaXMuYXR0YWNobWVudCB8fCB0aGlzLmF0dGFjaG1lbnQudHJhbnNpZW50U3RhdGU/LmxvYWRpbmcgfHwgIXRoaXMuYXR0YWNobWVudC51cmw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW1hZ2VBdHRhY2htZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnQudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoYXNGcmFtZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXR0YWNobWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50LnR5cGUgPT09ICdpZnJhbWUnIHx8IChcclxuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50LnR5cGUgPT09ICdjYXJkJyBcclxuICAgICAgICAgICAgJiYgdGhpcy5hdHRhY2htZW50LmNhcmQucGxheWVyXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZnJhbWVVcmwoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF0dGFjaG1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNobWVudC50eXBlID09PSAnaWZyYW1lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50LnVybDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXR0YWNobWVudC50eXBlID09PSAnY2FyZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudC5jYXJkLnBsYXllcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVtb3ZlKClcIiBtYXQtbWluaS1mYWIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJyZW1vdmUtYnV0dG9uXCIgKm5nSWY9XCJlZGl0aW5nXCI+XHJcbiAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vycm9yXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJlcnJvclwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDxlbSBjbGFzcz1cImVycm9yXCI+e3t0aGVFcnJvck1lc3NhZ2V9fTwvZW0+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRXJyb3JcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8ZW0+e3tsb2FkaW5nTWVzc2FnZX19PC9lbT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICAgICAgICA8aWZyYW1lICpuZ0lmPVwiaGFzRnJhbWVcIlxyXG4gICAgICAgICAgICBzYW5kYm94PVwiYWxsb3ctc2NyaXB0cyBhbGxvdy1wb3B1cHMgYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctcHJlc2VudGF0aW9uXCIgXHJcbiAgICAgICAgICAgIFtzcmNdPVwiZnJhbWVVcmwgfCB0cnVzdFJlc291cmNlVXJsXCI+PC9pZnJhbWU+XHJcbiAgICAgICAgPGEgKm5nSWY9XCJhdHRhY2htZW50LnR5cGUgPT09ICdjYXJkJ1wiIGNsYXNzPVwiY2FyZC1hdHRhY2htZW50XCIgW2hyZWZdPVwiYXR0YWNobWVudC51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbY2xhc3MuaGFzLWltYWdlXT1cImF0dGFjaG1lbnQuY2FyZC5pbWFnZVwiPlxyXG4gICAgICAgICAgICA8aW1nIFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50LmNhcmQuaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHVtYm5haWxcIiBcclxuICAgICAgICAgICAgICAgIFtzcmNdPVwiYXR0YWNobWVudC5jYXJkLmltYWdlXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGgxPnt7YXR0YWNobWVudC5jYXJkLnRpdGxlfX08L2gxPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2F0dGFjaG1lbnQuY2FyZC5kZXNjcmlwdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxjaXRlPnt7YXR0YWNobWVudC5jYXJkLnVybH19PC9jaXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJpbWFnZS1hdHRhY2htZW50XCIgKm5nSWY9XCJpc0ltYWdlQXR0YWNobWVudFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwiYWN0aXZhdGUoKVwiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiYXR0YWNobWVudC51cmxcIiBhbHQ9XCJJbWFnZSBBdHRhY2htZW50XCI+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDxibG9ja3F1b3RlICpuZ0lmPVwiYXR0YWNobWVudC50eXBlID09PSAndHdlZXQnXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwidHdpdHRlci10d2VldFwiPlxyXG4gICAgICAgICAgICAgICAgPHAgbGFuZz1cImVuXCIgZGlyPVwibHRyXCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYXR0YWNobWVudC51cmxcIj48L2E+XHJcbiAgICAgICAgPC9ibG9ja3F1b3RlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -0,0 +1,72 @@
1
+ import { Component, Input, Output, ViewChild } 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 "../lightbox/lightbox.component";
6
+ import * as i3 from "../attachment/attachment.component";
7
+ export class BantaAttachmentsComponent {
8
+ constructor() {
9
+ this.editing = false;
10
+ this.remove = new Subject();
11
+ this.loaded = new Subject();
12
+ this.loadedAttachments = new WeakMap();
13
+ }
14
+ ngAfterViewInit() {
15
+ }
16
+ markAttachmentLoaded(attachment) {
17
+ this.loadedAttachments.set(attachment, true);
18
+ if (this.allAttachmentsLoaded)
19
+ this.loaded.next();
20
+ }
21
+ isAttachmentLoaded(attachment) {
22
+ return this.loadedAttachments.has(attachment);
23
+ }
24
+ get allAttachmentsLoaded() {
25
+ return this.attachments.every(x => this.isAttachmentLoaded(x));
26
+ }
27
+ removeAttachment(attachment) {
28
+ this.remove.next(attachment);
29
+ }
30
+ isImageAttachment(attachment) {
31
+ if (attachment.type.startsWith('image/'))
32
+ return true;
33
+ return false;
34
+ }
35
+ isCardAttachment(attachment) {
36
+ if (['card'].includes(attachment.type))
37
+ return true;
38
+ return false;
39
+ }
40
+ showLightbox(image) {
41
+ this.lightbox.open(image.url, this.attachments
42
+ .filter(x => x.type === 'image/png')
43
+ .map(x => x.url));
44
+ }
45
+ get inlineAttachments() {
46
+ return this.attachments.filter(x => x.type !== 'card' && (x.style === 'inline' || !x.style));
47
+ }
48
+ get blockAttachments() {
49
+ return this.attachments.filter(x => x.style === 'block' || x.type === 'card');
50
+ }
51
+ attachmentId(index, attachment) {
52
+ return attachment.url;
53
+ }
54
+ }
55
+ BantaAttachmentsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
+ BantaAttachmentsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaAttachmentsComponent, selector: "banta-attachments", inputs: { attachments: "attachments", editing: "editing" }, outputs: { remove: "remove", loaded: "loaded" }, viewQueries: [{ propertyName: "lightbox", first: true, predicate: ["lightbox"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"attachments?.length > 0\">\r\n <banta-lightbox #lightbox></banta-lightbox>\r\n <div class=\"block-attachments\">\r\n <ng-container *ngFor=\"let attachment of blockAttachments; trackBy: attachmentId\">\r\n <banta-attachment \r\n [attachment]=\"attachment\"\r\n [editing]=\"editing\"\r\n (loaded)=\"markAttachmentLoaded(attachment)\"\r\n (removed)=\"removeAttachment(attachment)\"\r\n (activated)=\"showLightbox(attachment)\"\r\n ></banta-attachment>\r\n </ng-container>\r\n </div>\r\n\r\n <div \r\n class=\"inline-attachments\" \r\n [class.single]=\"attachments?.length === 1\" \r\n *ngIf=\"attachments && attachments?.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let attachment of inlineAttachments; trackBy: attachmentId\">\r\n <banta-attachment \r\n [attachment]=\"attachment\"\r\n [editing]=\"editing\"\r\n (loaded)=\"markAttachmentLoaded(attachment)\"\r\n (removed)=\"removeAttachment(attachment)\"\r\n (activated)=\"showLightbox(attachment)\"\r\n ></banta-attachment>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [".block-attachments{display:flex;flex-direction:column}.block-attachments banta-attachment{width:100%}.inline-attachments{flex-direction:row;margin-top:15px;display:flex;gap:20px;flex-wrap:wrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LightboxComponent, selector: "banta-lightbox" }, { kind: "component", type: i3.BantaAttachmentComponent, selector: "banta-attachment", inputs: ["attachment", "loading", "editing", "loadingMessage", "error", "errorMessage"], outputs: ["removed", "activated", "loaded"] }] });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaAttachmentsComponent, decorators: [{
58
+ type: Component,
59
+ args: [{ selector: 'banta-attachments', template: "<ng-container *ngIf=\"attachments?.length > 0\">\r\n <banta-lightbox #lightbox></banta-lightbox>\r\n <div class=\"block-attachments\">\r\n <ng-container *ngFor=\"let attachment of blockAttachments; trackBy: attachmentId\">\r\n <banta-attachment \r\n [attachment]=\"attachment\"\r\n [editing]=\"editing\"\r\n (loaded)=\"markAttachmentLoaded(attachment)\"\r\n (removed)=\"removeAttachment(attachment)\"\r\n (activated)=\"showLightbox(attachment)\"\r\n ></banta-attachment>\r\n </ng-container>\r\n </div>\r\n\r\n <div \r\n class=\"inline-attachments\" \r\n [class.single]=\"attachments?.length === 1\" \r\n *ngIf=\"attachments && attachments?.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let attachment of inlineAttachments; trackBy: attachmentId\">\r\n <banta-attachment \r\n [attachment]=\"attachment\"\r\n [editing]=\"editing\"\r\n (loaded)=\"markAttachmentLoaded(attachment)\"\r\n (removed)=\"removeAttachment(attachment)\"\r\n (activated)=\"showLightbox(attachment)\"\r\n ></banta-attachment>\r\n </ng-container>\r\n </div>\r\n</ng-container>", styles: [".block-attachments{display:flex;flex-direction:column}.block-attachments banta-attachment{width:100%}.inline-attachments{flex-direction:row;margin-top:15px;display:flex;gap:20px;flex-wrap:wrap}\n"] }]
60
+ }], propDecorators: { attachments: [{
61
+ type: Input
62
+ }], editing: [{
63
+ type: Input
64
+ }], lightbox: [{
65
+ type: ViewChild,
66
+ args: ['lightbox']
67
+ }], remove: [{
68
+ type: Output
69
+ }], loaded: [{
70
+ type: Output
71
+ }] } });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL2F0dGFjaG1lbnRzL2F0dGFjaG1lbnRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9hdHRhY2htZW50cy9hdHRhY2htZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUS9CLE1BQU0sT0FBTyx5QkFBeUI7SUFMdEM7UUFPYSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWYsV0FBTSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQzlDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXZDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFrQyxDQUFDO0tBeURyRTtJQXZERyxlQUFlO0lBRWYsQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQWlDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFpQztRQUNoRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBaUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQWlDO1FBQy9DLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFpQztRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUE0QjtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDZCxLQUFLLENBQUMsR0FBRyxFQUNULElBQUksQ0FBQyxXQUFXO2FBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7YUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2QixDQUFBO0lBQ0wsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLFVBQWlDO1FBQ3pELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUMxQixDQUFDOzt1SEEvRFEseUJBQXlCOzJHQUF6Qix5QkFBeUIsNFFDVnRDLHd5Q0E2QmU7NEZEbkJGLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSxtQkFBbUI7OEJBS3BCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNpQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1gsTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMaWdodGJveENvbXBvbmVudCB9IGZyb20gXCIuLi9saWdodGJveC9saWdodGJveC5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS1hdHRhY2htZW50cycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudHMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFBdHRhY2htZW50c0NvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBhdHRhY2htZW50czogQ2hhdE1lc3NhZ2VBdHRhY2htZW50W107XHJcbiAgICBASW5wdXQoKSBlZGl0aW5nID0gZmFsc2U7XHJcbiAgICBAVmlld0NoaWxkKCdsaWdodGJveCcpIGxpZ2h0Ym94OiBMaWdodGJveENvbXBvbmVudDtcclxuICAgIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZUF0dGFjaG1lbnQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgbG9hZGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBsb2FkZWRBdHRhY2htZW50cyA9IG5ldyBXZWFrTWFwPENoYXRNZXNzYWdlQXR0YWNobWVudCwgYm9vbGVhbj4oKTtcclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBdHRhY2htZW50TG9hZGVkKGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIHRoaXMubG9hZGVkQXR0YWNobWVudHMuc2V0KGF0dGFjaG1lbnQsIHRydWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGxBdHRhY2htZW50c0xvYWRlZClcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXR0YWNobWVudExvYWRlZChhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRBdHRhY2htZW50cy5oYXMoYXR0YWNobWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFsbEF0dGFjaG1lbnRzTG9hZGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnRzLmV2ZXJ5KHggPT4gdGhpcy5pc0F0dGFjaG1lbnRMb2FkZWQoeCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUF0dGFjaG1lbnQoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmUubmV4dChhdHRhY2htZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ltYWdlQXR0YWNobWVudChhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoYXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYXJkQXR0YWNobWVudChhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoWydjYXJkJ10uaW5jbHVkZXMoYXR0YWNobWVudC50eXBlKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dMaWdodGJveChpbWFnZTogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgdGhpcy5saWdodGJveC5vcGVuKFxyXG4gICAgICAgICAgICBpbWFnZS51cmwsXHJcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LnR5cGUgPT09ICdpbWFnZS9wbmcnKVxyXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgudXJsKVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5saW5lQXR0YWNobWVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudHMuZmlsdGVyKHggPT4geC50eXBlICE9PSAnY2FyZCcgJiYgKHguc3R5bGUgPT09ICdpbmxpbmUnIHx8ICF4LnN0eWxlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJsb2NrQXR0YWNobWVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudHMuZmlsdGVyKHggPT4geC5zdHlsZSA9PT0gJ2Jsb2NrJyB8fCB4LnR5cGUgPT09ICdjYXJkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0YWNobWVudElkKGluZGV4OiBudW1iZXIsIGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIHJldHVybiBhdHRhY2htZW50LnVybDtcclxuICAgIH1cclxufSIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJhdHRhY2htZW50cz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgPGJhbnRhLWxpZ2h0Ym94ICNsaWdodGJveD48L2JhbnRhLWxpZ2h0Ym94PlxyXG4gICAgPGRpdiBjbGFzcz1cImJsb2NrLWF0dGFjaG1lbnRzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBibG9ja0F0dGFjaG1lbnRzOyB0cmFja0J5OiBhdHRhY2htZW50SWRcIj5cclxuICAgICAgICAgICAgPGJhbnRhLWF0dGFjaG1lbnQgXHJcbiAgICAgICAgICAgICAgICBbYXR0YWNobWVudF09XCJhdHRhY2htZW50XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nXT1cImVkaXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgKGxvYWRlZCk9XCJtYXJrQXR0YWNobWVudExvYWRlZChhdHRhY2htZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVBdHRhY2htZW50KGF0dGFjaG1lbnQpXCJcclxuICAgICAgICAgICAgICAgIChhY3RpdmF0ZWQpPVwic2hvd0xpZ2h0Ym94KGF0dGFjaG1lbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2JhbnRhLWF0dGFjaG1lbnQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IFxyXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWF0dGFjaG1lbnRzXCIgXHJcbiAgICAgICAgW2NsYXNzLnNpbmdsZV09XCJhdHRhY2htZW50cz8ubGVuZ3RoID09PSAxXCIgXHJcbiAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cz8ubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgaW5saW5lQXR0YWNobWVudHM7IHRyYWNrQnk6IGF0dGFjaG1lbnRJZFwiPlxyXG4gICAgICAgICAgICA8YmFudGEtYXR0YWNobWVudCBcclxuICAgICAgICAgICAgICAgIFthdHRhY2htZW50XT1cImF0dGFjaG1lbnRcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmddPVwiZWRpdGluZ1wiXHJcbiAgICAgICAgICAgICAgICAobG9hZGVkKT1cIm1hcmtBdHRhY2htZW50TG9hZGVkKGF0dGFjaG1lbnQpXCJcclxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZUF0dGFjaG1lbnQoYXR0YWNobWVudClcIlxyXG4gICAgICAgICAgICAgICAgKGFjdGl2YXRlZCk9XCJzaG93TGlnaHRib3goYXR0YWNobWVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvYmFudGEtYXR0YWNobWVudD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj4iXX0=
@@ -0,0 +1,59 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { TimestampComponent } from './timestamp.component';
3
+ import { CommonModule } from '@angular/common';
4
+ import { LightboxComponent } from './lightbox/lightbox.component';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { BantaMarkdownToHtmlPipe } from './markdown-to-html.pipe';
7
+ import { BantaAttachmentsComponent } from './attachments/attachments.component';
8
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import { BantaTrustResourceUrlPipe } from './trust-resource-url.pipe';
11
+ import { BantaAttachmentComponent } from './attachment/attachment.component';
12
+ import { BantaMentionLinkerPipe } from './mention-linker.pipe';
13
+ import * as i0 from "@angular/core";
14
+ const COMPONENTS = [
15
+ TimestampComponent,
16
+ LightboxComponent,
17
+ BantaMarkdownToHtmlPipe,
18
+ BantaMentionLinkerPipe,
19
+ BantaTrustResourceUrlPipe,
20
+ BantaAttachmentComponent,
21
+ BantaAttachmentsComponent
22
+ ];
23
+ export class BantaCommonModule {
24
+ }
25
+ BantaCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ BantaCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, declarations: [TimestampComponent,
27
+ LightboxComponent,
28
+ BantaMarkdownToHtmlPipe,
29
+ BantaMentionLinkerPipe,
30
+ BantaTrustResourceUrlPipe,
31
+ BantaAttachmentComponent,
32
+ BantaAttachmentsComponent], imports: [CommonModule,
33
+ MatIconModule,
34
+ MatProgressSpinnerModule,
35
+ MatButtonModule], exports: [TimestampComponent,
36
+ LightboxComponent,
37
+ BantaMarkdownToHtmlPipe,
38
+ BantaMentionLinkerPipe,
39
+ BantaTrustResourceUrlPipe,
40
+ BantaAttachmentComponent,
41
+ BantaAttachmentsComponent] });
42
+ BantaCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, imports: [CommonModule,
43
+ MatIconModule,
44
+ MatProgressSpinnerModule,
45
+ MatButtonModule] });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, decorators: [{
47
+ type: NgModule,
48
+ args: [{
49
+ declarations: COMPONENTS,
50
+ imports: [
51
+ CommonModule,
52
+ MatIconModule,
53
+ MatProgressSpinnerModule,
54
+ MatButtonModule
55
+ ],
56
+ exports: COMPONENTS
57
+ }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9jb21tb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRS9ELE1BQU0sVUFBVSxHQUFHO0lBQ2Ysa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUN6Qix3QkFBd0I7SUFDeEIseUJBQXlCO0NBQzVCLENBQUM7QUFZRixNQUFNLE9BQU8saUJBQWlCOzsrR0FBakIsaUJBQWlCO2dIQUFqQixpQkFBaUIsaUJBbkIxQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLHdCQUF3QjtRQUN4Qix5QkFBeUIsYUFNckIsWUFBWTtRQUNaLGFBQWE7UUFDYix3QkFBd0I7UUFDeEIsZUFBZSxhQWZuQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLHdCQUF3QjtRQUN4Qix5QkFBeUI7Z0hBYWhCLGlCQUFpQixZQVB0QixZQUFZO1FBQ1osYUFBYTtRQUNiLHdCQUF3QjtRQUN4QixlQUFlOzRGQUlWLGlCQUFpQjtrQkFWN0IsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsVUFBVTtvQkFDeEIsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLGVBQWU7cUJBQ2xCO29CQUNELE9BQU8sRUFBRSxVQUFVO2lCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpbWVzdGFtcENvbXBvbmVudCB9IGZyb20gJy4vdGltZXN0YW1wLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IExpZ2h0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi9saWdodGJveC9saWdodGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IEJhbnRhTWFya2Rvd25Ub0h0bWxQaXBlIH0gZnJvbSAnLi9tYXJrZG93bi10by1odG1sLnBpcGUnO1xyXG5pbXBvcnQgeyBCYW50YUF0dGFjaG1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9hdHRhY2htZW50cy9hdHRhY2htZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgQmFudGFUcnVzdFJlc291cmNlVXJsUGlwZSB9IGZyb20gJy4vdHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUnO1xyXG5pbXBvcnQgeyBCYW50YUF0dGFjaG1lbnRDb21wb25lbnQgfSBmcm9tICcuL2F0dGFjaG1lbnQvYXR0YWNobWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYW50YU1lbnRpb25MaW5rZXJQaXBlIH0gZnJvbSAnLi9tZW50aW9uLWxpbmtlci5waXBlJztcclxuXHJcbmNvbnN0IENPTVBPTkVOVFMgPSBbXHJcbiAgICBUaW1lc3RhbXBDb21wb25lbnQsXHJcbiAgICBMaWdodGJveENvbXBvbmVudCxcclxuICAgIEJhbnRhTWFya2Rvd25Ub0h0bWxQaXBlLFxyXG4gICAgQmFudGFNZW50aW9uTGlua2VyUGlwZSxcclxuICAgIEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRDb21wb25lbnQsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRzQ29tcG9uZW50XHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBDT01QT05FTlRTLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGVcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBDT01QT05FTlRTXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNvbW1vbk1vZHVsZSB7XHJcbn0iXX0=
@@ -0,0 +1,31 @@
1
+ import { Component, ViewChild } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ export class LightboxComponent {
5
+ ngAfterViewInit() {
6
+ if (typeof window !== 'undefined') {
7
+ document.body.appendChild(this.containerElement.nativeElement);
8
+ }
9
+ }
10
+ ngOnDestroy() {
11
+ this.containerElement.nativeElement.remove();
12
+ }
13
+ close() {
14
+ this.isOpen = false;
15
+ }
16
+ open(currentImage, images) {
17
+ this.currentImage = currentImage;
18
+ this.images = images;
19
+ this.isOpen = true;
20
+ }
21
+ }
22
+ LightboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LightboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
+ LightboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LightboxComponent, selector: "banta-lightbox", viewQueries: [{ propertyName: "containerElement", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div \r\n class=\"banta-lightbox-container\" \r\n #container\r\n [class.open]=\"isOpen\"\r\n >\r\n\r\n <a class=\"underlay\" (click)=\"close()\" href=\"javascript:;\"></a>\r\n\r\n <a class=\"close-button\" href=\"javascript:;\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n\r\n <img [src]=\"currentImage\" />\r\n</div>\r\n", styles: ["::ng-deep .banta-lightbox-container{position:fixed;inset:0;opacity:0;pointer-events:none;background-color:#000000bf;color:#fff;z-index:10000;transition:.25s opacity ease-in-out;display:flex;align-items:center;justify-content:center}::ng-deep .banta-lightbox-container a.underlay{z-index:0;position:absolute;inset:0;opacity:0}::ng-deep .banta-lightbox-container img{z-index:10;max-width:95%}::ng-deep .banta-lightbox-container.open{opacity:1;pointer-events:initial}::ng-deep .banta-lightbox-container a.close-button{position:absolute;top:0;right:0;padding:.75em;z-index:20}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LightboxComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'banta-lightbox', template: "<div \r\n class=\"banta-lightbox-container\" \r\n #container\r\n [class.open]=\"isOpen\"\r\n >\r\n\r\n <a class=\"underlay\" (click)=\"close()\" href=\"javascript:;\"></a>\r\n\r\n <a class=\"close-button\" href=\"javascript:;\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n\r\n <img [src]=\"currentImage\" />\r\n</div>\r\n", styles: ["::ng-deep .banta-lightbox-container{position:fixed;inset:0;opacity:0;pointer-events:none;background-color:#000000bf;color:#fff;z-index:10000;transition:.25s opacity ease-in-out;display:flex;align-items:center;justify-content:center}::ng-deep .banta-lightbox-container a.underlay{z-index:0;position:absolute;inset:0;opacity:0}::ng-deep .banta-lightbox-container img{z-index:10;max-width:95%}::ng-deep .banta-lightbox-container.open{opacity:1;pointer-events:initial}::ng-deep .banta-lightbox-container a.close-button{position:absolute;top:0;right:0;padding:.75em;z-index:20}\n"] }]
27
+ }], propDecorators: { containerElement: [{
28
+ type: ViewChild,
29
+ args: ['container']
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL2xpZ2h0Ym94L2xpZ2h0Ym94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9saWdodGJveC9saWdodGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUFJMUIsZUFBZTtRQUNYLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNsRTtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBT0QsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLENBQUMsWUFBb0IsRUFBRSxNQUFnQjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDOzsrR0EzQlEsaUJBQWlCO21HQUFqQixpQkFBaUIscUtDUDlCLHNYQWNBOzRGRFBhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDSSxnQkFBZ0I7OEJBTTFCLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtbGlnaHRib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpZ2h0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2xpZ2h0Ym94LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpZ2h0Ym94Q29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIFxyXG4gICAgY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW1hZ2VzOiBzdHJpbmdbXTtcclxuICAgIGN1cnJlbnRJbWFnZTogc3RyaW5nO1xyXG5cclxuICAgIGlzT3BlbjogYm9vbGVhbjtcclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW4oY3VycmVudEltYWdlOiBzdHJpbmcsIGltYWdlczogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IGN1cnJlbnRJbWFnZTtcclxuICAgICAgICB0aGlzLmltYWdlcyA9IGltYWdlcztcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcbn0iLCI8ZGl2IFxyXG4gICAgY2xhc3M9XCJiYW50YS1saWdodGJveC1jb250YWluZXJcIiBcclxuICAgICNjb250YWluZXJcclxuICAgIFtjbGFzcy5vcGVuXT1cImlzT3BlblwiXHJcbiAgICA+XHJcblxyXG4gICAgPGEgY2xhc3M9XCJ1bmRlcmxheVwiIChjbGljayk9XCJjbG9zZSgpXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiPjwvYT5cclxuXHJcbiAgICA8YSBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2E+XHJcblxyXG4gICAgPGltZyBbc3JjXT1cImN1cnJlbnRJbWFnZVwiIC8+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,76 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as marked from 'marked';
3
+ import createDOMPurify from 'dompurify';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/platform-browser";
6
+ const underline = {
7
+ name: 'underline',
8
+ level: 'inline',
9
+ start(src) { return src.match(/\+\+/)?.index; },
10
+ tokenizer(src, tokens) {
11
+ const rule = /^\+\+(.*?)\+\+/; // Regex for the complete token
12
+ const match = rule.exec(src);
13
+ if (match) {
14
+ return {
15
+ type: 'underline',
16
+ raw: match[0],
17
+ text: this.lexer.inlineTokens(match[1].trim()), // Additional custom properties
18
+ };
19
+ }
20
+ },
21
+ renderer(token) {
22
+ return `<u>${this.parser.parseInline(token.text)}</u>`;
23
+ }
24
+ };
25
+ marked.marked.use({
26
+ extensions: [underline]
27
+ });
28
+ export class BantaMarkdownToHtmlPipe {
29
+ constructor(sanitizer) {
30
+ this.sanitizer = sanitizer;
31
+ this.renderer = new marked.Renderer({
32
+ headerPrefix: ''
33
+ });
34
+ const linkRenderer = this.renderer.link;
35
+ this.renderer.link = (href, title, text) => {
36
+ const html = linkRenderer.call(this.renderer, href, title, text);
37
+ return html.replace(/^<a /, '<a target="_blank" rel="noopener" ');
38
+ };
39
+ }
40
+ transform(value) {
41
+ if (!value)
42
+ return '';
43
+ let purifier = createDOMPurify(window);
44
+ // https://github.com/cure53/DOMPurify/blob/e1c19cf6407d782b666cb1d02a6af191f9cbc09e/demos/hooks-target-blank-demo.html
45
+ // Add a hook to make all links open a new window
46
+ purifier.addHook('afterSanitizeAttributes', function (node) {
47
+ // set all elements owning target to target=_blank
48
+ if ('target' in node) {
49
+ node.setAttribute('target', '_blank');
50
+ // prevent https://www.owasp.org/index.php/Reverse_Tabnabbing
51
+ node.setAttribute('rel', 'noopener noreferrer');
52
+ }
53
+ // set non-HTML/MathML links to xlink:show=new
54
+ if (!node.hasAttribute('target')
55
+ && (node.hasAttribute('xlink:href')
56
+ || node.hasAttribute('href'))) {
57
+ node.setAttribute('xlink:show', 'new');
58
+ }
59
+ });
60
+ return this.sanitizer.bypassSecurityTrustHtml(purifier.sanitize(marked.marked.parse(value, {
61
+ renderer: this.renderer
62
+ }), {
63
+ FORBID_TAGS: ['h1', 'h2', 'h3', 'h4'],
64
+ KEEP_CONTENT: true
65
+ }));
66
+ }
67
+ }
68
+ BantaMarkdownToHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
69
+ BantaMarkdownToHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, name: "markdownToHtml" });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMarkdownToHtmlPipe, decorators: [{
71
+ type: Pipe,
72
+ args: [{
73
+ name: 'markdownToHtml'
74
+ }]
75
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tdG8taHRtbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL21hcmtkb3duLXRvLWh0bWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLGVBQWUsTUFBTSxXQUFXLENBQUM7OztBQUd4QyxNQUFNLFNBQVMsR0FBRztJQUNkLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRO0lBQ2YsS0FBSyxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDakIsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQywrQkFBK0I7UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSwrQkFBK0I7YUFDbEYsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFLO1FBQ1YsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7Q0FDSixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZCxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUM7Q0FDMUIsQ0FBQyxDQUFDO0FBS0gsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyxZQUNZLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEMsWUFBWSxFQUFFLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUVkLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2Qyx1SEFBdUg7UUFDdkgsaURBQWlEO1FBQ2pELFFBQVEsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsVUFBUyxJQUF1QztZQUN4RixrREFBa0Q7WUFDbEQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztnQkFDckMsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsOENBQThDO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzttQkFDekIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQzt1QkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMxQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUN6QyxRQUFRLENBQUMsUUFBUSxDQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxFQUNGO1lBQ0ksV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3JDLFlBQVksRUFBRSxJQUFJO1NBQ3JCLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzs7cUhBakRRLHVCQUF1QjttSEFBdkIsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBSG5DLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGdCQUFnQjtpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIG1hcmtlZCBmcm9tICdtYXJrZWQnO1xyXG5pbXBvcnQgY3JlYXRlRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuY29uc3QgdW5kZXJsaW5lID0ge1xyXG4gICAgbmFtZTogJ3VuZGVybGluZScsXHJcbiAgICBsZXZlbDogJ2lubGluZScsIC8vIElzIHRoaXMgYSBibG9jay1sZXZlbCBvciBpbmxpbmUtbGV2ZWwgdG9rZW5pemVyP1xyXG4gICAgc3RhcnQoc3JjKSB7IHJldHVybiBzcmMubWF0Y2goL1xcK1xcKy8pPy5pbmRleDsgfSwgLy8gSGludCB0byBNYXJrZWQuanMgdG8gc3RvcCBhbmQgY2hlY2sgZm9yIGEgbWF0Y2hcclxuICAgIHRva2VuaXplcihzcmMsIHRva2Vucykge1xyXG4gICAgICAgIGNvbnN0IHJ1bGUgPSAvXlxcK1xcKyguKj8pXFwrXFwrLzsgLy8gUmVnZXggZm9yIHRoZSBjb21wbGV0ZSB0b2tlblxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gcnVsZS5leGVjKHNyYyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC8vIFRva2VuIHRvIGdlbmVyYXRlXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAndW5kZXJsaW5lJywgLy8gU2hvdWxkIG1hdGNoIFwibmFtZVwiIGFib3ZlXHJcbiAgICAgICAgICAgICAgICByYXc6IG1hdGNoWzBdLCAvLyBUZXh0IHRvIGNvbnN1bWUgZnJvbSB0aGUgc291cmNlXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmxleGVyLmlubGluZVRva2VucyhtYXRjaFsxXS50cmltKCkpLCAvLyBBZGRpdGlvbmFsIGN1c3RvbSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHJlbmRlcmVyKHRva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIGA8dT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHRva2VuLnRleHQpfTwvdT5gO1xyXG4gICAgfVxyXG59O1xyXG5cclxubWFya2VkLm1hcmtlZC51c2Uoe1xyXG4gICAgZXh0ZW5zaW9uczogW3VuZGVybGluZV1cclxufSk7XHJcblxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAnbWFya2Rvd25Ub0h0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YU1hcmtkb3duVG9IdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoe1xyXG4gICAgICAgICAgICBoZWFkZXJQcmVmaXg6ICcnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbGlua1JlbmRlcmVyID0gdGhpcy5yZW5kZXJlci5saW5rO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBodG1sID0gbGlua1JlbmRlcmVyLmNhbGwodGhpcy5yZW5kZXJlciwgaHJlZiwgdGl0bGUsIHRleHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC9ePGEgLywgJzxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyXCIgJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJlcjogbWFya2VkLlJlbmRlcmVyO1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBwdXJpZmllciA9IGNyZWF0ZURPTVB1cmlmeSh3aW5kb3cpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvZTFjMTljZjY0MDdkNzgyYjY2NmNiMWQwMmE2YWYxOTFmOWNiYzA5ZS9kZW1vcy9ob29rcy10YXJnZXQtYmxhbmstZGVtby5odG1sXHJcbiAgICAgICAgLy8gQWRkIGEgaG9vayB0byBtYWtlIGFsbCBsaW5rcyBvcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICAgIHB1cmlmaWVyLmFkZEhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgZnVuY3Rpb24obm9kZTogSFRNTEVsZW1lbnQgJiB7IHRhcmdldD86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIC8vIHNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXHJcbiAgICAgICAgICAgIGlmICgndGFyZ2V0JyBpbiBub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvUmV2ZXJzZV9UYWJuYWJiaW5nXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgbm9uLUhUTUwvTWF0aE1MIGxpbmtzIHRvIHhsaW5rOnNob3c9bmV3XHJcbiAgICAgICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhcmdldCcpXHJcbiAgICAgICAgICAgICAgICAmJiAobm9kZS5oYXNBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuaGFzQXR0cmlidXRlKCdocmVmJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgneGxpbms6c2hvdycsICduZXcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgICAgICAgIHB1cmlmaWVyLnNhbml0aXplKFxyXG4gICAgICAgICAgICAgICAgbWFya2VkLm1hcmtlZC5wYXJzZSh2YWx1ZSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyOiB0aGlzLnJlbmRlcmVyXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBGT1JCSURfVEFHUzogWydoMScsICdoMicsICdoMycsICdoNCddLFxyXG4gICAgICAgICAgICAgICAgICAgIEtFRVBfQ09OVEVOVDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,35 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BantaMentionLinkerPipe {
4
+ transform(value, links) {
5
+ if (!value)
6
+ return '';
7
+ if (!links)
8
+ return value;
9
+ let text = value;
10
+ for (let i = 0, max = links.length; i < max; ++i) {
11
+ let mention = links[i];
12
+ text = text.replace(new RegExp(`${this.escapeRegExp(mention.text)}`, `gi`), `@{${i + 1}}`);
13
+ }
14
+ text = text.replace(/@\{(\d+)\}/g, (text, i) => links[i - 1] ? this.formatLink(links[i - 1]) : text);
15
+ return text;
16
+ }
17
+ formatLink(link) {
18
+ return `<a${link.external ? ` target="_blank" rel="noopener"` : ``} href="${link.link}">${link.text}</a>`;
19
+ }
20
+ /**
21
+ * https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
22
+ */
23
+ escapeRegExp(string) {
24
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
25
+ }
26
+ }
27
+ BantaMentionLinkerPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
28
+ BantaMentionLinkerPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, name: "mentionLinker" });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaMentionLinkerPipe, decorators: [{
30
+ type: Pipe,
31
+ args: [{
32
+ name: 'mentionLinker'
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi1saW5rZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9tZW50aW9uLWxpbmtlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBNEI7UUFDakQsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFFakIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJHLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBd0I7UUFDL0IsT0FBTyxLQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxFQUFHLFVBQVUsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDaEgsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQU07UUFDZixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7SUFDOUYsQ0FBQzs7b0hBN0JRLHNCQUFzQjtrSEFBdEIsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGVBQWU7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VNZW50aW9uIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcblxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAnbWVudGlvbkxpbmtlcidcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhTWVudGlvbkxpbmtlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBsaW5rcz86IENoYXRNZXNzYWdlTWVudGlvbltdKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiAoIWxpbmtzKVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIGxldCB0ZXh0ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtYXggPSBsaW5rcy5sZW5ndGg7IGkgPCBtYXg7ICsraSkge1xyXG4gICAgICAgICAgICBsZXQgbWVudGlvbiA9IGxpbmtzW2ldO1xyXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7dGhpcy5lc2NhcGVSZWdFeHAobWVudGlvbi50ZXh0KX1gLCBgZ2lgKSwgYEB7JHtpICsgMX19YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9AXFx7KFxcZCspXFx9L2csICh0ZXh0LCBpKSA9PiBsaW5rc1tpIC0gMV0gPyB0aGlzLmZvcm1hdExpbmsobGlua3NbaSAtIDFdKSA6IHRleHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXRMaW5rKGxpbms6IENoYXRNZXNzYWdlTWVudGlvbikge1xyXG4gICAgICAgIHJldHVybiBgPGEkeyBsaW5rLmV4dGVybmFsID8gYCB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiYCA6IGBgIH0gaHJlZj1cIiR7bGluay5saW5rfVwiPiR7bGluay50ZXh0fTwvYT5gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleFxyXG4gICAgICovXHJcbiAgICBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpOyAvLyAkJiBtZWFucyB0aGUgd2hvbGUgbWF0Y2hlZCBzdHJpbmdcclxuICAgIH1cclxufSJdfQ==