@banta/sdk 4.3.2 → 4.3.3

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.
@@ -6,6 +6,8 @@ import { sanitize } from 'dompurify';
6
6
  import { DomSanitizer } from '@angular/platform-browser';
7
7
  import { CommonModule } from '@angular/common';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
+ import { Overlay, OverlayModule } from '@angular/cdk/overlay';
10
+ import { PortalModule } from '@angular/cdk/portal';
9
11
  import { MatButtonModule } from '@angular/material/button';
10
12
  import { MatFormFieldModule } from '@angular/material/form-field';
11
13
  import { MatInputModule } from '@angular/material/input';
@@ -6830,100 +6832,63 @@ EmojiSelectorPanelComponent.propDecorators = {
6830
6832
 
6831
6833
  /// <reference types="@types/resize-observer-browser" />
6832
6834
  class EmojiSelectorButtonComponent {
6833
- constructor(elementRef) {
6835
+ constructor(elementRef, overlay) {
6834
6836
  this.elementRef = elementRef;
6837
+ this.overlay = overlay;
6835
6838
  this._selected = new Subject();
6836
6839
  this.showEmojiPanel = false;
6837
6840
  }
6838
6841
  get selected() {
6839
6842
  return this._selected;
6840
6843
  }
6841
- ngOnDestroy() {
6842
- this.removeListener();
6843
- this.panelElement.nativeElement.remove();
6844
+ get isOpen() {
6845
+ return this.overlayRef;
6844
6846
  }
6845
- get widthConstrained() { return this.width < 700; }
6846
- ngAfterViewInit() {
6847
+ /**
6848
+ * Insert the given emoji.
6849
+ * @param str
6850
+ */
6851
+ insert(str) {
6852
+ this._selected.next(str);
6847
6853
  }
6848
- putPanelAtRoot() {
6849
- // If we are in full-screen, placing the panel outside of the full-screen element will result in it
6850
- // always being behind said full-screen element, so we need to ensure we never place it further up the
6851
- // stack.
6852
- let root = document.fullscreenElement || document.body.querySelector('[ng-version]') || document.body;
6853
- root.appendChild(this.panelElement.nativeElement);
6854
- }
6855
- removeListener() {
6856
- document.removeEventListener('click', this.clickListener);
6857
- window.removeEventListener('resize', this.resizeListener);
6858
- }
6859
- place() {
6860
- // Not currently used as it can't be easily done handling all
6861
- // scrolling corner cases.
6862
- this.putPanelAtRoot();
6863
- let pos = this.buttonElement.nativeElement.getBoundingClientRect();
6864
- let size = this.panelElement.nativeElement.getBoundingClientRect();
6865
- let left = window.scrollX + pos.left + pos.width - size.width;
6866
- if (left < 0)
6867
- left = (window.scrollX + window.innerWidth) / 2 - size.width / 2;
6868
- let scrollY = window.scrollY;
6869
- if (document.fullscreenElement) {
6854
+ close() {
6855
+ if (this.overlayRef) {
6856
+ this.overlayRef.dispose();
6857
+ this.overlayRef = null;
6858
+ return;
6870
6859
  }
6871
- Object.assign(this.panelElement.nativeElement.style, {
6872
- top: `${window.scrollY + pos.top + pos.height}px`,
6873
- left: `${Math.max(0, left)}px`
6874
- });
6875
6860
  }
6876
6861
  show() {
6877
- if (this.showEmojiPanel) {
6878
- this.showEmojiPanel = false;
6879
- return;
6862
+ if (this.isOpen) {
6863
+ this.close();
6880
6864
  }
6881
- this.showEmojiPanel = true;
6882
- //this.place();
6883
- setTimeout(() => {
6884
- let onResize = () => {
6885
- if (!this.showEmojiPanel)
6886
- return;
6887
- this.width = window.innerWidth;
6888
- this.height = window.innerHeight;
6889
- let edgeOffset = 0;
6890
- let commentField = this.elementRef.nativeElement.closest(`banta-comment-field`);
6891
- if (commentField) {
6892
- let size = commentField.getBoundingClientRect();
6893
- this.width = size.width;
6894
- edgeOffset = window.innerWidth - size.right;
6895
- }
6896
- let buttonRect = this.buttonElement.nativeElement.getBoundingClientRect();
6897
- let buttonRight = window.innerWidth - buttonRect.right - edgeOffset - 10;
6898
- if (this.width < 700) {
6899
- this.panelElement.nativeElement.style.right = `${-buttonRight}px`;
6900
- }
6901
- else {
6902
- this.panelElement.nativeElement.style.right = '';
6903
- }
6904
- this.panelElement.nativeElement.style.maxWidth = `${this.width - 15}px`;
6905
- };
6906
- this.resizeListener = onResize;
6907
- onResize();
6908
- this.clickListener = (ev) => {
6909
- let parent = ev.target;
6910
- let isInDialog = false;
6911
- while (parent) {
6912
- if (parent.matches('emoji-selector-panel'))
6913
- isInDialog = true;
6914
- parent = parent.parentElement;
6865
+ this.overlayRef = this.overlay.create({
6866
+ positionStrategy: this.overlay.position()
6867
+ .flexibleConnectedTo(this.elementRef)
6868
+ .withPositions([
6869
+ {
6870
+ originX: 'end',
6871
+ originY: 'bottom',
6872
+ overlayX: 'end',
6873
+ overlayY: 'top'
6915
6874
  }
6916
- if (isInDialog)
6917
- return;
6918
- this.showEmojiPanel = false;
6919
- this.removeListener();
6920
- };
6921
- document.addEventListener('click', this.clickListener);
6922
- window.addEventListener('resize', this.resizeListener);
6875
+ ])
6876
+ .withFlexibleDimensions(true),
6877
+ hasBackdrop: true,
6878
+ disposeOnNavigation: true,
6879
+ scrollStrategy: this.overlay.scrollStrategies.reposition({
6880
+ autoClose: true
6881
+ })
6923
6882
  });
6924
- }
6925
- insert(str) {
6926
- this._selected.next(str);
6883
+ this.overlayRef.backdropClick().subscribe(() => {
6884
+ this.close();
6885
+ });
6886
+ this.overlayRef.keydownEvents().subscribe(event => {
6887
+ if (event.key === 'Escape') {
6888
+ this.close();
6889
+ }
6890
+ });
6891
+ this.overlayRef.attach(this.selectorPanelTemplate);
6927
6892
  }
6928
6893
  }
6929
6894
  EmojiSelectorButtonComponent.decorators = [
@@ -6933,11 +6898,12 @@ EmojiSelectorButtonComponent.decorators = [
6933
6898
  <button #button type="button" mat-icon-button (click)="show()">
6934
6899
  <mat-icon>emoji_emotions</mat-icon>
6935
6900
  </button>
6936
- <emoji-selector-panel
6937
- #panel
6938
- (selected)="insert($event)"
6939
- [class.visible]="showEmojiPanel"
6940
- ></emoji-selector-panel>
6901
+ <ng-template cdkPortal #selectorPanelTemplate="cdkPortal">
6902
+ <emoji-selector-panel
6903
+ #panel
6904
+ (selected)="insert($event)"
6905
+ ></emoji-selector-panel>
6906
+ </ng-template>
6941
6907
  `,
6942
6908
  styles: [`
6943
6909
  :host {
@@ -6945,20 +6911,6 @@ EmojiSelectorButtonComponent.decorators = [
6945
6911
  position: relative;
6946
6912
  }
6947
6913
 
6948
- emoji-selector-panel {
6949
- position: absolute;
6950
- top: 2.5em;
6951
- right: 0;
6952
- opacity: 0;
6953
- pointer-events: none;
6954
- z-index: 10;
6955
- }
6956
-
6957
- emoji-selector-panel.visible {
6958
- pointer-events: initial;
6959
- opacity: 1;
6960
- }
6961
-
6962
6914
  button {
6963
6915
  color: #666
6964
6916
  }
@@ -6966,13 +6918,12 @@ EmojiSelectorButtonComponent.decorators = [
6966
6918
  },] }
6967
6919
  ];
6968
6920
  EmojiSelectorButtonComponent.ctorParameters = () => [
6969
- { type: ElementRef }
6921
+ { type: ElementRef },
6922
+ { type: Overlay }
6970
6923
  ];
6971
6924
  EmojiSelectorButtonComponent.propDecorators = {
6972
- selected: [{ type: Output }],
6973
- panelElement: [{ type: ViewChild, args: ['panel', { read: ElementRef },] }],
6974
- buttonElement: [{ type: ViewChild, args: ['button', { read: ElementRef },] }],
6975
- widthConstrained: [{ type: HostBinding, args: ['class.width-constrained',] }]
6925
+ selectorPanelTemplate: [{ type: ViewChild, args: ['selectorPanelTemplate',] }],
6926
+ selected: [{ type: Output }]
6976
6927
  };
6977
6928
 
6978
6929
  const COMPONENTS$1 = [
@@ -6990,7 +6941,9 @@ EmojiModule.decorators = [
6990
6941
  MatIconModule,
6991
6942
  MatButtonModule,
6992
6943
  MatFormFieldModule,
6993
- MatInputModule
6944
+ MatInputModule,
6945
+ OverlayModule,
6946
+ PortalModule
6994
6947
  ],
6995
6948
  exports: COMPONENTS$1
6996
6949
  },] }
@@ -7848,12 +7801,16 @@ class CommentComponent {
7848
7801
  }
7849
7802
  return `url(${url})`;
7850
7803
  }
7804
+ get replyCount() {
7805
+ var _a;
7806
+ return ((_a = this.message.submessages) === null || _a === void 0 ? void 0 : _a.length) || this.message.submessageCount || 0;
7807
+ }
7851
7808
  }
7852
7809
  CommentComponent.decorators = [
7853
7810
  { type: Component, args: [{
7854
7811
  selector: 'banta-comment',
7855
- template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">Report</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">Edit</button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">Delete</button>\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n <span class=\"banta-message-content\" [innerHTML]=\"message.message | markdownToHtml\"></span>\r\n\r\n <ng-container *ngIf=\"message.attachments?.length > 0\">\r\n <banta-lightbox #lightbox></banta-lightbox>\r\n <div class=\"attachments-row\" [class.single]=\"message.attachments?.length === 1\" *ngIf=\"message.attachments && message.attachments?.length > 0\">\r\n <a \r\n href=\"javascript:;\" \r\n (click)=\"showLightbox(attachment)\"\r\n *ngFor=\"let attachment of message.attachments\" \r\n >\r\n <img [src]=\"attachment.url\" alt=\"\">\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <ul class=\"message-facts small\">\r\n <li *ngIf=\"message.edits?.length > 0\">(Edited)</li>\r\n </ul>\r\n </div>\r\n <div class=\"content\" *ngIf=\"editing\" style=\"padding-bottom: 2em;\">\r\n <div>\r\n <mat-form-field floatLabel=\"always\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Edit Message</mat-label>\r\n <textarea matInput [(ngModel)]=\"editedMessage\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <button mat-raised-button (click)=\"saveEdit()\">Save</button> &nbsp;\r\n <button mat-button (click)=\"endEditing()\">Cancel</button>\r\n </div>\r\n\r\n\r\n <div class=\"actions\">\r\n <banta-timestamp [value]=\"message.sentAt\"></banta-timestamp>\r\n <ul class=\"message-facts\">\r\n <li *ngIf=\"message.edits?.length > 0\">Edited</li>\r\n </ul>\r\n <div class=\"spacer\"></div>\r\n <div class=\"counted-action\" *ngIf=\"showReplyAction\">\r\n <div class=\"count-indicator\">\r\n {{message.submessages?.length || message.submessageCount || 0}}\r\n </div>\r\n <button mat-icon-button matTooltip=\"Replies\" matTooltipPosition=\"below\" (click)=\"select()\">\r\n <mat-icon [inline]=\"true\">comment</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"counted-action\" [class.active]=\"message.userState?.liked\">\r\n <div class=\"count-indicator\">\r\n {{message.likes}}\r\n </div>\r\n <button \r\n *ngIf=\"message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"true\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : message.userState?.liked ? 'Unlike' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n >\r\n <mat-spinner [diameter]=\"15\" style=\"margin-left: 1em;\"></mat-spinner>\r\n </button>\r\n <button \r\n *ngIf=\"!message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"!permissions?.canLike\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n (click)=\"message.userState?.liked ? unlike() : like()\" \r\n >\r\n <mat-icon [inline]=\"true\">thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"counted-action\">\r\n <button mat-icon-button matTooltip=\"Share this comment\" matTooltipPosition=\"below\" (click)=\"share()\">\r\n <mat-icon [inline]=\"true\" >share</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button mat-icon-button [matMenuTriggerFor]=\"pointItemMenu\">\r\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n",
7856
- styles: ["@-webkit-keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}@keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}:host{display:flex;flex-direction:column;position:relative;padding:.5em;visibility:hidden}:host.new{visibility:visible;-webkit-animation-name:comment-appear;animation-name:comment-appear;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}:host.highlighted{background:#00223a;outline:2px solid #003277}:host.visible{visibility:visible}:host:hover{background:#eee}:host .message-content .content{margin-left:60px;margin-right:.5em}:host .message-content .attachments-row{margin-top:15px;display:flex;gap:10px}:host .message-content .attachments-row img{border-radius:10px;width:300px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}:host.abbreviated .message-content .content{text-overflow:ellipsis;overflow-y:hidden}:host .actions{display:flex;padding-right:10px;margin-left:60px;align-items:center}:host .actions button{color:#666;flex-shrink:0}:host .actions banta-timestamp{color:#666;font-size:10pt;flex-shrink:0}.user{position:relative;margin:1em 0 0;display:flex;align-items:center}.user .display-name,.user .username{z-index:1;position:relative;padding:0 0 0 1em;font-size:10pt;color:#000;margin:0 auto 0 0;display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex-shrink:1;flex-grow:0}.user .display-name.username.username.username,.user .username.username.username.username{color:#666}.avatar{height:48px;width:48px;background-position:50%;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0}.counted-action{display:flex;align-items:center}.counted-action.active .count-indicator,.counted-action.active button{color:#00a5ff}.count-indicator{font-size:9pt;padding:0 0 0 3px;color:#666}:host-context(.mat-dark-theme) .count-indicator{border-color:#333}:host-context(.mat-dark-theme):hover{background:#060606}.user-tag,:host-context(.mat-dark-theme) .user .display-name,:host-context(.mat-dark-theme) .user .username{color:#fff}.user-tag{text-transform:uppercase;font-size:12px;border:1px solid #b27373;background:#7a412b;padding:3px 5px;margin:0 .5em 0 1em;border-radius:3px}.spacer{flex-shrink:1;flex-grow:1}ul.message-facts{margin:0;padding:0;color:#666}ul.message-facts li{list-style-type:none;border-left:1px solid #666;font-size:10pt;padding-left:.5em;margin-left:.5em}ul.message-facts.small{display:none}ul.message-facts.small li{margin-top:.5em}ul.message-facts.small li:first-child{border-left:1px solid transparent;margin-left:0;padding-left:0}@media (max-width:400px){.avatar{height:32px;width:32px}.actions ul.message-facts{display:none}ul.message-facts.small{display:initial}:host .actions{margin-left:0;margin-top:.5em}:host .message-content .content{margin-left:44px;margin-right:.5em}}:host-context(.banta-mobile) .avatar{height:32px;width:32px}:host-context(.banta-mobile) .actions ul.message-facts{display:none}:host-context(.banta-mobile) ul.message-facts.small{display:initial}:host-context(.banta-mobile) :host .actions{margin-left:0;margin-top:.5em}:host-context(.banta-mobile) :host .message-content .content{margin-left:44px;margin-right:.5em}"]
7812
+ template: "\r\n<mat-menu #pointItemMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"share()\">\r\n <mat-icon>share</mat-icon>\r\n Share\r\n </button>\r\n <button *ngIf=\"!mine\" mat-menu-item (click)=\"report()\">\r\n <mat-icon>warning</mat-icon>\r\n Report\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canEdit\" mat-menu-item (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit\r\n </button>\r\n <button *ngIf=\"mine\" [disabled]=\"!permissions?.canDelete\" mat-menu-item (click)=\"delete()\">\r\n <mat-icon>delete</mat-icon>\r\n Delete\r\n </button>\r\n</mat-menu>\r\n\r\n<div class=\"message-content\">\r\n <div class=\"user\">\r\n <a\r\n href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"selectAvatar(message.user)\"\r\n [style.background-image]=\"avatarForUser(message.user)\"></a>\r\n <a href=\"javascript:;\" class=\"display-name\" (click)=\"selectUser()\">{{message.user.displayName}}</a>\r\n <a href=\"javascript:;\" class=\"username\" (click)=\"selectUsername(message.user)\">@{{message.user.username}}</a>\r\n <span class=\"user-tag\" *ngIf=\"message.user.tag\">{{message.user.tag}}</span>\r\n <banta-timestamp [value]=\"message.sentAt\"></banta-timestamp>\r\n <span class=\"spacer\"></span>\r\n </div>\r\n <div class=\"content\" *ngIf=\"!editing\">\r\n <span class=\"banta-message-content\" [innerHTML]=\"message.message | markdownToHtml\"></span>\r\n\r\n <ng-container *ngIf=\"message.attachments?.length > 0\">\r\n <banta-lightbox #lightbox></banta-lightbox>\r\n <div class=\"attachments-row\" [class.single]=\"message.attachments?.length === 1\" *ngIf=\"message.attachments && message.attachments?.length > 0\">\r\n <a \r\n href=\"javascript:;\" \r\n (click)=\"showLightbox(attachment)\"\r\n *ngFor=\"let attachment of message.attachments\" \r\n >\r\n <img [src]=\"attachment.url\" alt=\"\">\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <ul class=\"message-facts\">\r\n <li *ngIf=\"message.edits?.length > 0\">(Edited)</li>\r\n </ul>\r\n </div>\r\n <div class=\"content\" *ngIf=\"editing\" style=\"padding-bottom: 2em;\">\r\n <div>\r\n <mat-form-field floatLabel=\"always\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Edit Message</mat-label>\r\n <textarea matInput [(ngModel)]=\"editedMessage\"></textarea>\r\n </mat-form-field>\r\n </div>\r\n <button mat-raised-button (click)=\"saveEdit()\">Save</button> &nbsp;\r\n <button mat-button (click)=\"endEditing()\">Cancel</button>\r\n </div>\r\n\r\n\r\n <div class=\"actions\">\r\n <div class=\"spacer\"></div>\r\n <div class=\"counted-action\" *ngIf=\"showReplyAction\">\r\n <button mat-button [matTooltip]=\"replyCount > 0 ? 'Replies' : 'Reply'\" matTooltipPosition=\"below\" (click)=\"select()\">\r\n <mat-icon [inline]=\"true\">comment</mat-icon>\r\n <span class=\"count-indicator\">\r\n {{replyCount > 0 ? 'Replies' : 'Reply'}}\r\n {{replyCount > 0 ? '(' + replyCount + ')' : ''}}\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"counted-action\" [class.active]=\"message.userState?.liked\">\r\n <button \r\n *ngIf=\"message.transientState?.liking\"\r\n mat-icon-button \r\n [disabled]=\"true\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : message.userState?.liked ? 'Unlike' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n >\r\n <mat-spinner [diameter]=\"15\" style=\"margin-left: 1em;\"></mat-spinner>\r\n </button>\r\n <button \r\n *ngIf=\"!message.transientState?.liking\"\r\n mat-button \r\n [disabled]=\"!permissions?.canLike\" \r\n [matTooltip]=\"upvoting ? 'Please wait...' : 'Like'\" \r\n matTooltipPosition=\"below\" \r\n (click)=\"message.userState?.liked ? unlike() : like()\" \r\n >\r\n <mat-icon [inline]=\"true\">thumb_up</mat-icon>\r\n <span class=\"count-indicator\" *ngIf=\"message.likes > 0\">\r\n {{message.likes}}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <button mat-icon-button [matMenuTriggerFor]=\"pointItemMenu\">\r\n <mat-icon [inline]=\"true\">more_vert</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n",
7813
+ styles: ["@-webkit-keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}@keyframes comment-appear{0%{transform:translate(100vw)}to{transform:translate(0)}}:host{display:flex;flex-direction:column;position:relative;padding:.5em;visibility:hidden}:host.new{visibility:visible;-webkit-animation-name:comment-appear;animation-name:comment-appear;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}:host.highlighted{background:#00223a;outline:2px solid #003277}:host.visible{visibility:visible}:host:hover{background:#eee}:host .message-content .content{margin-left:60px;margin-right:.5em}:host .message-content .attachments-row{margin-top:15px;display:flex;gap:10px}:host .message-content .attachments-row img{border-radius:10px;width:300px;max-width:100%;max-height:20em;-o-object-fit:cover;object-fit:cover}:host.abbreviated .message-content .content{text-overflow:ellipsis;overflow-y:hidden}:host .actions{display:flex;padding-right:10px;margin-left:60px;align-items:center}:host .actions button,banta-timestamp{color:#666;flex-shrink:0}banta-timestamp{font-size:10pt;margin-left:1em}.user{position:relative;margin:1em 0 0;display:flex;align-items:center}.user .display-name,.user .username{z-index:1;position:relative;padding:0 0 0 1em;font-size:10pt;color:#000;margin:0 auto 0 0;display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex-shrink:1;flex-grow:0}.user .display-name.username.username.username,.user .username.username.username.username{color:#666}.avatar{height:48px;width:48px;background-position:50%;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0}.counted-action{display:flex;align-items:center}.counted-action.active .count-indicator,.counted-action.active button{color:#00a5ff}.counted-action button .count-indicator{margin-left:.5em}.count-indicator{font-size:9pt;padding:0 0 0 3px;color:#666}:host-context(.mat-dark-theme) .count-indicator{border-color:#333}:host-context(.mat-dark-theme):hover{background:#060606}.user-tag,:host-context(.mat-dark-theme) .user .display-name,:host-context(.mat-dark-theme) .user .username{color:#fff}.user-tag{text-transform:uppercase;font-size:12px;border:1px solid #b27373;background:#7a412b;padding:3px 5px;margin:0 .5em 0 1em;border-radius:3px}.spacer{flex-shrink:1;flex-grow:1}ul.message-facts{margin:0;padding:0;color:#666}ul.message-facts li{list-style-type:none;border-left:1px solid #666;font-size:10pt;padding-left:.5em;margin-left:.5em;margin-top:.5em}ul.message-facts li:first-child{border-left:1px solid transparent;margin-left:0;padding-left:0}@media (max-width:400px){.avatar{height:32px;width:32px}:host .actions{margin-left:0;margin-top:.5em}:host .message-content .content{margin-left:44px;margin-right:.5em}}:host-context(.banta-mobile) .avatar{height:32px;width:32px}:host-context(.banta-mobile) :host .actions{margin-left:0;margin-top:.5em}:host-context(.banta-mobile) :host .message-content .content{margin-left:44px;margin-right:.5em}"]
7857
7814
  },] }
7858
7815
  ];
7859
7816
  CommentComponent.propDecorators = {
@@ -9154,7 +9111,9 @@ CommentsModule.decorators = [
9154
9111
  BantaCommonModule,
9155
9112
  EmojiModule,
9156
9113
  MatTooltipModule,
9157
- MatSelectModule
9114
+ MatSelectModule,
9115
+ OverlayModule,
9116
+ PortalModule
9158
9117
  ],
9159
9118
  exports: COMPONENTS$3
9160
9119
  },] }
@@ -9420,7 +9379,9 @@ BantaSdkModule.decorators = [
9420
9379
  MatFormFieldModule,
9421
9380
  MatInputModule,
9422
9381
  MatProgressSpinnerModule,
9423
- MatSnackBarModule
9382
+ MatSnackBarModule,
9383
+ OverlayModule,
9384
+ PortalModule
9424
9385
  ],
9425
9386
  declarations: [
9426
9387
  BantaComponent,