@banta/sdk 4.9.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/{esm2020 → esm2022}/banta-sdk.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/attachment-scraper.mjs +1 -1
  3. package/esm2022/lib/banta/banta.component.mjs +204 -0
  4. package/{esm2020 → esm2022}/lib/banta-logo.component.mjs +11 -11
  5. package/esm2022/lib/banta-sdk.module.mjs +143 -0
  6. package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +187 -0
  7. package/esm2022/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2022/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/{esm2020 → esm2022}/lib/chat/chat.module.mjs +51 -51
  10. package/{esm2020 → esm2022}/lib/chat/index.mjs +5 -5
  11. package/esm2022/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2020 → esm2022}/lib/chat-backend-base.mjs +30 -30
  13. package/esm2022/lib/chat-backend.mjs +163 -0
  14. package/{esm2020 → esm2022}/lib/chat-source-base.mjs +1 -1
  15. package/esm2022/lib/chat-source.mjs +233 -0
  16. package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
  17. package/esm2022/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +739 -0
  19. package/esm2022/lib/comments/comment/comment.component.mjs +175 -0
  20. package/esm2022/lib/comments/comment-field/comment-field.component.mjs +401 -0
  21. package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2022/lib/comments/comment-view/comment-view.component.mjs +470 -0
  23. package/esm2022/lib/comments/comments.module.mjs +111 -0
  24. package/{esm2020 → esm2022}/lib/comments/index.mjs +10 -10
  25. package/esm2022/lib/comments/live-comment.component.mjs +80 -0
  26. package/{esm2020 → esm2022}/lib/comments/reply-send-options.directive.mjs +13 -13
  27. package/esm2022/lib/common/attachment/attachment.component.mjs +112 -0
  28. package/{esm2020 → esm2022}/lib/common/attachments/attachments.component.mjs +75 -75
  29. package/{esm2020 → esm2022}/lib/common/common.module.mjs +68 -68
  30. package/{esm2020 → esm2022}/lib/common/index.mjs +10 -10
  31. package/{esm2020 → esm2022}/lib/common/lazy-connection.mjs +14 -14
  32. package/esm2022/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2022/lib/common/markdown-to-html.pipe.mjs +89 -0
  34. package/esm2022/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2022/lib/common/timer-pool.service.mjs +83 -0
  36. package/esm2022/lib/common/timestamp.component.mjs +123 -0
  37. package/{esm2020 → esm2022}/lib/common/trust-resource-url.pipe.mjs +22 -22
  38. package/esm2022/lib/emoji/emoji-selector-button.component.mjs +115 -0
  39. package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
  40. package/{esm2020 → esm2022}/lib/emoji/emoji.module.mjs +55 -55
  41. package/{esm2020 → esm2022}/lib/emoji/emojis.mjs +6507 -6507
  42. package/{esm2020 → esm2022}/lib/emoji/index.mjs +4 -4
  43. package/esm2022/lib/giphy-attachments.mjs +16 -0
  44. package/{esm2020 → esm2022}/lib/index.mjs +19 -19
  45. package/{esm2020 → esm2022}/lib/live-message.component.mjs +61 -61
  46. package/{esm2020 → esm2022}/lib/message-menu-item.mjs +1 -1
  47. package/{esm2020 → esm2022}/lib/sdk-options.mjs +1 -1
  48. package/esm2022/lib/static-chat-source.mjs +71 -0
  49. package/esm2022/lib/tweet-attachments.mjs +13 -0
  50. package/esm2022/lib/url-attachments.mjs +42 -0
  51. package/esm2022/lib/youtube-attachments.mjs +29 -0
  52. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  53. package/{fesm2020 → fesm2022}/banta-sdk.mjs +10753 -10754
  54. package/fesm2022/banta-sdk.mjs.map +1 -0
  55. package/index.d.ts +5 -5
  56. package/lib/attachment-scraper.d.ts +15 -15
  57. package/lib/banta/banta.component.d.ts +58 -58
  58. package/lib/banta-logo.component.d.ts +5 -5
  59. package/lib/banta-sdk.module.d.ts +31 -31
  60. package/lib/chat/banta-chat/banta-chat.component.d.ts +70 -70
  61. package/lib/chat/chat-message/chat-message.component.d.ts +21 -21
  62. package/lib/chat/chat-view/chat-view.component.d.ts +52 -52
  63. package/lib/chat/chat.module.d.ts +15 -15
  64. package/lib/chat/index.d.ts +5 -5
  65. package/lib/chat/live-chat-message.component.d.ts +23 -23
  66. package/lib/chat-backend-base.d.ts +36 -36
  67. package/lib/chat-backend.d.ts +55 -55
  68. package/lib/chat-source-base.d.ts +44 -44
  69. package/lib/chat-source.d.ts +65 -65
  70. package/lib/comments/attachment-button/attachment-button.component.d.ts +17 -17
  71. package/lib/comments/attachment-scraper.directive.d.ts +21 -21
  72. package/lib/comments/banta-comments/banta-comments.component.d.ts +196 -196
  73. package/lib/comments/comment/comment.component.d.ts +72 -72
  74. package/lib/comments/comment-field/comment-field.component.d.ts +89 -89
  75. package/lib/comments/comment-sort/comment-sort.component.d.ts +12 -12
  76. package/lib/comments/comment-view/comment-view.component.d.ts +121 -121
  77. package/lib/comments/comments.module.d.ts +30 -30
  78. package/lib/comments/index.d.ts +10 -10
  79. package/lib/comments/live-comment.component.d.ts +23 -23
  80. package/lib/comments/reply-send-options.directive.d.ts +5 -5
  81. package/lib/common/attachment/attachment.component.d.ts +33 -33
  82. package/lib/common/attachments/attachments.component.d.ts +26 -26
  83. package/lib/common/common.module.d.ts +19 -19
  84. package/lib/common/index.d.ts +10 -10
  85. package/lib/common/lazy-connection.d.ts +6 -6
  86. package/lib/common/lightbox/lightbox.component.d.ts +14 -14
  87. package/lib/common/markdown-to-html.pipe.d.ts +15 -15
  88. package/lib/common/mention-linker.pipe.d.ts +13 -13
  89. package/lib/common/timer-pool.service.d.ts +15 -15
  90. package/lib/common/timestamp.component.d.ts +19 -19
  91. package/lib/common/trust-resource-url.pipe.d.ts +10 -10
  92. package/lib/emoji/emoji-selector-button.component.d.ts +30 -30
  93. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +26 -26
  94. package/lib/emoji/emoji.module.d.ts +16 -16
  95. package/lib/emoji/emojis.d.ts +6507 -6507
  96. package/lib/emoji/index.d.ts +4 -4
  97. package/lib/giphy-attachments.d.ts +5 -5
  98. package/lib/index.d.ts +19 -19
  99. package/lib/live-message.component.d.ts +22 -22
  100. package/lib/message-menu-item.d.ts +6 -6
  101. package/lib/sdk-options.d.ts +5 -5
  102. package/lib/static-chat-source.d.ts +42 -42
  103. package/lib/tweet-attachments.d.ts +5 -5
  104. package/lib/url-attachments.d.ts +14 -14
  105. package/lib/youtube-attachments.d.ts +5 -5
  106. package/package.json +14 -20
  107. package/public-api.d.ts +1 -1
  108. package/esm2020/lib/banta/banta.component.mjs +0 -204
  109. package/esm2020/lib/banta-sdk.module.mjs +0 -143
  110. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +0 -187
  111. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +0 -62
  112. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +0 -170
  113. package/esm2020/lib/chat/live-chat-message.component.mjs +0 -80
  114. package/esm2020/lib/chat-backend.mjs +0 -163
  115. package/esm2020/lib/chat-source.mjs +0 -233
  116. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
  117. package/esm2020/lib/comments/attachment-scraper.directive.mjs +0 -107
  118. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +0 -740
  119. package/esm2020/lib/comments/comment/comment.component.mjs +0 -175
  120. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +0 -401
  121. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
  122. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +0 -470
  123. package/esm2020/lib/comments/comments.module.mjs +0 -111
  124. package/esm2020/lib/comments/live-comment.component.mjs +0 -80
  125. package/esm2020/lib/common/attachment/attachment.component.mjs +0 -112
  126. package/esm2020/lib/common/lightbox/lightbox.component.mjs +0 -31
  127. package/esm2020/lib/common/markdown-to-html.pipe.mjs +0 -89
  128. package/esm2020/lib/common/mention-linker.pipe.mjs +0 -35
  129. package/esm2020/lib/common/timer-pool.service.mjs +0 -83
  130. package/esm2020/lib/common/timestamp.component.mjs +0 -123
  131. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +0 -116
  132. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
  133. package/esm2020/lib/giphy-attachments.mjs +0 -16
  134. package/esm2020/lib/static-chat-source.mjs +0 -71
  135. package/esm2020/lib/tweet-attachments.mjs +0 -13
  136. package/esm2020/lib/url-attachments.mjs +0 -42
  137. package/esm2020/lib/youtube-attachments.mjs +0 -29
  138. package/fesm2015/banta-sdk.mjs +0 -11181
  139. package/fesm2015/banta-sdk.mjs.map +0 -1
  140. package/fesm2020/banta-sdk.mjs.map +0 -1
@@ -1,68 +1,68 @@
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 { TimerPool } from './timer-pool.service';
14
- import * as i0 from "@angular/core";
15
- const COMPONENTS = [
16
- TimestampComponent,
17
- LightboxComponent,
18
- BantaMarkdownToHtmlPipe,
19
- BantaMentionLinkerPipe,
20
- BantaTrustResourceUrlPipe,
21
- BantaAttachmentComponent,
22
- BantaAttachmentsComponent
23
- ];
24
- export class BantaCommonModule {
25
- static forRoot() {
26
- return {
27
- ngModule: BantaCommonModule,
28
- providers: [
29
- TimerPool
30
- ]
31
- };
32
- }
33
- }
34
- BantaCommonModulefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
35
- BantaCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, declarations: [TimestampComponent,
36
- LightboxComponent,
37
- BantaMarkdownToHtmlPipe,
38
- BantaMentionLinkerPipe,
39
- BantaTrustResourceUrlPipe,
40
- BantaAttachmentComponent,
41
- BantaAttachmentsComponent], imports: [CommonModule,
42
- MatIconModule,
43
- MatProgressSpinnerModule,
44
- MatButtonModule], exports: [TimestampComponent,
45
- LightboxComponent,
46
- BantaMarkdownToHtmlPipe,
47
- BantaMentionLinkerPipe,
48
- BantaTrustResourceUrlPipe,
49
- BantaAttachmentComponent,
50
- BantaAttachmentsComponent] });
51
- BantaCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, imports: [CommonModule,
52
- MatIconModule,
53
- MatProgressSpinnerModule,
54
- MatButtonModule] });
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaCommonModule, decorators: [{
56
- type: NgModule,
57
- args: [{
58
- declarations: COMPONENTS,
59
- imports: [
60
- CommonModule,
61
- MatIconModule,
62
- MatProgressSpinnerModule,
63
- MatButtonModule
64
- ],
65
- exports: COMPONENTS
66
- }]
67
- }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9jb21tb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFakQsTUFBTSxVQUFVLEdBQUc7SUFDZixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHdCQUF3QjtJQUN4Qix5QkFBeUI7Q0FDNUIsQ0FBQztBQVlGLE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUU7Z0JBQ1AsU0FBUzthQUNaO1NBQ0osQ0FBQTtJQUNMLENBQUM7OytHQVJRLGlCQUFpQjtnSEFBakIsaUJBQWlCLGlCQW5CMUIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQix1QkFBdUI7UUFDdkIsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6Qix3QkFBd0I7UUFDeEIseUJBQXlCLGFBTXJCLFlBQVk7UUFDWixhQUFhO1FBQ2Isd0JBQXdCO1FBQ3hCLGVBQWUsYUFmbkIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQix1QkFBdUI7UUFDdkIsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6Qix3QkFBd0I7UUFDeEIseUJBQXlCO2dIQWFoQixpQkFBaUIsWUFQdEIsWUFBWTtRQUNaLGFBQWE7UUFDYix3QkFBd0I7UUFDeEIsZUFBZTs0RkFJVixpQkFBaUI7a0JBVjdCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsVUFBVTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaW1lc3RhbXBDb21wb25lbnQgfSBmcm9tICcuL3RpbWVzdGFtcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBMaWdodGJveENvbXBvbmVudCB9IGZyb20gJy4vbGlnaHRib3gvbGlnaHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBCYW50YU1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcclxuaW1wb3J0IHsgQmFudGFBdHRhY2htZW50c0NvbXBvbmVudCB9IGZyb20gJy4vYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUgfSBmcm9tICcuL3RydXN0LXJlc291cmNlLXVybC5waXBlJztcclxuaW1wb3J0IHsgQmFudGFBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFudGFNZW50aW9uTGlua2VyUGlwZSB9IGZyb20gJy4vbWVudGlvbi1saW5rZXIucGlwZSc7XHJcbmltcG9ydCB7IFRpbWVyUG9vbCB9IGZyb20gJy4vdGltZXItcG9vbC5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IENPTVBPTkVOVFMgPSBbXHJcbiAgICBUaW1lc3RhbXBDb21wb25lbnQsXHJcbiAgICBMaWdodGJveENvbXBvbmVudCxcclxuICAgIEJhbnRhTWFya2Rvd25Ub0h0bWxQaXBlLFxyXG4gICAgQmFudGFNZW50aW9uTGlua2VyUGlwZSxcclxuICAgIEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRDb21wb25lbnQsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRzQ29tcG9uZW50XHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBDT01QT05FTlRTLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGVcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBDT01QT05FTlRTXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNvbW1vbk1vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhQ29tbW9uTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIFRpbWVyUG9vbFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
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 { TimerPool } from './timer-pool.service';
14
+ import * as i0 from "@angular/core";
15
+ const COMPONENTS = [
16
+ TimestampComponent,
17
+ LightboxComponent,
18
+ BantaMarkdownToHtmlPipe,
19
+ BantaMentionLinkerPipe,
20
+ BantaTrustResourceUrlPipe,
21
+ BantaAttachmentComponent,
22
+ BantaAttachmentsComponent
23
+ ];
24
+ export class BantaCommonModule {
25
+ static forRoot() {
26
+ return {
27
+ ngModule: BantaCommonModule,
28
+ providers: [
29
+ TimerPool
30
+ ]
31
+ };
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
34
+ static { thismod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: BantaCommonModule, declarations: [TimestampComponent,
35
+ LightboxComponent,
36
+ BantaMarkdownToHtmlPipe,
37
+ BantaMentionLinkerPipe,
38
+ BantaTrustResourceUrlPipe,
39
+ BantaAttachmentComponent,
40
+ BantaAttachmentsComponent], imports: [CommonModule,
41
+ MatIconModule,
42
+ MatProgressSpinnerModule,
43
+ MatButtonModule], exports: [TimestampComponent,
44
+ LightboxComponent,
45
+ BantaMarkdownToHtmlPipe,
46
+ BantaMentionLinkerPipe,
47
+ BantaTrustResourceUrlPipe,
48
+ BantaAttachmentComponent,
49
+ BantaAttachmentsComponent] }); }
50
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaCommonModule, imports: [CommonModule,
51
+ MatIconModule,
52
+ MatProgressSpinnerModule,
53
+ MatButtonModule] }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaCommonModule, decorators: [{
56
+ type: NgModule,
57
+ args: [{
58
+ declarations: COMPONENTS,
59
+ imports: [
60
+ CommonModule,
61
+ MatIconModule,
62
+ MatProgressSpinnerModule,
63
+ MatButtonModule
64
+ ],
65
+ exports: COMPONENTS
66
+ }]
67
+ }] });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9jb21tb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFakQsTUFBTSxVQUFVLEdBQUc7SUFDZixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHdCQUF3QjtJQUN4Qix5QkFBeUI7Q0FDNUIsQ0FBQztBQVlGLE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUU7Z0JBQ1AsU0FBUzthQUNaO1NBQ0osQ0FBQTtJQUNMLENBQUM7OEdBUlEsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBbkIxQixrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLHdCQUF3QjtZQUN4Qix5QkFBeUIsYUFNckIsWUFBWTtZQUNaLGFBQWE7WUFDYix3QkFBd0I7WUFDeEIsZUFBZSxhQWZuQixrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLHdCQUF3QjtZQUN4Qix5QkFBeUI7K0dBYWhCLGlCQUFpQixZQVB0QixZQUFZO1lBQ1osYUFBYTtZQUNiLHdCQUF3QjtZQUN4QixlQUFlOzsyRkFJVixpQkFBaUI7a0JBVjdCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsVUFBVTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaW1lc3RhbXBDb21wb25lbnQgfSBmcm9tICcuL3RpbWVzdGFtcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBMaWdodGJveENvbXBvbmVudCB9IGZyb20gJy4vbGlnaHRib3gvbGlnaHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBCYW50YU1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcclxuaW1wb3J0IHsgQmFudGFBdHRhY2htZW50c0NvbXBvbmVudCB9IGZyb20gJy4vYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUgfSBmcm9tICcuL3RydXN0LXJlc291cmNlLXVybC5waXBlJztcclxuaW1wb3J0IHsgQmFudGFBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFudGFNZW50aW9uTGlua2VyUGlwZSB9IGZyb20gJy4vbWVudGlvbi1saW5rZXIucGlwZSc7XHJcbmltcG9ydCB7IFRpbWVyUG9vbCB9IGZyb20gJy4vdGltZXItcG9vbC5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IENPTVBPTkVOVFMgPSBbXHJcbiAgICBUaW1lc3RhbXBDb21wb25lbnQsXHJcbiAgICBMaWdodGJveENvbXBvbmVudCxcclxuICAgIEJhbnRhTWFya2Rvd25Ub0h0bWxQaXBlLFxyXG4gICAgQmFudGFNZW50aW9uTGlua2VyUGlwZSxcclxuICAgIEJhbnRhVHJ1c3RSZXNvdXJjZVVybFBpcGUsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRDb21wb25lbnQsXHJcbiAgICBCYW50YUF0dGFjaG1lbnRzQ29tcG9uZW50XHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBDT01QT05FTlRTLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGVcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBDT01QT05FTlRTXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNvbW1vbk1vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhQ29tbW9uTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIFRpbWVyUG9vbFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
@@ -1,11 +1,11 @@
1
- export * from './lazy-connection';
2
- export * from './timestamp.component';
3
- export * from './lightbox/lightbox.component';
4
- export * from './markdown-to-html.pipe';
5
- export * from './trust-resource-url.pipe';
6
- export * from './mention-linker.pipe';
7
- export * from './attachment/attachment.component';
8
- export * from './attachments/attachments.component';
9
- export * from './timer-pool.service';
10
- export * from './common.module';
1
+ export * from './lazy-connection';
2
+ export * from './timestamp.component';
3
+ export * from './lightbox/lightbox.component';
4
+ export * from './markdown-to-html.pipe';
5
+ export * from './trust-resource-url.pipe';
6
+ export * from './mention-linker.pipe';
7
+ export * from './attachment/attachment.component';
8
+ export * from './attachments/attachments.component';
9
+ export * from './timer-pool.service';
10
+ export * from './common.module';
11
11
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsc0JBQXNCLENBQUM7QUFFckMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGF6eS1jb25uZWN0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi90aW1lc3RhbXAuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWdodGJveC9saWdodGJveC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL21hcmtkb3duLXRvLWh0bWwucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHJ1c3QtcmVzb3VyY2UtdXJsLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL21lbnRpb24tbGlua2VyLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F0dGFjaG1lbnQvYXR0YWNobWVudC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F0dGFjaG1lbnRzL2F0dGFjaG1lbnRzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGltZXItcG9vbC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLm1vZHVsZSc7Il19
@@ -1,15 +1,15 @@
1
- import { Subject, Observable } from 'rxjs';
2
- import { publish } from 'rxjs/operators';
3
- export function lazyConnection(options) {
4
- let obs = new Observable(observer => {
5
- let subject = new Subject();
6
- let subscription = subject.subscribe(observer);
7
- options.start(subject);
8
- return () => {
9
- subscription.unsubscribe();
10
- options.stop();
11
- };
12
- });
13
- return obs.pipe(publish()).refCount();
14
- }
1
+ import { Subject, Observable } from 'rxjs';
2
+ import { publish } from 'rxjs/operators';
3
+ export function lazyConnection(options) {
4
+ let obs = new Observable(observer => {
5
+ let subject = new Subject();
6
+ let subscription = subject.subscribe(observer);
7
+ options.start(subject);
8
+ return () => {
9
+ subscription.unsubscribe();
10
+ options.stop();
11
+ };
12
+ });
13
+ return obs.pipe(publish()).refCount();
14
+ }
15
15
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL2xhenktY29ubmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBeUIsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3pDLE1BQU0sVUFBVSxjQUFjLENBQUksT0FBa0M7SUFFaEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDaEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUssQ0FBQztRQUMvQixJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkIsT0FBTyxHQUFHLEVBQUU7WUFDUixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBa0MsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBDb25uZWN0YWJsZU9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgcHVibGlzaCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGF6eUNvbm5lY3Rpb25PcHRpb25zPFQ+IHtcclxuICAgIHN0YXJ0IDogKHN1YmplY3QgOiBTdWJqZWN0PFQ+KSA9PiB2b2lkO1xyXG4gICAgc3RvcCA6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsYXp5Q29ubmVjdGlvbjxUPihvcHRpb25zIDogTGF6eUNvbm5lY3Rpb25PcHRpb25zPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XHJcblxyXG4gICAgbGV0IG9icyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICBsZXQgc3ViamVjdCA9IG5ldyBTdWJqZWN0PFQ+KCk7XHJcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHN1YmplY3Quc3Vic2NyaWJlKG9ic2VydmVyKTtcclxuXHJcbiAgICAgICAgb3B0aW9ucy5zdGFydChzdWJqZWN0KTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgb3B0aW9ucy5zdG9wKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICByZXR1cm4gKDxDb25uZWN0YWJsZU9ic2VydmFibGU8VD4+b2JzLnBpcGUocHVibGlzaCgpKSkucmVmQ291bnQoKTtcclxufSJdfQ==
@@ -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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: LightboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", 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"] }] }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL2xpZ2h0Ym94L2xpZ2h0Ym94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9saWdodGJveC9saWdodGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUFJMUIsZUFBZTtRQUNYLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQU9ELEtBQUs7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQW9CLEVBQUUsTUFBZ0I7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQzs4R0EzQlEsaUJBQWlCO2tHQUFqQixpQkFBaUIscUtDUDlCLHNYQWNBOzsyRkRQYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0ksZ0JBQWdCOzhCQU0xQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWxpZ2h0Ym94JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9saWdodGJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9saWdodGJveC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaWdodGJveENvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInKSBcclxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGltYWdlczogc3RyaW5nW107XHJcbiAgICBjdXJyZW50SW1hZ2U6IHN0cmluZztcclxuXHJcbiAgICBpc09wZW46IGJvb2xlYW47XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuKGN1cnJlbnRJbWFnZTogc3RyaW5nLCBpbWFnZXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSBjdXJyZW50SW1hZ2U7XHJcbiAgICAgICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgfVxyXG59IiwiPGRpdiBcclxuICAgIGNsYXNzPVwiYmFudGEtbGlnaHRib3gtY29udGFpbmVyXCIgXHJcbiAgICAjY29udGFpbmVyXHJcbiAgICBbY2xhc3Mub3Blbl09XCJpc09wZW5cIlxyXG4gICAgPlxyXG5cclxuICAgIDxhIGNsYXNzPVwidW5kZXJsYXlcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIj48L2E+XHJcblxyXG4gICAgPGEgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgPC9hPlxyXG5cclxuICAgIDxpbWcgW3NyY109XCJjdXJyZW50SW1hZ2VcIiAvPlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,89 @@
1
+ import { Pipe, Inject, Optional } from '@angular/core';
2
+ import * as marked from 'marked';
3
+ import createDOMPurify from 'dompurify';
4
+ import twemoji from 'twemoji';
5
+ import { BANTA_SDK_OPTIONS } from '../sdk-options';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ const underline = {
9
+ name: 'underline',
10
+ level: 'inline', // Is this a block-level or inline-level tokenizer?
11
+ start(src) { return src.match(/\+\+/)?.index; }, // Hint to Marked.js to stop and check for a match
12
+ tokenizer(src, tokens) {
13
+ const rule = /^\+\+(.*?)\+\+/; // Regex for the complete token
14
+ const match = rule.exec(src);
15
+ if (match) {
16
+ return {
17
+ type: 'underline', // Should match "name" above
18
+ raw: match[0], // Text to consume from the source
19
+ text: this.lexer.inlineTokens(match[1].trim()), // Additional custom properties
20
+ };
21
+ }
22
+ },
23
+ renderer(token) {
24
+ return `<u>${this.parser.parseInline(token.text)}</u>`;
25
+ }
26
+ };
27
+ marked.marked.use({
28
+ extensions: [underline]
29
+ });
30
+ export class BantaMarkdownToHtmlPipe {
31
+ constructor(sanitizer, sdkOptions) {
32
+ this.sanitizer = sanitizer;
33
+ this.sdkOptions = sdkOptions;
34
+ this.renderer = new marked.Renderer({
35
+ headerPrefix: ''
36
+ });
37
+ const linkRenderer = this.renderer.link;
38
+ this.renderer.link = (href, title, text) => {
39
+ const html = linkRenderer.call(this.renderer, href, title, text);
40
+ return html.replace(/^<a /, '<a target="_blank" rel="noopener noreferrer nofollow" ');
41
+ };
42
+ }
43
+ get emojiUrl() {
44
+ return this.sdkOptions?.emojiUrl ?? 'https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/';
45
+ }
46
+ transform(value) {
47
+ if (!value)
48
+ return '';
49
+ let purifier = createDOMPurify(window);
50
+ // https://github.com/cure53/DOMPurify/blob/e1c19cf6407d782b666cb1d02a6af191f9cbc09e/demos/hooks-target-blank-demo.html
51
+ // Add a hook to make all links open a new window
52
+ purifier.addHook('afterSanitizeAttributes', function (node) {
53
+ // set all elements owning target to target=_blank
54
+ if ('target' in node) {
55
+ node.setAttribute('target', '_blank');
56
+ // prevent https://www.owasp.org/index.php/Reverse_Tabnabbing
57
+ node.setAttribute('rel', 'noopener noreferrer nofollow');
58
+ }
59
+ // set non-HTML/MathML links to xlink:show=new
60
+ if (!node.hasAttribute('target')
61
+ && (node.hasAttribute('xlink:href')
62
+ || node.hasAttribute('href'))) {
63
+ node.setAttribute('xlink:show', 'new');
64
+ }
65
+ });
66
+ value = marked.marked.parse(value, {
67
+ renderer: this.renderer
68
+ });
69
+ value = twemoji.parse(value, { base: this.emojiUrl });
70
+ return this.sanitizer.bypassSecurityTrustHtml(purifier.sanitize(value, {
71
+ FORBID_TAGS: ['h1', 'h2', 'h3', 'h4'],
72
+ KEEP_CONTENT: true
73
+ }));
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaMarkdownToHtmlPipe, deps: [{ token: i1.DomSanitizer }, { token: BANTA_SDK_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); }
76
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: BantaMarkdownToHtmlPipe, name: "markdownToHtml" }); }
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaMarkdownToHtmlPipe, decorators: [{
79
+ type: Pipe,
80
+ args: [{
81
+ name: 'markdownToHtml'
82
+ }]
83
+ }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: undefined, decorators: [{
84
+ type: Inject,
85
+ args: [BANTA_SDK_OPTIONS]
86
+ }, {
87
+ type: Optional
88
+ }] }] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tdG8taHRtbC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL21hcmtkb3duLXRvLWh0bWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sZUFBZSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7OztBQUUvRCxNQUFNLFNBQVMsR0FBRztJQUNkLElBQUksRUFBRSxXQUFXO0lBQ2pCLEtBQUssRUFBRSxRQUFRLEVBQUUsbURBQW1EO0lBQ3BFLEtBQUssQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrREFBa0Q7SUFDbkcsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsK0JBQStCO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLE9BQU87Z0JBQ0gsSUFBSSxFQUFFLFdBQVcsRUFBRSw0QkFBNEI7Z0JBQy9DLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0NBQWtDO2dCQUNqRCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsK0JBQStCO2FBQ2xG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Qjs0R0FKcEIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUhuQyxJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3pCOzswQkFLUSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgbWFya2VkIGZyb20gJ21hcmtlZCc7XHJcbmltcG9ydCBjcmVhdGVET01QdXJpZnkgZnJvbSAnZG9tcHVyaWZ5JztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB0d2Vtb2ppIGZyb20gJ3R3ZW1vamknO1xyXG5pbXBvcnQgeyBCQU5UQV9TREtfT1BUSU9OUywgU2RrT3B0aW9ucyB9IGZyb20gJy4uL3Nkay1vcHRpb25zJztcclxuXHJcbmNvbnN0IHVuZGVybGluZSA9IHtcclxuICAgIG5hbWU6ICd1bmRlcmxpbmUnLFxyXG4gICAgbGV2ZWw6ICdpbmxpbmUnLCAvLyBJcyB0aGlzIGEgYmxvY2stbGV2ZWwgb3IgaW5saW5lLWxldmVsIHRva2VuaXplcj9cclxuICAgIHN0YXJ0KHNyYykgeyByZXR1cm4gc3JjLm1hdGNoKC9cXCtcXCsvKT8uaW5kZXg7IH0sIC8vIEhpbnQgdG8gTWFya2VkLmpzIHRvIHN0b3AgYW5kIGNoZWNrIGZvciBhIG1hdGNoXHJcbiAgICB0b2tlbml6ZXIoc3JjLCB0b2tlbnMpIHtcclxuICAgICAgICBjb25zdCBydWxlID0gL15cXCtcXCsoLio/KVxcK1xcKy87IC8vIFJlZ2V4IGZvciB0aGUgY29tcGxldGUgdG9rZW5cclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJ1bGUuZXhlYyhzcmMpO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyAvLyBUb2tlbiB0byBnZW5lcmF0ZVxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3VuZGVybGluZScsIC8vIFNob3VsZCBtYXRjaCBcIm5hbWVcIiBhYm92ZVxyXG4gICAgICAgICAgICAgICAgcmF3OiBtYXRjaFswXSwgLy8gVGV4dCB0byBjb25zdW1lIGZyb20gdGhlIHNvdXJjZVxyXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5sZXhlci5pbmxpbmVUb2tlbnMobWF0Y2hbMV0udHJpbSgpKSwgLy8gQWRkaXRpb25hbCBjdXN0b20gcHJvcGVydGllc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZW5kZXJlcih0b2tlbikge1xyXG4gICAgICAgIHJldHVybiBgPHU+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0b2tlbi50ZXh0KX08L3U+YDtcclxuICAgIH1cclxufTtcclxuXHJcbm1hcmtlZC5tYXJrZWQudXNlKHtcclxuICAgIGV4dGVuc2lvbnM6IFt1bmRlcmxpbmVdXHJcbn0pO1xyXG5cclxuQFBpcGUoe1xyXG4gICAgbmFtZTogJ21hcmtkb3duVG9IdG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFNYXJrZG93blRvSHRtbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcblxyXG4gICAgICAgIEBJbmplY3QoQkFOVEFfU0RLX09QVElPTlMpIEBPcHRpb25hbCgpXHJcbiAgICAgICAgcHJpdmF0ZSBzZGtPcHRpb25zOiBTZGtPcHRpb25zXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcih7XHJcbiAgICAgICAgICAgIGhlYWRlclByZWZpeDogJydcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBsaW5rUmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyLmxpbms7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5saW5rID0gKGhyZWYsIHRpdGxlLCB0ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBsaW5rUmVuZGVyZXIuY2FsbCh0aGlzLnJlbmRlcmVyLCBocmVmLCB0aXRsZSwgdGV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoL148YSAvLCAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvd1wiICcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG5cdHByaXZhdGUgZ2V0IGVtb2ppVXJsKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2RrT3B0aW9ucz8uZW1vamlVcmwgPz8gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC90d2l0dGVyL3R3ZW1vamlAMTQuMC4yL2Fzc2V0cy8nO1xyXG5cdH1cclxuXHJcbiAgICByZW5kZXJlcjogbWFya2VkLlJlbmRlcmVyO1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBwdXJpZmllciA9IGNyZWF0ZURPTVB1cmlmeSh3aW5kb3cpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvZTFjMTljZjY0MDdkNzgyYjY2NmNiMWQwMmE2YWYxOTFmOWNiYzA5ZS9kZW1vcy9ob29rcy10YXJnZXQtYmxhbmstZGVtby5odG1sXHJcbiAgICAgICAgLy8gQWRkIGEgaG9vayB0byBtYWtlIGFsbCBsaW5rcyBvcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICAgIHB1cmlmaWVyLmFkZEhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgZnVuY3Rpb24obm9kZTogSFRNTEVsZW1lbnQgJiB7IHRhcmdldD86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIC8vIHNldCBhbGwgZWxlbWVudHMgb3duaW5nIHRhcmdldCB0byB0YXJnZXQ9X2JsYW5rXHJcbiAgICAgICAgICAgIGlmICgndGFyZ2V0JyBpbiBub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvUmV2ZXJzZV9UYWJuYWJiaW5nXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3cnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgbm9uLUhUTUwvTWF0aE1MIGxpbmtzIHRvIHhsaW5rOnNob3c9bmV3XHJcbiAgICAgICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhcmdldCcpXHJcbiAgICAgICAgICAgICAgICAmJiAobm9kZS5oYXNBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuaGFzQXR0cmlidXRlKCdocmVmJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgneGxpbms6c2hvdycsICduZXcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YWx1ZSA9IG1hcmtlZC5tYXJrZWQucGFyc2UodmFsdWUsIHtcclxuICAgICAgICAgICAgcmVuZGVyZXI6IHRoaXMucmVuZGVyZXJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFsdWUgPSB0d2Vtb2ppLnBhcnNlKHZhbHVlLCB7IGJhc2U6IHRoaXMuZW1vamlVcmwgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgICAgICAgcHVyaWZpZXIuc2FuaXRpemUodmFsdWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgRk9SQklEX1RBR1M6IFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnXSxcclxuICAgICAgICAgICAgICAgICAgICBLRUVQX0NPTlRFTlQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -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"` : ``} class="mention" 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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaMentionLinkerPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
27
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: BantaMentionLinkerPipe, name: "mentionLinker" }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: BantaMentionLinkerPipe, decorators: [{
30
+ type: Pipe,
31
+ args: [{
32
+ name: 'mentionLinker'
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi1saW5rZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NvbW1vbi9tZW50aW9uLWxpbmtlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLFNBQVMsQ0FBQyxLQUFhLEVBQUUsS0FBNEI7UUFDakQsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFFakIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQXdCO1FBQy9CLE9BQU8sS0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsRUFBRywwQkFBMEIsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDaEksQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQU07UUFDZixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7SUFDOUYsQ0FBQzs4R0E3QlEsc0JBQXNCOzRHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSGxDLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGVBQWU7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VNZW50aW9uIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcblxyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAnbWVudGlvbkxpbmtlcidcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhTWVudGlvbkxpbmtlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBsaW5rcz86IENoYXRNZXNzYWdlTWVudGlvbltdKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBpZiAoIWxpbmtzKVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIGxldCB0ZXh0ID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtYXggPSBsaW5rcy5sZW5ndGg7IGkgPCBtYXg7ICsraSkge1xyXG4gICAgICAgICAgICBsZXQgbWVudGlvbiA9IGxpbmtzW2ldO1xyXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7dGhpcy5lc2NhcGVSZWdFeHAobWVudGlvbi50ZXh0KX1gLCBgZ2lgKSwgYEB7JHtpICsgMX19YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9AXFx7KFxcZCspXFx9L2csICh0ZXh0LCBpKSA9PiBsaW5rc1tpIC0gMV0gPyB0aGlzLmZvcm1hdExpbmsobGlua3NbaSAtIDFdKSA6IHRleHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXRMaW5rKGxpbms6IENoYXRNZXNzYWdlTWVudGlvbikge1xyXG4gICAgICAgIHJldHVybiBgPGEkeyBsaW5rLmV4dGVybmFsID8gYCB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiYCA6IGBgIH0gY2xhc3M9XCJtZW50aW9uXCIgaHJlZj1cIiR7bGluay5saW5rfVwiPiR7bGluay50ZXh0fTwvYT5gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleFxyXG4gICAgICovXHJcbiAgICBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpOyAvLyAkJiBtZWFucyB0aGUgd2hvbGUgbWF0Y2hlZCBzdHJpbmdcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,83 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable } from "@banta/common";
3
+ /**
4
+ * Provides a way to hook in to a shared set of timers, instead of creating a timer per instance.
5
+ * This is very useful for cases where the update is not extremely time-sensitive, but happens at scale.
6
+ * The principal use case is the TimestampComponent. When several hundred (or several thousand) comments are
7
+ * being displayed, we do not want to trigger thousands of independent relative timestamp updates, because over
8
+ * time the updates will saturate the CPU since they don't perfectly align.
9
+ */
10
+ let TimerPool = class TimerPool {
11
+ constructor() {
12
+ this.subscriptions = new Map();
13
+ this.newSubscriptions = new Map();
14
+ this.removedSubscriptions = new Map();
15
+ }
16
+ addTimer(interval, callback) {
17
+ if (interval <= 0) {
18
+ console.warn(`Refusing to set timer with interval of ${interval}!`);
19
+ return () => { };
20
+ }
21
+ let state;
22
+ let sizeWas = this.subscriptions.size;
23
+ if (!this.subscriptions.has(interval)) {
24
+ state = { subscribers: [] };
25
+ state.handle = setInterval(() => {
26
+ console.debug(`[Banta/TimerPool] Notifying ${state.subscribers.length} subs [${interval}ms]`);
27
+ state.subscribers.forEach(sub => sub());
28
+ }, interval);
29
+ this.subscriptions.set(interval, state);
30
+ }
31
+ else {
32
+ state = this.subscriptions.get(interval);
33
+ }
34
+ state.subscribers.push(callback);
35
+ // Debug information //////////////////////////
36
+ //
37
+ if (!this.newSubscriptions.has(interval))
38
+ this.newSubscriptions.set(interval, 0);
39
+ this.newSubscriptions.set(interval, (this.newSubscriptions.get(interval) ?? 0) + 1);
40
+ clearTimeout(this.newSubscriptionsNotice);
41
+ this.newSubscriptionsNotice = setTimeout(() => {
42
+ for (let [interval, count] of this.newSubscriptions) {
43
+ console.debug(`[Banta/TimerPool] ${count} new subscriptions to ${interval}ms [${state.subscribers.length} total]`);
44
+ }
45
+ this.newSubscriptions.clear();
46
+ });
47
+ //
48
+ ///////////////////////////////////////////////
49
+ if (sizeWas === 0) {
50
+ console.debug(`[Banta/TimerPool] No longer idle.`);
51
+ }
52
+ // Unsubscribe function
53
+ return () => {
54
+ let state = this.subscriptions.get(interval);
55
+ let index = state.subscribers.indexOf(callback);
56
+ if (index >= 0)
57
+ state.subscribers.splice(index, 1);
58
+ if (state.subscribers.length === 0) {
59
+ clearInterval(state.handle);
60
+ this.subscriptions.delete(interval);
61
+ }
62
+ if (!this.removedSubscriptions.has(interval))
63
+ this.removedSubscriptions.set(interval, 0);
64
+ this.removedSubscriptions.set(interval, (this.removedSubscriptions.get(interval) ?? 0) + 1);
65
+ // Debug information ////////////////////////////////////////////////////////////////////
66
+ clearTimeout(this.removedSubscriptionsNotice);
67
+ this.removedSubscriptionsNotice = setTimeout(() => {
68
+ for (let [interval, count] of this.removedSubscriptions) {
69
+ let state = this.subscriptions.get(interval);
70
+ console.debug(`[Banta/TimerPool] ${count} unsubscribed from ${interval}ms [${state?.subscribers?.length ?? 0} remain]`);
71
+ }
72
+ if (this.subscriptions.size === 0)
73
+ console.debug(`[Banta/TimerPool] All subscriptions have been removed. Now idle.`);
74
+ this.removedSubscriptions.clear();
75
+ });
76
+ };
77
+ }
78
+ };
79
+ TimerPool = __decorate([
80
+ Injectable()
81
+ ], TimerPool);
82
+ export { TimerPool };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXItcG9vbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbW9uL3RpbWVyLXBvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8zQzs7Ozs7O0dBTUc7QUFFSSxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVM7SUFBZjtRQUNLLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFHOUMscUJBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFHN0MseUJBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFnRjdELENBQUM7SUE5RUcsUUFBUSxDQUFDLFFBQWdCLEVBQUUsUUFBb0I7UUFDM0MsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNwRSxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxLQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEtBQUssR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxVQUFVLFFBQVEsS0FBSyxDQUFDLENBQUM7Z0JBQzlGLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDSixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpDLCtDQUErQztRQUMvQyxFQUFFO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwRixZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLHlCQUF5QixRQUFRLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZILENBQUM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFO1FBQ0YsK0NBQStDO1FBRS9DLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsd0JBQXdCO1FBRXhCLE9BQU8sR0FBRyxFQUFFO1lBQ1IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsSUFBSSxLQUFLLElBQUksQ0FBQztnQkFDVixLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFdkMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTVGLHlGQUF5RjtZQUV6RixZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlDLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEtBQUssc0JBQXNCLFFBQVEsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM1SCxDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO2dCQUV0RixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQTtBQXZGWSxTQUFTO0lBRHJCLFVBQVUsRUFBRTtHQUNBLFNBQVMsQ0F1RnJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcblxyXG5pbnRlcmZhY2UgVGltZXJTdGF0ZSB7XHJcbiAgICBoYW5kbGU/O1xyXG4gICAgc3Vic2NyaWJlcnM6ICgoKSA9PiB2b2lkKVtdO1xyXG59XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgYSB3YXkgdG8gaG9vayBpbiB0byBhIHNoYXJlZCBzZXQgb2YgdGltZXJzLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgdGltZXIgcGVyIGluc3RhbmNlLlxyXG4gKiBUaGlzIGlzIHZlcnkgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSB0aGUgdXBkYXRlIGlzIG5vdCBleHRyZW1lbHkgdGltZS1zZW5zaXRpdmUsIGJ1dCBoYXBwZW5zIGF0IHNjYWxlLlxyXG4gKiBUaGUgcHJpbmNpcGFsIHVzZSBjYXNlIGlzIHRoZSBUaW1lc3RhbXBDb21wb25lbnQuIFdoZW4gc2V2ZXJhbCBodW5kcmVkIChvciBzZXZlcmFsIHRob3VzYW5kKSBjb21tZW50cyBhcmUgXHJcbiAqIGJlaW5nIGRpc3BsYXllZCwgd2UgZG8gbm90IHdhbnQgdG8gdHJpZ2dlciB0aG91c2FuZHMgb2YgaW5kZXBlbmRlbnQgcmVsYXRpdmUgdGltZXN0YW1wIHVwZGF0ZXMsIGJlY2F1c2Ugb3ZlciBcclxuICogdGltZSB0aGUgdXBkYXRlcyB3aWxsIHNhdHVyYXRlIHRoZSBDUFUgc2luY2UgdGhleSBkb24ndCBwZXJmZWN0bHkgYWxpZ24uIFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVGltZXJQb29sIHtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8bnVtYmVyLCBUaW1lclN0YXRlPigpO1xyXG5cclxuICAgIHByaXZhdGUgbmV3U3Vic2NyaXB0aW9uc05vdGljZTtcclxuICAgIHByaXZhdGUgbmV3U3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVkU3Vic2NyaXB0aW9uc05vdGljZTtcclxuICAgIHByaXZhdGUgcmVtb3ZlZFN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG5cclxuICAgIGFkZFRpbWVyKGludGVydmFsOiBudW1iZXIsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKGludGVydmFsIDw9IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBSZWZ1c2luZyB0byBzZXQgdGltZXIgd2l0aCBpbnRlcnZhbCBvZiAke2ludGVydmFsfSFgKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0YXRlOiBUaW1lclN0YXRlO1xyXG4gICAgICAgIGxldCBzaXplV2FzID0gdGhpcy5zdWJzY3JpcHRpb25zLnNpemU7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zLmhhcyhpbnRlcnZhbCkpIHtcclxuICAgICAgICAgICAgc3RhdGUgPSB7IHN1YnNjcmliZXJzOiBbXSB9O1xyXG4gICAgICAgICAgICBzdGF0ZS5oYW5kbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbQmFudGEvVGltZXJQb29sXSBOb3RpZnlpbmcgJHtzdGF0ZS5zdWJzY3JpYmVycy5sZW5ndGh9IHN1YnMgWyR7aW50ZXJ2YWx9bXNdYCk7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5zdWJzY3JpYmVycy5mb3JFYWNoKHN1YiA9PiBzdWIoKSk7XHJcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnNldChpbnRlcnZhbCwgc3RhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0ZS5zdWJzY3JpYmVycy5wdXNoKGNhbGxiYWNrKTtcclxuXHJcbiAgICAgICAgLy8gRGVidWcgaW5mb3JtYXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAvL1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMubmV3U3Vic2NyaXB0aW9ucy5oYXMoaW50ZXJ2YWwpKVxyXG4gICAgICAgICAgICB0aGlzLm5ld1N1YnNjcmlwdGlvbnMuc2V0KGludGVydmFsLCAwKTtcclxuICAgICAgICB0aGlzLm5ld1N1YnNjcmlwdGlvbnMuc2V0KGludGVydmFsLCAodGhpcy5uZXdTdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCkgPz8gMCkgKyAxKTtcclxuXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubmV3U3Vic2NyaXB0aW9uc05vdGljZSk7XHJcbiAgICAgICAgdGhpcy5uZXdTdWJzY3JpcHRpb25zTm90aWNlID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IFtpbnRlcnZhbCwgY291bnRdIG9mIHRoaXMubmV3U3Vic2NyaXB0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gJHtjb3VudH0gbmV3IHN1YnNjcmlwdGlvbnMgdG8gJHtpbnRlcnZhbH1tcyBbJHtzdGF0ZS5zdWJzY3JpYmVycy5sZW5ndGh9IHRvdGFsXWApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5ld1N1YnNjcmlwdGlvbnMuY2xlYXIoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICAgICAgICBpZiAoc2l6ZVdhcyA9PT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbQmFudGEvVGltZXJQb29sXSBObyBsb25nZXIgaWRsZS5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZ1bmN0aW9uIFxyXG5cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGludGVydmFsKTtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gc3RhdGUuc3Vic2NyaWJlcnMuaW5kZXhPZihjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKVxyXG4gICAgICAgICAgICAgICAgc3RhdGUuc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoc3RhdGUuaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUoaW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMuaGFzKGludGVydmFsKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMuc2V0KGludGVydmFsLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9ucy5zZXQoaW50ZXJ2YWwsICh0aGlzLnJlbW92ZWRTdWJzY3JpcHRpb25zLmdldChpbnRlcnZhbCkgPz8gMCkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIERlYnVnIGluZm9ybWF0aW9uIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZW1vdmVkU3Vic2NyaXB0aW9uc05vdGljZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnNOb3RpY2UgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbnRlcnZhbCwgY291bnRdIG9mIHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KGludGVydmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBbQmFudGEvVGltZXJQb29sXSAke2NvdW50fSB1bnN1YnNjcmliZWQgZnJvbSAke2ludGVydmFsfW1zIFske3N0YXRlPy5zdWJzY3JpYmVycz8ubGVuZ3RoID8/IDB9IHJlbWFpbl1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLnNpemUgPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW0JhbnRhL1RpbWVyUG9vbF0gQWxsIHN1YnNjcmlwdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQuIE5vdyBpZGxlLmApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlZFN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufSJdfQ==