stream-chat-angular 3.0.0-beta.7 → 3.0.0-beta.8
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/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +94 -81
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/message-actions-box/message-actions-box.component.js +7 -8
- package/esm2015/lib/message-input/message-input.component.js +15 -2
- package/esm2015/lib/types.js +1 -1
- package/fesm2015/stream-chat-angular.js +91 -79
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/message-actions-box/message-actions-box.component.d.ts +3 -2
- package/lib/message-input/message-input.component.d.ts +6 -1
- package/lib/types.d.ts +1 -0
- package/package.json +2 -2
- package/src/assets/styles/css/index.css +1 -1
- package/src/assets/styles/css/index.css.map +1 -1
- package/src/assets/styles/scss/Avatar.scss +1 -1
- package/src/assets/styles/scss/ChannelHeader.scss +2 -0
- package/src/assets/styles/scss/VirtualMessage.scss +5 -0
- package/src/assets/version.ts +1 -1
package/assets/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "3.0.0-beta.
|
|
1
|
+
export declare const version = "3.0.0-beta.8";
|
|
@@ -354,7 +354,7 @@
|
|
|
354
354
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
var version = '3.0.0-beta.
|
|
357
|
+
var version = '3.0.0-beta.8';
|
|
358
358
|
|
|
359
359
|
/**
|
|
360
360
|
* The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](../components/NotificationListComponent.mdx) component displays the currently active notifications.
|
|
@@ -2490,6 +2490,79 @@
|
|
|
2490
2490
|
type: i0.Input
|
|
2491
2491
|
}] } });
|
|
2492
2492
|
|
|
2493
|
+
/**
|
|
2494
|
+
* The `Modal` component displays its content in an overlay. The modal can be closed with a close button, if the user clicks outside of the modal content, or if the escape button is pressed. The modal can also be closed from outside.
|
|
2495
|
+
*/
|
|
2496
|
+
var ModalComponent = /** @class */ (function () {
|
|
2497
|
+
function ModalComponent() {
|
|
2498
|
+
var _this = this;
|
|
2499
|
+
/**
|
|
2500
|
+
* If `true` the modal will be displayed, if `false` the modal will be hidden
|
|
2501
|
+
*/
|
|
2502
|
+
this.isOpen = false;
|
|
2503
|
+
/**
|
|
2504
|
+
* Emits `true` if the modal becomes visible, and `false` if the modal is closed.
|
|
2505
|
+
*/
|
|
2506
|
+
this.isOpenChange = new i0.EventEmitter();
|
|
2507
|
+
this.watchForEscPress = function (event) {
|
|
2508
|
+
if (event.key === 'Escape') {
|
|
2509
|
+
_this.close();
|
|
2510
|
+
}
|
|
2511
|
+
};
|
|
2512
|
+
this.stopWatchForEscPress = function () {
|
|
2513
|
+
window.removeEventListener('keyup', _this.watchForEscPress);
|
|
2514
|
+
};
|
|
2515
|
+
this.watchForOutsideClicks = function (event) {
|
|
2516
|
+
var _a;
|
|
2517
|
+
if (!((_a = _this.innerContainer) === null || _a === void 0 ? void 0 : _a.nativeElement.contains(event.target))) {
|
|
2518
|
+
_this.close();
|
|
2519
|
+
}
|
|
2520
|
+
};
|
|
2521
|
+
}
|
|
2522
|
+
ModalComponent.prototype.ngOnChanges = function (changes) {
|
|
2523
|
+
var _this = this;
|
|
2524
|
+
if (changes.isOpen) {
|
|
2525
|
+
if (this.isOpen) {
|
|
2526
|
+
window.addEventListener('keyup', this.watchForEscPress);
|
|
2527
|
+
setTimeout(function () { return window.addEventListener('click', _this.watchForOutsideClicks); }, 0);
|
|
2528
|
+
}
|
|
2529
|
+
else {
|
|
2530
|
+
this.stopWatchForOutsideClicks();
|
|
2531
|
+
this.stopWatchForEscPress();
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
};
|
|
2535
|
+
ModalComponent.prototype.close = function () {
|
|
2536
|
+
this.isOpen = false;
|
|
2537
|
+
this.isOpenChange.emit(false);
|
|
2538
|
+
this.stopWatchForOutsideClicks();
|
|
2539
|
+
this.stopWatchForEscPress();
|
|
2540
|
+
};
|
|
2541
|
+
ModalComponent.prototype.stopWatchForOutsideClicks = function () {
|
|
2542
|
+
window.removeEventListener('click', this.watchForOutsideClicks);
|
|
2543
|
+
};
|
|
2544
|
+
return ModalComponent;
|
|
2545
|
+
}());
|
|
2546
|
+
ModalComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: ModalComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
2547
|
+
ModalComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ModalComponent, selector: "stream-modal", inputs: { isOpen: "isOpen", content: "content" }, outputs: { isOpenChange: "isOpenChange" }, viewQueries: [{ propertyName: "innerContainer", first: true, predicate: ["modalInner"], descendants: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<div\n data-testid=\"modal\"\n class=\"str-chat__modal str-chat__modal--{{ isOpen ? 'open' : 'close' }}\"\n>\n <div\n data-testid=\"close\"\n class=\"str-chat__modal__close-button\"\n (click)=\"close()\"\n (keyup.enter)=\"close()\"\n translate\n >\n streamChat.Close\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n <div class=\"str-chat__modal__inner\" #modalInner>\n <ng-container *ngIf=\"content; else elseContent\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n <ng-template #elseContent>\n <ng-content></ng-content>\n </ng-template>\n </div>\n</div>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }], directives: [{ type: i2__namespace.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
2548
|
+
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: ModalComponent, decorators: [{
|
|
2549
|
+
type: i0.Component,
|
|
2550
|
+
args: [{
|
|
2551
|
+
selector: 'stream-modal',
|
|
2552
|
+
templateUrl: './modal.component.html',
|
|
2553
|
+
styles: [],
|
|
2554
|
+
}]
|
|
2555
|
+
}], ctorParameters: function () { return []; }, propDecorators: { isOpen: [{
|
|
2556
|
+
type: i0.Input
|
|
2557
|
+
}], content: [{
|
|
2558
|
+
type: i0.Input
|
|
2559
|
+
}], isOpenChange: [{
|
|
2560
|
+
type: i0.Output
|
|
2561
|
+
}], innerContainer: [{
|
|
2562
|
+
type: i0.ViewChild,
|
|
2563
|
+
args: ['modalInner']
|
|
2564
|
+
}] } });
|
|
2565
|
+
|
|
2493
2566
|
var textareaInjectionToken = new i0.InjectionToken('textareaInjectionToken');
|
|
2494
2567
|
|
|
2495
2568
|
var TextareaDirective = /** @class */ (function () {
|
|
@@ -2637,79 +2710,6 @@
|
|
|
2637
2710
|
}]
|
|
2638
2711
|
}], ctorParameters: function () { return []; } });
|
|
2639
2712
|
|
|
2640
|
-
/**
|
|
2641
|
-
* The `Modal` component displays its content in an overlay. The modal can be closed with a close button, if the user clicks outside of the modal content, or if the escape button is pressed. The modal can also be closed from outside.
|
|
2642
|
-
*/
|
|
2643
|
-
var ModalComponent = /** @class */ (function () {
|
|
2644
|
-
function ModalComponent() {
|
|
2645
|
-
var _this = this;
|
|
2646
|
-
/**
|
|
2647
|
-
* If `true` the modal will be displayed, if `false` the modal will be hidden
|
|
2648
|
-
*/
|
|
2649
|
-
this.isOpen = false;
|
|
2650
|
-
/**
|
|
2651
|
-
* Emits `true` if the modal becomes visible, and `false` if the modal is closed.
|
|
2652
|
-
*/
|
|
2653
|
-
this.isOpenChange = new i0.EventEmitter();
|
|
2654
|
-
this.watchForEscPress = function (event) {
|
|
2655
|
-
if (event.key === 'Escape') {
|
|
2656
|
-
_this.close();
|
|
2657
|
-
}
|
|
2658
|
-
};
|
|
2659
|
-
this.stopWatchForEscPress = function () {
|
|
2660
|
-
window.removeEventListener('keyup', _this.watchForEscPress);
|
|
2661
|
-
};
|
|
2662
|
-
this.watchForOutsideClicks = function (event) {
|
|
2663
|
-
var _a;
|
|
2664
|
-
if (!((_a = _this.innerContainer) === null || _a === void 0 ? void 0 : _a.nativeElement.contains(event.target))) {
|
|
2665
|
-
_this.close();
|
|
2666
|
-
}
|
|
2667
|
-
};
|
|
2668
|
-
}
|
|
2669
|
-
ModalComponent.prototype.ngOnChanges = function (changes) {
|
|
2670
|
-
var _this = this;
|
|
2671
|
-
if (changes.isOpen) {
|
|
2672
|
-
if (this.isOpen) {
|
|
2673
|
-
window.addEventListener('keyup', this.watchForEscPress);
|
|
2674
|
-
setTimeout(function () { return window.addEventListener('click', _this.watchForOutsideClicks); }, 0);
|
|
2675
|
-
}
|
|
2676
|
-
else {
|
|
2677
|
-
this.stopWatchForOutsideClicks();
|
|
2678
|
-
this.stopWatchForEscPress();
|
|
2679
|
-
}
|
|
2680
|
-
}
|
|
2681
|
-
};
|
|
2682
|
-
ModalComponent.prototype.close = function () {
|
|
2683
|
-
this.isOpen = false;
|
|
2684
|
-
this.isOpenChange.emit(false);
|
|
2685
|
-
this.stopWatchForOutsideClicks();
|
|
2686
|
-
this.stopWatchForEscPress();
|
|
2687
|
-
};
|
|
2688
|
-
ModalComponent.prototype.stopWatchForOutsideClicks = function () {
|
|
2689
|
-
window.removeEventListener('click', this.watchForOutsideClicks);
|
|
2690
|
-
};
|
|
2691
|
-
return ModalComponent;
|
|
2692
|
-
}());
|
|
2693
|
-
ModalComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: ModalComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
2694
|
-
ModalComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ModalComponent, selector: "stream-modal", inputs: { isOpen: "isOpen", content: "content" }, outputs: { isOpenChange: "isOpenChange" }, viewQueries: [{ propertyName: "innerContainer", first: true, predicate: ["modalInner"], descendants: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<div\n data-testid=\"modal\"\n class=\"str-chat__modal str-chat__modal--{{ isOpen ? 'open' : 'close' }}\"\n>\n <div\n data-testid=\"close\"\n class=\"str-chat__modal__close-button\"\n (click)=\"close()\"\n (keyup.enter)=\"close()\"\n translate\n >\n streamChat.Close\n <stream-icon-placeholder icon=\"close\"></stream-icon-placeholder>\n </div>\n <div class=\"str-chat__modal__inner\" #modalInner>\n <ng-container *ngIf=\"content; else elseContent\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n <ng-template #elseContent>\n <ng-content></ng-content>\n </ng-template>\n </div>\n</div>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }], directives: [{ type: i2__namespace.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
2695
|
-
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: ModalComponent, decorators: [{
|
|
2696
|
-
type: i0.Component,
|
|
2697
|
-
args: [{
|
|
2698
|
-
selector: 'stream-modal',
|
|
2699
|
-
templateUrl: './modal.component.html',
|
|
2700
|
-
styles: [],
|
|
2701
|
-
}]
|
|
2702
|
-
}], ctorParameters: function () { return []; }, propDecorators: { isOpen: [{
|
|
2703
|
-
type: i0.Input
|
|
2704
|
-
}], content: [{
|
|
2705
|
-
type: i0.Input
|
|
2706
|
-
}], isOpenChange: [{
|
|
2707
|
-
type: i0.Output
|
|
2708
|
-
}], innerContainer: [{
|
|
2709
|
-
type: i0.ViewChild,
|
|
2710
|
-
args: ['modalInner']
|
|
2711
|
-
}] } });
|
|
2712
|
-
|
|
2713
2713
|
/**
|
|
2714
2714
|
* The `AttachmentList` compontent displays the attachments of a message
|
|
2715
2715
|
*/
|
|
@@ -2988,6 +2988,7 @@
|
|
|
2988
2988
|
this.initTextarea();
|
|
2989
2989
|
};
|
|
2990
2990
|
MessageInputComponent.prototype.ngOnChanges = function (changes) {
|
|
2991
|
+
var _this = this;
|
|
2991
2992
|
if (changes.message) {
|
|
2992
2993
|
this.attachmentService.resetAttachmentUploads();
|
|
2993
2994
|
if (this.isUpdate) {
|
|
@@ -3011,8 +3012,19 @@
|
|
|
3011
3012
|
if (changes.mode) {
|
|
3012
3013
|
this.setCanSendMessages();
|
|
3013
3014
|
}
|
|
3015
|
+
if (changes.sendMessage$) {
|
|
3016
|
+
if (this.sendMessageSubcription) {
|
|
3017
|
+
this.sendMessageSubcription.unsubscribe();
|
|
3018
|
+
}
|
|
3019
|
+
if (this.sendMessage$) {
|
|
3020
|
+
this.sendMessageSubcription = this.sendMessage$.subscribe(function () { return void _this.messageSent(); });
|
|
3021
|
+
}
|
|
3022
|
+
}
|
|
3014
3023
|
};
|
|
3015
3024
|
MessageInputComponent.prototype.ngOnDestroy = function () {
|
|
3025
|
+
if (this.sendMessageSubcription) {
|
|
3026
|
+
this.sendMessageSubcription.unsubscribe();
|
|
3027
|
+
}
|
|
3016
3028
|
this.subscriptions.forEach(function (s) { return s.unsubscribe(); });
|
|
3017
3029
|
};
|
|
3018
3030
|
MessageInputComponent.prototype.messageSent = function () {
|
|
@@ -3273,7 +3285,7 @@
|
|
|
3273
3285
|
return MessageInputComponent;
|
|
3274
3286
|
}());
|
|
3275
3287
|
MessageInputComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: MessageInputComponent, deps: [{ token: ChannelService }, { token: NotificationService }, { token: AttachmentService }, { token: MessageInputConfigService }, { token: textareaInjectionToken }, { token: i0__namespace.ComponentFactoryResolver }, { token: i0__namespace.ChangeDetectorRef }, { token: ChatClientService }, { token: EmojiInputService }, { token: CustomTemplatesService }], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
3276
|
-
MessageInputComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i3__namespace.AsyncPipe, "translate": i2__namespace.TranslatePipe } });
|
|
3288
|
+
MessageInputComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i3__namespace.AsyncPipe, "translate": i2__namespace.TranslatePipe } });
|
|
3277
3289
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: MessageInputComponent, decorators: [{
|
|
3278
3290
|
type: i0.Component,
|
|
3279
3291
|
args: [{
|
|
@@ -3299,6 +3311,8 @@
|
|
|
3299
3311
|
type: i0.Input
|
|
3300
3312
|
}], message: [{
|
|
3301
3313
|
type: i0.Input
|
|
3314
|
+
}], sendMessage$: [{
|
|
3315
|
+
type: i0.Input
|
|
3302
3316
|
}], messageUpdate: [{
|
|
3303
3317
|
type: i0.Output
|
|
3304
3318
|
}], fileInput: [{
|
|
@@ -3393,6 +3407,7 @@
|
|
|
3393
3407
|
this.isEditModalOpen = false;
|
|
3394
3408
|
this.subscriptions = [];
|
|
3395
3409
|
this.visibleMessageActionItems = [];
|
|
3410
|
+
this.sendMessageSubject = new rxjs.Subject();
|
|
3396
3411
|
this.modalClosed = function () {
|
|
3397
3412
|
_this.isEditModalOpen = false;
|
|
3398
3413
|
_this.isEditing.emit(false);
|
|
@@ -3476,6 +3491,7 @@
|
|
|
3476
3491
|
enabledActions.indexOf('delete-any-message') !== -1; },
|
|
3477
3492
|
},
|
|
3478
3493
|
];
|
|
3494
|
+
this.sendMessage$ = this.sendMessageSubject.asObservable();
|
|
3479
3495
|
}
|
|
3480
3496
|
MessageActionsBoxComponent.prototype.ngOnChanges = function (changes) {
|
|
3481
3497
|
var _this = this;
|
|
@@ -3494,8 +3510,7 @@
|
|
|
3494
3510
|
: actionLabelOrTranslationKey();
|
|
3495
3511
|
};
|
|
3496
3512
|
MessageActionsBoxComponent.prototype.sendClicked = function () {
|
|
3497
|
-
|
|
3498
|
-
(_a = this.messageInput) === null || _a === void 0 ? void 0 : _a.messageSent();
|
|
3513
|
+
this.sendMessageSubject.next();
|
|
3499
3514
|
};
|
|
3500
3515
|
MessageActionsBoxComponent.prototype.getMessageInputContext = function () {
|
|
3501
3516
|
return {
|
|
@@ -3506,6 +3521,7 @@
|
|
|
3506
3521
|
isMultipleFileUploadEnabled: undefined,
|
|
3507
3522
|
mentionScope: undefined,
|
|
3508
3523
|
mode: undefined,
|
|
3524
|
+
sendMessage$: this.sendMessage$,
|
|
3509
3525
|
};
|
|
3510
3526
|
};
|
|
3511
3527
|
MessageActionsBoxComponent.prototype.getEditModalContext = function () {
|
|
@@ -3527,7 +3543,7 @@
|
|
|
3527
3543
|
return MessageActionsBoxComponent;
|
|
3528
3544
|
}());
|
|
3529
3545
|
MessageActionsBoxComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: MessageActionsBoxComponent, deps: [{ token: ChatClientService }, { token: NotificationService }, { token: ChannelService }, { token: CustomTemplatesService }], target: i0__namespace.ɵɵFactoryTarget.Component });
|
|
3530
|
-
MessageActionsBoxComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "
|
|
3546
|
+
MessageActionsBoxComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0__namespace, template: "<div\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box\"\n [class.str-chat__message-actions-box--open]=\"isOpen\"\n [class.str-chat__message-actions-box--mine]=\"isMine\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageActionItemTemplate || defaultMessageActionItem;\n context: item\n \"\n ></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n>\n <button [attr.data-testid]=\"actionName + '-action'\" (click)=\"actionHandler()\">\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-container\n *ngTemplateOutlet=\"\n modalTemplate || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageInputTemplate || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button translate data-testid=\"cancel-button\" (click)=\"modalClosed()\">\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$"], outputs: ["messageUpdate"] }, { type: NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i3__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3__namespace.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i2__namespace.TranslatePipe } });
|
|
3531
3547
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0__namespace, type: MessageActionsBoxComponent, decorators: [{
|
|
3532
3548
|
type: i0.Component,
|
|
3533
3549
|
args: [{
|
|
@@ -3547,9 +3563,6 @@
|
|
|
3547
3563
|
type: i0.Output
|
|
3548
3564
|
}], isEditing: [{
|
|
3549
3565
|
type: i0.Output
|
|
3550
|
-
}], messageInput: [{
|
|
3551
|
-
type: i0.ViewChild,
|
|
3552
|
-
args: [MessageInputComponent]
|
|
3553
3566
|
}], modalContent: [{
|
|
3554
3567
|
type: i0.ViewChild,
|
|
3555
3568
|
args: ['modalContent', { static: true }]
|