@banta/sdk 4.0.13 → 4.0.16
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.
- package/bundles/banta-sdk.umd.js +75 -12
- package/bundles/banta-sdk.umd.js.map +1 -1
- package/bundles/banta-sdk.umd.min.js +1 -1
- package/bundles/banta-sdk.umd.min.js.map +1 -1
- package/esm2015/lib/comments/banta-comments/banta-comments.component.js +23 -5
- package/esm2015/lib/comments/comment-field/comment-field.component.js +1 -1
- package/esm2015/lib/emoji/emoji-selector-button.component.js +47 -27
- package/esm2015/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.js +1 -1
- package/fesm2015/banta-sdk.js +69 -31
- package/fesm2015/banta-sdk.js.map +1 -1
- package/lib/comments/banta-comments/banta-comments.component.d.ts +9 -3
- package/lib/emoji/emoji-selector-button.component.d.ts +6 -0
- package/package.json +1 -1
package/fesm2015/banta-sdk.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable, Subject, BehaviorSubject, Subscription } from 'rxjs';
|
|
2
2
|
import { publish } from 'rxjs/operators';
|
|
3
|
-
import { Component, Input, ViewChild, NgModule, Output, ElementRef, HostBinding, Injectable, Inject } from '@angular/core';
|
|
3
|
+
import { Component, Input, ViewChild, NgModule, Output, ElementRef, HostBinding, NgZone, Injectable, Inject } from '@angular/core';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { MatIconModule } from '@angular/material/icon';
|
|
6
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -6761,7 +6761,7 @@ EmojiSelectorPanelComponent.decorators = [
|
|
|
6761
6761
|
{ type: Component, args: [{
|
|
6762
6762
|
selector: 'emoji-selector-panel',
|
|
6763
6763
|
template: "<div class=\"search-box\" *ngIf=\"searchVisible\">\r\n\t<a mat-icon-button href=\"javascript:;\" (click)=\"hideSearch()\">\r\n\t\t<mat-icon>arrow_back</mat-icon>\r\n\t</a>\r\n\t<mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n\t\t<mat-label>Search for emoji</mat-label>\r\n\t\t<input name=\"search\" type=\"text\" matInput placeholder=\"Start typing\" [(ngModel)]=\"searchQuery\" />\r\n\t</mat-form-field>\r\n</div>\r\n\r\n<div class=\"selector\">\r\n\t<ng-container *ngIf=\"searchVisible\">\r\n\t\t<div class=\"emoji-list\">\r\n\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t*ngFor=\"let emoji of searchResults\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t<div class=\"categories\">\r\n\t\t\t<ng-container *ngIf=\"!searchVisible\">\r\n\t\t\t\t<a [title]=\"humanize(category.name)\" [class.active]=\"activeCategory === category.name\" mat-icon-button *ngFor=\"let category of categories\" (click)=\"activeCategory = category.name\">\r\n\t\t\t\t\t<mat-icon>{{category.icon}}</mat-icon>\r\n\t\t\t\t</a>\r\n\r\n\t\t\t\t<a title=\"Search\" [class.active] mat-icon-button (click)=\"showSearch()\">\r\n\t\t\t\t\t<mat-icon>search</mat-icon>\r\n\t\t\t\t</a>\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t\t<ng-container *ngFor=\"let category of categories\">\r\n\t\t\t<div class=\"emoji-list\" *ngIf=\"activeCategory && activeCategory == category.name\">\r\n\t\t\t\t<a href=\"javascript:;\" (click)=\"select(emoji.char)\" \r\n\t\t\t\t\t*ngFor=\"let emoji of category.emojis\" [innerHtml]=\"emoji.html || ''\">\r\n\t\t\t\t</a>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>",
|
|
6764
|
-
styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:opacity .4s ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width:500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}"]
|
|
6764
|
+
styles: [":host{background:#111;color:#fff;border:1px solid #333;border-radius:5px;padding:.5em;width:calc(9*(32px + 1em));max-width:calc(100vw - 1.5em - 5px)}.selector{display:flex;flex-direction:column}.categories a{opacity:.25;transition:opacity .4s ease-in-out}.categories a:hover{opacity:.5}.categories a.active{opacity:1}.emoji-list{flex-grow:1;overflow-y:auto;height:20em}.emoji-list a{display:inline-block;padding:2px;margin:4px;background-color:#111}.emoji-list a ::ng-deep .emoji{width:32px;height:32px}.emoji-list a:hover{background-color:#333}.search-box{display:flex;align-items:baseline}.search-box mat-form-field{flex-grow:1}@media (max-width:500px){.selector{flex-direction:row;height:27em}.emoji-list{height:auto}}:host-context(.banta-mobile) .selector{flex-direction:row;height:27em}:host-context(.banta-mobile) .emoji-list{height:auto}"]
|
|
6765
6765
|
},] }
|
|
6766
6766
|
];
|
|
6767
6767
|
EmojiSelectorPanelComponent.ctorParameters = () => [
|
|
@@ -6771,8 +6771,10 @@ EmojiSelectorPanelComponent.propDecorators = {
|
|
|
6771
6771
|
selected: [{ type: Output }]
|
|
6772
6772
|
};
|
|
6773
6773
|
|
|
6774
|
+
/// <reference types="@types/resize-observer-browser" />
|
|
6774
6775
|
class EmojiSelectorButtonComponent {
|
|
6775
|
-
constructor() {
|
|
6776
|
+
constructor(elementRef) {
|
|
6777
|
+
this.elementRef = elementRef;
|
|
6776
6778
|
this._selected = new Subject();
|
|
6777
6779
|
this.showEmojiPanel = false;
|
|
6778
6780
|
}
|
|
@@ -6783,8 +6785,14 @@ class EmojiSelectorButtonComponent {
|
|
|
6783
6785
|
this.removeListener();
|
|
6784
6786
|
this.panelElement.nativeElement.remove();
|
|
6785
6787
|
}
|
|
6788
|
+
get widthConstrained() { return this.width < 700; }
|
|
6786
6789
|
ngAfterViewInit() {
|
|
6787
|
-
|
|
6790
|
+
}
|
|
6791
|
+
putPanelAtRoot() {
|
|
6792
|
+
// If we are in full-screen, placing the panel outside of the full-screen element will result in it
|
|
6793
|
+
// always being behind said full-screen element, so we need to ensure we never place it further up the
|
|
6794
|
+
// stack.
|
|
6795
|
+
let root = document.fullscreenElement || document.body.querySelector('[ng-version]') || document.body;
|
|
6788
6796
|
root.appendChild(this.panelElement.nativeElement);
|
|
6789
6797
|
}
|
|
6790
6798
|
removeListener() {
|
|
@@ -6792,11 +6800,17 @@ class EmojiSelectorButtonComponent {
|
|
|
6792
6800
|
window.removeEventListener('resize', this.resizeListener);
|
|
6793
6801
|
}
|
|
6794
6802
|
place() {
|
|
6803
|
+
// Not currently used as it can't be easily done handling all
|
|
6804
|
+
// scrolling corner cases.
|
|
6805
|
+
this.putPanelAtRoot();
|
|
6795
6806
|
let pos = this.buttonElement.nativeElement.getBoundingClientRect();
|
|
6796
6807
|
let size = this.panelElement.nativeElement.getBoundingClientRect();
|
|
6797
6808
|
let left = window.scrollX + pos.left + pos.width - size.width;
|
|
6798
6809
|
if (left < 0)
|
|
6799
6810
|
left = (window.scrollX + window.innerWidth) / 2 - size.width / 2;
|
|
6811
|
+
let scrollY = window.scrollY;
|
|
6812
|
+
if (document.fullscreenElement) {
|
|
6813
|
+
}
|
|
6800
6814
|
Object.assign(this.panelElement.nativeElement.style, {
|
|
6801
6815
|
top: `${window.scrollY + pos.top + pos.height}px`,
|
|
6802
6816
|
left: `${Math.max(0, left)}px`
|
|
@@ -6808,13 +6822,32 @@ class EmojiSelectorButtonComponent {
|
|
|
6808
6822
|
return;
|
|
6809
6823
|
}
|
|
6810
6824
|
this.showEmojiPanel = true;
|
|
6811
|
-
this.place();
|
|
6825
|
+
//this.place();
|
|
6812
6826
|
setTimeout(() => {
|
|
6813
|
-
|
|
6827
|
+
let onResize = () => {
|
|
6814
6828
|
if (!this.showEmojiPanel)
|
|
6815
6829
|
return;
|
|
6816
|
-
this.
|
|
6830
|
+
this.width = window.innerWidth;
|
|
6831
|
+
this.height = window.innerHeight;
|
|
6832
|
+
let edgeOffset = 0;
|
|
6833
|
+
let commentField = this.elementRef.nativeElement.closest(`banta-comment-field`);
|
|
6834
|
+
if (commentField) {
|
|
6835
|
+
let size = commentField.getBoundingClientRect();
|
|
6836
|
+
this.width = size.width;
|
|
6837
|
+
edgeOffset = window.innerWidth - size.right;
|
|
6838
|
+
}
|
|
6839
|
+
let buttonRect = this.buttonElement.nativeElement.getBoundingClientRect();
|
|
6840
|
+
let buttonRight = window.innerWidth - buttonRect.right - edgeOffset - 10;
|
|
6841
|
+
if (this.width < 700) {
|
|
6842
|
+
this.panelElement.nativeElement.style.right = `${-buttonRight}px`;
|
|
6843
|
+
}
|
|
6844
|
+
else {
|
|
6845
|
+
this.panelElement.nativeElement.style.right = '';
|
|
6846
|
+
}
|
|
6847
|
+
this.panelElement.nativeElement.style.maxWidth = `${this.width - 15}px`;
|
|
6817
6848
|
};
|
|
6849
|
+
this.resizeListener = onResize;
|
|
6850
|
+
onResize();
|
|
6818
6851
|
this.clickListener = (ev) => {
|
|
6819
6852
|
let parent = ev.target;
|
|
6820
6853
|
let isInDialog = false;
|
|
@@ -6857,8 +6890,8 @@ EmojiSelectorButtonComponent.decorators = [
|
|
|
6857
6890
|
|
|
6858
6891
|
emoji-selector-panel {
|
|
6859
6892
|
position: absolute;
|
|
6860
|
-
|
|
6861
|
-
right: 0;
|
|
6893
|
+
top: 2.5em;
|
|
6894
|
+
right: 0;
|
|
6862
6895
|
opacity: 0;
|
|
6863
6896
|
pointer-events: none;
|
|
6864
6897
|
z-index: 10;
|
|
@@ -6872,30 +6905,17 @@ EmojiSelectorButtonComponent.decorators = [
|
|
|
6872
6905
|
button {
|
|
6873
6906
|
color: #666
|
|
6874
6907
|
}
|
|
6875
|
-
|
|
6876
|
-
/* :host.bottom-left emoji-selector-panel {
|
|
6877
|
-
right: auto;
|
|
6878
|
-
left: 0;
|
|
6879
|
-
}
|
|
6880
|
-
|
|
6881
|
-
:host.top-right emoji-selector-panel {
|
|
6882
|
-
top: 2.4em;
|
|
6883
|
-
bottom: auto;
|
|
6884
|
-
}
|
|
6885
|
-
|
|
6886
|
-
:host.top-left emoji-selector-panel {
|
|
6887
|
-
top: 2.4em;
|
|
6888
|
-
bottom: auto;
|
|
6889
|
-
left: 0;
|
|
6890
|
-
right: auto;
|
|
6891
|
-
} */
|
|
6892
6908
|
`]
|
|
6893
6909
|
},] }
|
|
6894
6910
|
];
|
|
6911
|
+
EmojiSelectorButtonComponent.ctorParameters = () => [
|
|
6912
|
+
{ type: ElementRef }
|
|
6913
|
+
];
|
|
6895
6914
|
EmojiSelectorButtonComponent.propDecorators = {
|
|
6896
6915
|
selected: [{ type: Output }],
|
|
6897
6916
|
panelElement: [{ type: ViewChild, args: ['panel', { read: ElementRef },] }],
|
|
6898
|
-
buttonElement: [{ type: ViewChild, args: ['button', { read: ElementRef },] }]
|
|
6917
|
+
buttonElement: [{ type: ViewChild, args: ['button', { read: ElementRef },] }],
|
|
6918
|
+
widthConstrained: [{ type: HostBinding, args: ['class.width-constrained',] }]
|
|
6899
6919
|
};
|
|
6900
6920
|
|
|
6901
6921
|
const COMPONENTS$1 = [
|
|
@@ -8048,15 +8068,17 @@ CommentViewComponent.propDecorators = {
|
|
|
8048
8068
|
sortOrderChanged: [{ type: Output }]
|
|
8049
8069
|
};
|
|
8050
8070
|
|
|
8071
|
+
/// <reference types="@types/resize-observer-browser" />
|
|
8051
8072
|
/**
|
|
8052
8073
|
* Comments component
|
|
8053
8074
|
*/
|
|
8054
8075
|
class BantaCommentsComponent {
|
|
8055
|
-
constructor(backend, elementRef, activatedRoute, matSnackBar) {
|
|
8076
|
+
constructor(backend, elementRef, activatedRoute, matSnackBar, ngZone) {
|
|
8056
8077
|
this.backend = backend;
|
|
8057
8078
|
this.elementRef = elementRef;
|
|
8058
8079
|
this.activatedRoute = activatedRoute;
|
|
8059
8080
|
this.matSnackBar = matSnackBar;
|
|
8081
|
+
this.ngZone = ngZone;
|
|
8060
8082
|
// Loading Screen
|
|
8061
8083
|
this._loadingMessage = '';
|
|
8062
8084
|
this.loadingMessageVisible = false;
|
|
@@ -8176,8 +8198,22 @@ class BantaCommentsComponent {
|
|
|
8176
8198
|
}
|
|
8177
8199
|
}
|
|
8178
8200
|
}
|
|
8201
|
+
get isMobileSized() { return this.width < 500; }
|
|
8202
|
+
ngAfterViewInit() {
|
|
8203
|
+
let callback = () => {
|
|
8204
|
+
let size = this.elementRef.nativeElement.getBoundingClientRect();
|
|
8205
|
+
this.ngZone.run(() => {
|
|
8206
|
+
this.width = size.width;
|
|
8207
|
+
this.height = size.height;
|
|
8208
|
+
});
|
|
8209
|
+
};
|
|
8210
|
+
this.resizeObserver = new ResizeObserver(callback);
|
|
8211
|
+
this.resizeObserver.observe(this.elementRef.nativeElement);
|
|
8212
|
+
callback();
|
|
8213
|
+
}
|
|
8179
8214
|
ngOnDestroy() {
|
|
8180
8215
|
this._subs.unsubscribe();
|
|
8216
|
+
this.resizeObserver.disconnect();
|
|
8181
8217
|
}
|
|
8182
8218
|
setSourceFromTopicID(topicID) {
|
|
8183
8219
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -8515,16 +8551,18 @@ BantaCommentsComponent.decorators = [
|
|
|
8515
8551
|
{ type: Component, args: [{
|
|
8516
8552
|
selector: 'banta-comments',
|
|
8517
8553
|
template: "<ng-container *ngIf=\"loading\">\r\n <div class=\"loading-screen\" [class.visible]=\"showLoadingScreen\">\r\n <h1>Loading Comments</h1>\r\n <div>\r\n <mat-spinner [diameter]=\"300\" [strokeWidth]=\"2\"></mat-spinner>\r\n </div>\r\n\r\n <p class=\"loading-message\" [class.visible]=\"loadingMessageVisible\">{{loadingMessage}}</p>\r\n </div>\r\n</ng-container>\r\n<ng-container *ngIf=\"!loading\">\r\n <div class=\"focused\" [class.visible]=\"selectedMessageVisible\" *ngIf=\"selectedMessage\">\r\n\r\n <div>\r\n <a mat-button href=\"javascript:;\" (click)=\"unselectMessage()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Latest Comments\r\n </a>\r\n </div>\r\n\r\n <banta-comment\r\n [message]=\"selectedMessage\"\r\n [liking]=\"selectedMessage.transientState.liking\"\r\n [mine]=\"user?.id === selectedMessage.user?.id\"\r\n [permissions]=\"source?.permissions\"\r\n [showReplyAction]=\"false\"\r\n [editing]=\"selectedMessage.transientState.editing\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (editStarted)=\"startEditing(selectedMessage)\"\r\n (editEnded)=\"selectedMessage.transientState.editing = false\"\r\n (edited)=\"saveEdit(selectedMessage, $event)\"\r\n (userSelected)=\"selectMessageUser(selectedMessage)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (liked)=\"likeMessage(source, selectedMessage)\"\r\n (unliked)=\"unlikeMessage(source, selectedMessage)\"\r\n (reported)=\"reportMessage(selectedMessage)\"\r\n (selected)=\"selectMessage(selectedMessage)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage(selectedMessage)\"\r\n ></banta-comment>\r\n\r\n <div class=\"replies\">\r\n\r\n <ng-container *ngIf=\"!selectedMessageThread\">\r\n <div class=\"loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedMessageThread\">\r\n <banta-comment-view\r\n [source]=\"selectedMessageThread\"\r\n [allowReplies]=\"false\"\r\n [fixedHeight]=\"false\"\r\n [showEmptyState]=\"false\"\r\n [newestLast]=\"true\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (liked)=\"likeMessage(selectedMessageThread, $event)\"\r\n (unliked)=\"unlikeMessage(selectedMessageThread, $event)\"\r\n (messageEdited)=\"editMessage(selectedMessageThread, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n\r\n <banta-comment-field\r\n [sendLabel]=\"replyLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n (signInSelected)=\"showSignIn()\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n [source]=\"selectedMessageThread\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [signInLabel]=\"signInLabel\"\r\n [permissionDeniedLabel]=\"source?.permissions?.canPostErrorMessage || permissionDeniedLabel\"\r\n (permissionDeniedError)=\"handlePermissionDenied($event)\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [user]=\"user\"\r\n [label]=\"postReplyLabel\"\r\n [submit]=\"sendReply\"\r\n [allowAttachments]=\"allowAttachments\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n >\r\n <ng-content select=\".reply-send-options\"></ng-content>\r\n </banta-comment-field>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main\" [class.hidden]=\"selectedMessage\">\r\n <banta-comment-field\r\n [source]=\"source\"\r\n [user]=\"user\"\r\n [sendLabel]=\"sendLabel\"\r\n [sendingLabel]=\"sendingLabel\"\r\n [signInLabel]=\"signInLabel\"\r\n [canComment]=\"source?.permissions?.canPost\"\r\n [hashtags]=\"hashtags\"\r\n [participants]=\"participants\"\r\n [label]=\"postCommentLabel\"\r\n (editAvatarSelected)=\"showEditAvatar()\"\r\n (signInSelected)=\"showSignIn()\"\r\n [permissionDeniedLabel]=\"source?.permissions?.canPostErrorMessage || permissionDeniedLabel\"\r\n (permissionDeniedError)=\"handlePermissionDenied($event)\"\r\n [shouldInterceptMessageSend]=\"shouldInterceptMessageSend\"\r\n [submit]=\"sendMessage\"\r\n [allowAttachments]=\"allowAttachments\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n >\r\n \r\n </banta-comment-field>\r\n\r\n <banta-comment-sort\r\n [(sort)]=\"sortOrder\"></banta-comment-sort>\r\n\r\n <banta-comment-view\r\n [class.faded]=\"selectedMessage\"\r\n [source]=\"source\"\r\n [fixedHeight]=\"fixedHeight\"\r\n [maxMessages]=\"maxMessages\"\r\n [maxVisibleMessages]=\"maxVisibleMessages\"\r\n [genericAvatarUrl]=\"genericAvatarUrl\"\r\n (userSelected)=\"selectMessageUser($event)\"\r\n (sortOrderChanged)=\"sortOrder = $event\"\r\n (selected)=\"selectMessage($event)\"\r\n (liked)=\"likeMessage(source, $event)\"\r\n (unliked)=\"unlikeMessage(source, $event)\"\r\n (messageEdited)=\"editMessage(source, $event.message, $event.newMessage)\"\r\n (reported)=\"reportMessage($event)\"\r\n (usernameSelected)=\"selectUsername($event)\"\r\n (avatarSelected)=\"selectAvatar($event)\"\r\n (shared)=\"shareMessage($event)\"\r\n (deleted)=\"deleteMessage($event)\"\r\n ></banta-comment-view>\r\n </div>\r\n</ng-container>\r\n",
|
|
8518
|
-
styles: [":host{display:flex;flex-direction:column}@-webkit-keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}@keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}.focused{-webkit-animation-name:select-comment;animation-name:select-comment;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.focused .replies{margin-top:1em;margin-left:4em}banta-comment-view{opacity:1;transition:opacity .4s ease-in-out}banta-comment-view.faded{opacity:.25}.loading{display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:0 auto;min-height:16em}.main.hidden{display:none}
|
|
8554
|
+
styles: [":host{display:flex;flex-direction:column}@-webkit-keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}@keyframes select-comment{0%{transform:scale(1.15)}to{transform:scale(1)}}.focused{-webkit-animation-name:select-comment;animation-name:select-comment;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.focused .replies{margin-top:1em;margin-left:4em}banta-comment-view{opacity:1;transition:opacity .4s ease-in-out}banta-comment-view.faded{opacity:.25}.loading{display:block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:0 auto;min-height:16em}.main.hidden{display:none}.loading-screen{text-align:center;opacity:0;transition:opacity .25s ease-in-out}.loading-screen.visible{opacity:1}.loading-screen h1{font-weight:100}.loading-screen mat-spinner{margin:5em auto}.loading-screen .loading-message{opacity:0;transition:opacity .25s ease-in-out;width:500px;max-width:100%;margin:0 auto}.loading-screen .loading-message.visible{opacity:1}banta-comment-sort{margin:0 0 0 auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:block}@media (max-width:500px){.focused .replies{margin-left:0}banta-comment-sort{margin:0;width:100%}}:host-context(.banta-mobile) .focused .replies{margin-left:0}:host-context(.banta-mobile) banta-comment-sort{margin:0;width:100%}"]
|
|
8519
8555
|
},] }
|
|
8520
8556
|
];
|
|
8521
8557
|
BantaCommentsComponent.ctorParameters = () => [
|
|
8522
8558
|
{ type: ChatBackendBase },
|
|
8523
8559
|
{ type: ElementRef },
|
|
8524
8560
|
{ type: ActivatedRoute },
|
|
8525
|
-
{ type: MatSnackBar }
|
|
8561
|
+
{ type: MatSnackBar },
|
|
8562
|
+
{ type: NgZone }
|
|
8526
8563
|
];
|
|
8527
8564
|
BantaCommentsComponent.propDecorators = {
|
|
8565
|
+
isMobileSized: [{ type: HostBinding, args: ['class.banta-mobile',] }],
|
|
8528
8566
|
loadingMessages: [{ type: Input }],
|
|
8529
8567
|
signInLabel: [{ type: Input }],
|
|
8530
8568
|
sendLabel: [{ type: Input }],
|
|
@@ -8864,7 +8902,7 @@ CommentFieldComponent.decorators = [
|
|
|
8864
8902
|
{ type: Component, args: [{
|
|
8865
8903
|
selector: 'banta-comment-field',
|
|
8866
8904
|
template: "<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n <div class=\"avatar-container\">\r\n <a href=\"javascript:;\"\r\n class=\"avatar\"\r\n (click)=\"showEditAvatar()\"\r\n [style.background-image]=\"'url(' + userAvatarUrl + ')'\"\r\n ></a>\r\n </div>\r\n <div class=\"text-container\">\r\n <div class=\"field-container\">\r\n <div class=\"field-row\">\r\n <mat-form-field appearance=\"outline\" floatLabel=\"always\">\r\n <mat-label>{{label}}</mat-label>\r\n <textarea\r\n #textarea\r\n name=\"message\"\r\n [placeholder]=\"placeholder\"\r\n matInput\r\n cdkTextareaAutosize\r\n (keydown)=\"onKeyDown($event)\"\r\n (blur)=\"onBlur()\"\r\n [disabled]=\"sending\"\r\n [(ngModel)]=\"text\"></textarea>\r\n </mat-form-field>\r\n <div class=\"options-line\">\r\n <mat-spinner *ngIf=\"sending\" class=\"icon loading\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n <div *ngIf=\"sendError\" class=\"error-message\" [class.expanded]=\"expandError\" [matTooltip]=\"sendError.message\" (click)=\"alertError()\">\r\n <mat-icon *ngIf=\"sendError\">error</mat-icon>\r\n {{sendError.message}}\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div class=\"custom\">\r\n <ng-content></ng-content>\r\n </div>\r\n <banta-attachment-button (addedAttachment)=\"addedAttachment($event)\" *ngIf=\"allowAttachments\"></banta-attachment-button>\r\n <emoji-selector-button (selected)=\"insertEmoji($event)\"></emoji-selector-button>\r\n </div>\r\n \r\n </div>\r\n <div #autocompleteContainer class=\"autocomplete-container\">\r\n <div #autocomplete class=\"autocomplete\" [class.visible]=\"autocompleteVisible\">\r\n\r\n <div>\r\n <strong>{{completionPrefix}}</strong>...\r\n </div>\r\n <a\r\n mat-button\r\n *ngFor=\"let option of autocompleteOptions; index as index\"\r\n (click)=\"activateAutoComplete(option)\"\r\n [class.active]=\"autoCompleteSelected === index\"\r\n >\r\n {{option.label}}\r\n </a>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"chatMessageAttachments && chatMessageAttachments.length\" class=\"message-attachments-container\">\r\n <div *ngFor=\"let attachment of chatMessageAttachments; index as attachmentIndex\"\r\n class=\"message-attachment\">\r\n <button (click)=\"removeAttachment(attachmentIndex)\" mat-mini-fab color=\"primary\" class=\"remove-img\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <img [src]=\"attachment.url\" alt=\"Message Attachment\">\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"actions\">\r\n <ng-container *ngIf=\"!user\">\r\n <button\r\n mat-raised-button\r\n color=\"primary\"\r\n type=\"button\"\r\n (click)=\"showSignIn()\"\r\n >{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button\r\n mat-raised-button\r\n class=\"send\"\r\n color=\"primary\"\r\n [disabled]=\"canComment && ((!text && !chatMessageAttachments.length) || sending)\"\r\n >\r\n <ng-container *ngIf=\"canComment\">\r\n <mat-icon *ngIf=\"!sending\">chevron_right</mat-icon>\r\n <mat-spinner *ngIf=\"sending\" class=\"icon\" diameter=\"18\" strokeWidth=\"2\"></mat-spinner>\r\n </ng-container>\r\n <span class=\"label\">\r\n <ng-container *ngIf=\"!canComment\">\r\n {{permissionDeniedLabel}}\r\n </ng-container>\r\n <ng-container *ngIf=\"canComment\">\r\n <ng-container *ngIf=\"!sending\">\r\n {{sendLabel}}\r\n </ng-container>\r\n <ng-container *ngIf=\"sending\">\r\n {{sendingLabel}}\r\n </ng-container>\r\n </ng-container>\r\n </span>\r\n </button>\r\n </ng-container>\r\n </div>\r\n</form>",
|
|
8867
|
-
styles: ["@-webkit-keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}:host{margin:0 2em 0 0;display:block;-webkit-animation-name:comment-field-appear;animation-name:comment-field-appear;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-delay:.4s;animation-delay:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.avatar-container{width:calc(48px + 1.75em);display:flex;justify-content:flex-end;flex-shrink:0}.avatar-container .avatar{width:48px;height:48px;background:#000;border-radius:100%;background-size:cover;background-repeat:no-repeat;background-position:50%;margin-top:.75em;margin-right:.75em}form{display:flex;padding:.5em;align-items:center}form .text-container{position:relative;display:flex;flex-grow:1;min-width:0}form .text-container textarea{font-size:14pt;width:100%}form .text-container textarea[disabled]{opacity:.5}form .text-container mat-spinner.loading{position:absolute;left:.5em;bottom:.5em}form .text-container .options-line{display:flex;align-items:center}form .text-container .options-line>*{flex-shrink:0}form .text-container .options-line .error-message{left:.5em;bottom:.5em;color:#683333;overflow-x:hidden;max-width:1.5em;white-space:nowrap;transition:max-width 2s ease-in-out;text-overflow:ellipsis;overflow:hidden;flex-shrink:1}form .text-container .options-line .error-message.expanded,form .text-container .options-line .error-message:hover{max-width:100%}form .text-container .options-line .error-message mat-icon{vertical-align:middle}form input[type=text]{background:#000;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em;flex-shrink:0}form button{display:block;margin:0 0 0 auto}form.new-message{display:flex;align-items:flex-start;min-width:0}form.new-message .field-container{flex-grow:1;display:flex;flex-direction:column;min-width:0}form.new-message mat-form-field{width:100%}form.new-message mat-form-field ::ng-deep .mat-form-field-wrapper{padding-bottom:0}form.new-message button{margin:1.25em 0 0}button.send{min-width:9em}textarea{max-height:7em}.autocomplete-container{width:calc(100% - 2em);position:relative;pointer-events:none;top:-2em}.autocomplete{visibility:hidden;pointer-events:none;position:absolute;background:#333;padding:.5em;display:flex;flex-direction:column;z-index:100}.autocomplete.visible{visibility:visible;pointer-events:auto}.autocomplete a{width:100%;text-align:left}.autocomplete a.active{background:#555}@media (max-width:500px){:host{margin:0}.avatar-container{width:auto;flex-shrink:0}.avatar-container .avatar{width:32px;height:32px;margin-top:1.5em}button.send{min-width:auto;margin-top:1.5em}button.send .label{display:none}}.message-attachments-container{display:flex;gap:20px}.message-attachments-container .message-attachment{width:300px;position:relative}.message-attachments-container .message-attachment img{width:300px;border-radius:10px}.message-attachments-container .message-attachment .remove-img{position:absolute;right:10px;top:10px;margin:0}.field-row{position:relative}"]
|
|
8905
|
+
styles: ["@-webkit-keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes comment-field-appear{0%{transform:translateY(128px);opacity:0}to{transform:translate(0);opacity:1}}:host{margin:0 2em 0 0;display:block;-webkit-animation-name:comment-field-appear;animation-name:comment-field-appear;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-delay:.4s;animation-delay:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both;position:relative;z-index:10}.avatar-container{width:calc(48px + 1.75em);display:flex;justify-content:flex-end;flex-shrink:0}.avatar-container .avatar{width:48px;height:48px;background:#000;border-radius:100%;background-size:cover;background-repeat:no-repeat;background-position:50%;margin-top:.75em;margin-right:.75em}form{display:flex;padding:.5em;align-items:center}form .text-container{position:relative;display:flex;flex-grow:1;min-width:0}form .text-container textarea{font-size:14pt;width:100%}form .text-container textarea[disabled]{opacity:.5}form .text-container mat-spinner.loading{position:absolute;left:.5em;bottom:.5em}form .text-container .options-line{display:flex;align-items:center}form .text-container .options-line>*{flex-shrink:0}form .text-container .options-line .error-message{left:.5em;bottom:.5em;color:#683333;overflow-x:hidden;max-width:1.5em;white-space:nowrap;transition:max-width 2s ease-in-out;text-overflow:ellipsis;overflow:hidden;flex-shrink:1}form .text-container .options-line .error-message.expanded,form .text-container .options-line .error-message:hover{max-width:100%}form .text-container .options-line .error-message mat-icon{vertical-align:middle}form input[type=text]{background:#000;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em;flex-shrink:0}form button{display:block;margin:0 0 0 auto}form.new-message{display:flex;align-items:flex-start;min-width:0}form.new-message .field-container{flex-grow:1;display:flex;flex-direction:column;min-width:0}form.new-message mat-form-field{width:100%}form.new-message mat-form-field ::ng-deep .mat-form-field-wrapper{padding-bottom:0}form.new-message button{margin:1.25em 0 0}button.send{min-width:9em}textarea{max-height:7em}.autocomplete-container{width:calc(100% - 2em);position:relative;pointer-events:none;top:-2em}.autocomplete{visibility:hidden;pointer-events:none;position:absolute;background:#333;padding:.5em;display:flex;flex-direction:column;z-index:100}.autocomplete.visible{visibility:visible;pointer-events:auto}.autocomplete a{width:100%;text-align:left}.autocomplete a.active{background:#555}@media (max-width:500px){:host{margin:0}.avatar-container{width:auto;flex-shrink:0}.avatar-container .avatar{width:32px;height:32px;margin-top:1.5em}button.send{min-width:auto;margin-top:1.5em}button.send .label{display:none}}:host-context(.banta-mobile) :host{margin:0}:host-context(.banta-mobile) .avatar-container{width:auto;flex-shrink:0}:host-context(.banta-mobile) .avatar-container .avatar{width:32px;height:32px;margin-top:1.5em}:host-context(.banta-mobile) button.send{min-width:auto;margin-top:1.5em}:host-context(.banta-mobile) button.send .label{display:none}.message-attachments-container{display:flex;gap:20px}.message-attachments-container .message-attachment{width:300px;position:relative}.message-attachments-container .message-attachment img{width:300px;border-radius:10px}.message-attachments-container .message-attachment .remove-img{position:absolute;right:10px;top:10px;margin:0}.field-row{position:relative}"]
|
|
8868
8906
|
},] }
|
|
8869
8907
|
];
|
|
8870
8908
|
CommentFieldComponent.propDecorators = {
|