@datarailsshared/datarailsshared 1.4.95 → 1.4.98
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/datarailsshared-datarailsshared.umd.js +541 -19
- package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
- package/datarailsshared-datarailsshared-1.4.98.tgz +0 -0
- package/datarailsshared-datarailsshared.d.ts +8 -0
- package/datarailsshared-datarailsshared.metadata.json +1 -1
- package/esm2015/datarailsshared-datarailsshared.js +9 -1
- package/esm2015/lib/dr-chat/chat.component.js +58 -0
- package/esm2015/lib/dr-chat/chat.module.js +37 -0
- package/esm2015/lib/dr-chat/dr-chat-form/chat-form.component.js +127 -0
- package/esm2015/lib/dr-chat/dr-chat-message/chat-message.component.js +70 -0
- package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.directive.js +49 -0
- package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.service.js +23 -0
- package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-file/chat-message-file.component.js +47 -0
- package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-rich-text/chat-message-rich-text.component.js +18 -0
- package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-text/chat-message-text.component.js +18 -0
- package/esm2015/lib/dr-dialog/components/dialog-modal-wrapper/dialog-modal-wrapper.component.js +2 -2
- package/esm2015/lib/dr-inputs/dr-select/dr-select.component.js +2 -2
- package/esm2015/lib/models/chat.js +33 -0
- package/esm2015/public-api.js +3 -1
- package/fesm2015/datarailsshared-datarailsshared.js +465 -16
- package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
- package/lib/dr-chat/chat.component.d.ts +21 -0
- package/lib/dr-chat/chat.module.d.ts +2 -0
- package/lib/dr-chat/dr-chat-form/chat-form.component.d.ts +55 -0
- package/lib/dr-chat/dr-chat-message/chat-message.component.d.ts +38 -0
- package/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.directive.d.ts +18 -0
- package/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.service.d.ts +11 -0
- package/lib/dr-chat/dr-chat-message/dr-chat-message-file/chat-message-file.component.d.ts +25 -0
- package/lib/dr-chat/dr-chat-message/dr-chat-message-rich-text/chat-message-rich-text.component.d.ts +12 -0
- package/lib/dr-chat/dr-chat-message/dr-chat-message-text/chat-message-text.component.d.ts +12 -0
- package/lib/models/chat.d.ts +106 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/datarailsshared-datarailsshared-1.4.95.tgz +0 -0
|
@@ -22,6 +22,7 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
|
22
22
|
import { NgSelectModule } from '@ng-select/ng-select';
|
|
23
23
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
24
24
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
25
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
25
26
|
|
|
26
27
|
// import {*} from ""
|
|
27
28
|
class DateTagComponent {
|
|
@@ -250,7 +251,7 @@ const MONTH_FORMATS = {
|
|
|
250
251
|
monthYearA11yLabel: 'MMMM YYYY'
|
|
251
252
|
},
|
|
252
253
|
};
|
|
253
|
-
const ɵ0$
|
|
254
|
+
const ɵ0$7 = MONTH_FORMATS;
|
|
254
255
|
class MonthTagComponent extends AnyTagComponent {
|
|
255
256
|
constructor() {
|
|
256
257
|
super();
|
|
@@ -309,7 +310,7 @@ MonthTagComponent.decorators = [
|
|
|
309
310
|
useClass: MomentDateAdapter,
|
|
310
311
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
311
312
|
},
|
|
312
|
-
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$
|
|
313
|
+
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$7 },
|
|
313
314
|
]
|
|
314
315
|
},] }
|
|
315
316
|
];
|
|
@@ -431,7 +432,7 @@ const WEEK_FORMATS = {
|
|
|
431
432
|
monthYearA11yLabel: 'MMMM YYYY'
|
|
432
433
|
},
|
|
433
434
|
};
|
|
434
|
-
const ɵ0$
|
|
435
|
+
const ɵ0$6 = WEEK_FORMATS;
|
|
435
436
|
class WeekTagComponent extends AnyTagComponent {
|
|
436
437
|
constructor() {
|
|
437
438
|
super();
|
|
@@ -527,7 +528,7 @@ WeekTagComponent.decorators = [
|
|
|
527
528
|
useClass: MomentDateAdapter,
|
|
528
529
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
529
530
|
},
|
|
530
|
-
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$
|
|
531
|
+
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$6 },
|
|
531
532
|
]
|
|
532
533
|
},] }
|
|
533
534
|
];
|
|
@@ -549,7 +550,7 @@ const YEAR_FORMATS = {
|
|
|
549
550
|
monthYearA11yLabel: 'MMMM YYYY'
|
|
550
551
|
},
|
|
551
552
|
};
|
|
552
|
-
const ɵ0$
|
|
553
|
+
const ɵ0$5 = YEAR_FORMATS;
|
|
553
554
|
class YearTagComponent extends AnyTagComponent {
|
|
554
555
|
constructor() {
|
|
555
556
|
super();
|
|
@@ -614,7 +615,7 @@ YearTagComponent.decorators = [
|
|
|
614
615
|
useClass: MomentDateAdapter,
|
|
615
616
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
616
617
|
},
|
|
617
|
-
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$
|
|
618
|
+
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$5 },
|
|
618
619
|
]
|
|
619
620
|
},] }
|
|
620
621
|
];
|
|
@@ -728,7 +729,7 @@ const DAY_FORMATS = {
|
|
|
728
729
|
monthYearA11yLabel: 'MMMM YYYY'
|
|
729
730
|
},
|
|
730
731
|
};
|
|
731
|
-
const ɵ0$
|
|
732
|
+
const ɵ0$4 = DAY_FORMATS;
|
|
732
733
|
class DayTagComponent extends AnyTagComponent {
|
|
733
734
|
constructor() {
|
|
734
735
|
super();
|
|
@@ -779,7 +780,7 @@ DayTagComponent.decorators = [
|
|
|
779
780
|
useClass: MomentDateAdapter,
|
|
780
781
|
deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
|
|
781
782
|
},
|
|
782
|
-
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$
|
|
783
|
+
{ provide: MAT_DATE_FORMATS, useValue: ɵ0$4 },
|
|
783
784
|
]
|
|
784
785
|
},] }
|
|
785
786
|
];
|
|
@@ -1314,7 +1315,7 @@ class DrSelectComponent {
|
|
|
1314
1315
|
DrSelectComponent.decorators = [
|
|
1315
1316
|
{ type: Component, args: [{
|
|
1316
1317
|
selector: 'dr-select',
|
|
1317
|
-
template: "<ng-select [(ngModel)]=\"selectedItem\"\n [items]=\"items\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [multiple]=\"multiple\"\n [addTag]=\"addTag\"\n [appendTo]=\"appendTo\"\n [clearable]=\"clearable\"\n [searchable]=\"searchable\"\n [hideSelected]=\"hideSelected\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [keyDownFn]=\"keyDownFn\"\n [searchFn]=\"searchFn\"\n [isOpen]=\"isOpen\"\n [groupBy]=\"groupBy\"\n [attr.autofocus]=\"autofocus\"\n (change)=\"onChange(selectedItem); change.emit(selectedItem)\"\n (open)=\"open.emit($event)\"\n class=\"dr-select\">\n <ng-template *ngIf=\"optionHeaderTemplate\" ng-header-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionHeaderTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"labelTemplate\" ng-label-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"optionTemplate\" ng-option-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"optionWithDescription\" ng-option-tmp let-item=\"item\">\n <div class=\"dr-select__option-with-desc__wrapper\">\n <div>{{ item.name }}</div>\n <div class=\"dr-select__option-with-desc__description\"\n >{{ item?.description }}</div>\n </div>\n </ng-template>\n <ng-template *ngIf=\"optionFooterTemplate\" ng-footer-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionFooterTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"groupBy\" ng-optgroup-tmp let-item=\"item\">\n {{ item[groupBy] }}\n </ng-template>\n</ng-select>\n",
|
|
1318
|
+
template: "<ng-select [(ngModel)]=\"selectedItem\"\n [items]=\"items\"\n [bindLabel]=\"bindLabel\"\n [bindValue]=\"bindValue\"\n [multiple]=\"multiple\"\n [addTag]=\"addTag\"\n [appendTo]=\"appendTo\"\n [clearable]=\"clearable\"\n [searchable]=\"searchable\"\n [hideSelected]=\"hideSelected\"\n [placeholder]=\"placeholder\"\n [loading]=\"loading\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [keyDownFn]=\"keyDownFn\"\n [searchFn]=\"searchFn\"\n [isOpen]=\"isOpen\"\n [groupBy]=\"groupBy\"\n [attr.autofocus]=\"autofocus\"\n (change)=\"onChange(selectedItem); change.emit(selectedItem)\"\n (open)=\"open.emit($event)\"\n class=\"dr-select\"\n #selectComponent>\n <ng-template *ngIf=\"optionHeaderTemplate\" ng-header-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionHeaderTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"labelTemplate\" ng-label-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"labelTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"optionTemplate\" ng-option-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionTemplate\" [ngTemplateOutletContext]=\"{item: item}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"optionWithDescription\" ng-option-tmp let-item=\"item\">\n <div class=\"dr-select__option-with-desc__wrapper\">\n <div>{{ item.name }}</div>\n <div class=\"dr-select__option-with-desc__description\"\n >{{ item?.description }}</div>\n </div>\n </ng-template>\n <ng-template *ngIf=\"optionFooterTemplate\" ng-footer-tmp let-item=\"item\">\n <ng-container [ngTemplateOutlet]=\"optionFooterTemplate\" [ngTemplateOutletContext]=\"{ item: item, close: selectComponent.close.bind(selectComponent) }\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"groupBy\" ng-optgroup-tmp let-item=\"item\">\n {{ item[groupBy] }}\n </ng-template>\n</ng-select>\n",
|
|
1318
1319
|
providers: [{
|
|
1319
1320
|
provide: NG_VALUE_ACCESSOR,
|
|
1320
1321
|
useExisting: DrSelectComponent,
|
|
@@ -3137,7 +3138,7 @@ class DialogModalWrapperComponent {
|
|
|
3137
3138
|
DialogModalWrapperComponent.decorators = [
|
|
3138
3139
|
{ type: Component, args: [{
|
|
3139
3140
|
selector: 'dr-dialog-modal-wrapper',
|
|
3140
|
-
template: "<div header class=\"header-dialog\">\n <h1 class=\"title-dialog\" data-test=\"modalTitle\">{{dialogData.title}}</h1>\n <i mat-icon-button *ngIf=\"!dialogData.hideCloseBtn\" (click)=\"closeDialog()\" class=\"dr-icon-exit icon-close\"\n data-test=\"xBtn\"></i>\n</div>\n<div *ngIf=\"dialogData.content\" class=\"content-dialog\">\n <ng-container>{{dialogData.content}}</ng-container>\n <span #content class=\"content-anchor\"></span>\n</div>\n<form *ngIf=\"dialogData.fields\" [formGroup]=\"form\" class=\"dr-smart-from\">\n <div class=\"dr-smart-form_wrapper\">\n <div *ngFor=\"let field of dialogData.fields\" class=\"dr-smart-form_group\"\n [ngStyle]=\"{'display': field.isLabelFullWidth ? 'block' : 'flex'}\">\n <label *ngIf=\"field.label\" [ngClass]=\"field.isLabelFullWidth ? 'col-md-12 mb-2' : 'col-md-2'\"\n class=\"label p-0 d-flex align-items-center\">{{field.label}}</label>\n <div class=\"input-group p-0\"\n [ngClass]=\"{'col-md-10': field.label && !field.isLabelFullWidth, 'col-md-12': !field.label || field.isLabelFullWidth}\">\n <dr-select *ngIf=\"field.type === 'select'\"\n [searchable]=\"dialogData.searchable\"\n [clearable]=\"dialogData.clearable\"\n [formControlName]=\"field.name\"\n [bindLabel]=\"field.bindLabel || null\"\n [bindValue]=\"field.bindValue || null\"\n [selectedItem]=\"field.default\"\n [items]=\"field.items || (field.items$ | async)\"\n [required]=\"true\"\n [placeholder]=\"field.placeholder\">\n <ng-template *ngIf=\"dialogData?.footerTemplateData\" #optionFooterTemplate>\n <button (click)=\"footerAction()
|
|
3141
|
+
template: "<div header class=\"header-dialog\">\n <h1 class=\"title-dialog\" data-test=\"modalTitle\">{{dialogData.title}}</h1>\n <i mat-icon-button *ngIf=\"!dialogData.hideCloseBtn\" (click)=\"closeDialog()\" class=\"dr-icon-exit icon-close\"\n data-test=\"xBtn\"></i>\n</div>\n<div *ngIf=\"dialogData.content\" class=\"content-dialog\">\n <ng-container>{{dialogData.content}}</ng-container>\n <span #content class=\"content-anchor\"></span>\n</div>\n<form *ngIf=\"dialogData.fields\" [formGroup]=\"form\" class=\"dr-smart-from\">\n <div class=\"dr-smart-form_wrapper\">\n <div *ngFor=\"let field of dialogData.fields\" class=\"dr-smart-form_group\"\n [ngStyle]=\"{'display': field.isLabelFullWidth ? 'block' : 'flex'}\">\n <label *ngIf=\"field.label\" [ngClass]=\"field.isLabelFullWidth ? 'col-md-12 mb-2' : 'col-md-2'\"\n class=\"label p-0 d-flex align-items-center\">{{field.label}}</label>\n <div class=\"input-group p-0\"\n [ngClass]=\"{'col-md-10': field.label && !field.isLabelFullWidth, 'col-md-12': !field.label || field.isLabelFullWidth}\">\n <dr-select *ngIf=\"field.type === 'select'\"\n [searchable]=\"dialogData.searchable\"\n [clearable]=\"dialogData.clearable\"\n [formControlName]=\"field.name\"\n [bindLabel]=\"field.bindLabel || null\"\n [bindValue]=\"field.bindValue || null\"\n [selectedItem]=\"field.default\"\n [items]=\"field.items || (field.items$ | async)\"\n [required]=\"true\"\n [placeholder]=\"field.placeholder\">\n <ng-template *ngIf=\"dialogData?.footerTemplateData\" #optionFooterTemplate let-item=\"item\" let-close=\"close\">\n <button (click)=\"footerAction(); close();\" class=\"dr-select-footer__btn\">\n <i *ngIf=\"dialogData.footerTemplateData.icon\"\n class=\"{{dialogData.footerTemplateData.icon}}\"></i>\n {{dialogData.footerTemplateData.label}}</button>\n </ng-template>\n </dr-select>\n <dr-input *ngIf=\"field.type === 'input'\" data-test=\"modalInput\" class=\"form-control\"\n [formControlName]=\"field.name\" [placeholder]=\"field.placeholder\"></dr-input>\n <label class=\"form-error-alert\" *ngIf=\"dialogData.errorMessage && !form.pristine && form.invalid\">\n {{dialogData.errorMessage}}\n </label>\n <label class=\"form-error-alert\"\n *ngIf=\"form.valid && showServerErrorMessage && dialogData.serverErrorMessage\">\n {{dialogData.serverErrorMessage}}\n </label>\n </div>\n </div>\n </div>\n</form>\n\n<div footer class=\"footer-dialog\">\n <div class=\"buttons-wrapper\" *ngIf=\"dialogData.cancelButton || dialogData.acceptButton\">\n <dr-button *ngIf=\"dialogData.cancelButton\" data-test=\"modalCloseBtn\" (click)=\"closeDialog()\"\n [theme]=\"'secondary'\"> {{dialogData.cancelButton.label}}</dr-button>\n <dr-button *ngIf=\"dialogData.acceptButton\" data-test=\"modalAddBtn\" (click)=\"onAccept()\" [theme]=\"'primary'\"\n [isLoading]=\"isLoading\" [disabled]=\"form.invalid\"> {{dialogData.acceptButton.label}}</dr-button>\n </div>\n</div>\n",
|
|
3141
3142
|
styles: [":host{display:flex;justify-content:space-between;flex-direction:column}:host.small-modal{min-height:188px;max-height:467px;min-width:400px;max-width:400px}:host.medium-modal{min-height:188px;max-height:467px;min-width:632px;max-width:632px}.header-dialog{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:8px 39px 8px 32px;border-bottom:1px solid #e5e6ea}.title-dialog{color:#151b3f;position:static;font-weight:bold;font-size:18px;line-height:24px}.content-dialog{font-weight:400;font-size:14px;padding:16px 32px 5px}.icon-close{color:#51566f;cursor:pointer}.dr-smart-from{font-size:14px;font-weight:500;line-height:22px;padding:16px 32px 22px}.content-dialog{padding:16px 32px 0;font-weight:400;font-size:14px;line-height:22px}.content-anchor{display:none}.footer-dialog{border-top:1px solid #e5e6ea}.buttons-wrapper{display:flex;justify-content:flex-end;padding-top:10px;padding-right:32px;padding-bottom:11px}.buttons-wrapper dr-button:nth-of-type(2){margin-left:12px}.form-error-alert{position:absolute;margin-top:5px;font-size:12px;color:red}.dr-select-footer__btn{background-color:transparent;display:flex;align-items:center;justify-content:flex-start;cursor:pointer;min-width:15rem;font-style:normal;font-weight:400;font-size:14px;line-height:24px;clear:both;width:100%;white-space:nowrap;padding:0 12px;height:36px;flex-shrink:0}\n"]
|
|
3142
3143
|
},] }
|
|
3143
3144
|
];
|
|
@@ -3348,6 +3349,39 @@ var CalendarView;
|
|
|
3348
3349
|
CalendarView["FOR_YEARS"] = "multi-year";
|
|
3349
3350
|
})(CalendarView || (CalendarView = {}));
|
|
3350
3351
|
|
|
3352
|
+
const IMAGE_TYPES = ['image/png', 'image/jpeg', 'image/gif'];
|
|
3353
|
+
var CHAT_MESSAGE_TYPE;
|
|
3354
|
+
(function (CHAT_MESSAGE_TYPE) {
|
|
3355
|
+
CHAT_MESSAGE_TYPE["TEXT"] = "text";
|
|
3356
|
+
CHAT_MESSAGE_TYPE["RICH_TEXT"] = "rich-text";
|
|
3357
|
+
CHAT_MESSAGE_TYPE["IMAGE"] = "image";
|
|
3358
|
+
CHAT_MESSAGE_TYPE["DOWNLOAD_FILE"] = "download-file";
|
|
3359
|
+
CHAT_MESSAGE_TYPE["MAILTO"] = "mailto";
|
|
3360
|
+
CHAT_MESSAGE_TYPE["EMBED"] = "embed";
|
|
3361
|
+
CHAT_MESSAGE_TYPE["WIDGET"] = "widget";
|
|
3362
|
+
CHAT_MESSAGE_TYPE["INPUT"] = "input";
|
|
3363
|
+
CHAT_MESSAGE_TYPE["CODE"] = "code";
|
|
3364
|
+
})(CHAT_MESSAGE_TYPE || (CHAT_MESSAGE_TYPE = {}));
|
|
3365
|
+
class ChatMessage {
|
|
3366
|
+
constructor(obj, user) {
|
|
3367
|
+
this.id = obj === null || obj === void 0 ? void 0 : obj.id;
|
|
3368
|
+
this.kind = obj === null || obj === void 0 ? void 0 : obj.kind;
|
|
3369
|
+
this.seq = obj === null || obj === void 0 ? void 0 : obj.seq;
|
|
3370
|
+
this.conversationId = obj === null || obj === void 0 ? void 0 : obj.conversationId;
|
|
3371
|
+
this.reply = (obj === null || obj === void 0 ? void 0 : obj.senderId) !== user.id;
|
|
3372
|
+
this.senderId = obj === null || obj === void 0 ? void 0 : obj.senderId;
|
|
3373
|
+
this.parentId = obj === null || obj === void 0 ? void 0 : obj.parentId;
|
|
3374
|
+
this.text = (obj === null || obj === void 0 ? void 0 : obj.text) || obj.body;
|
|
3375
|
+
this.paragraphs = obj === null || obj === void 0 ? void 0 : obj.paragraphs;
|
|
3376
|
+
this.url = obj === null || obj === void 0 ? void 0 : obj.url;
|
|
3377
|
+
this.label = obj === null || obj === void 0 ? void 0 : obj.label;
|
|
3378
|
+
this.subject = obj === null || obj === void 0 ? void 0 : obj.subject;
|
|
3379
|
+
this.body = obj === null || obj === void 0 ? void 0 : obj.body;
|
|
3380
|
+
this.form = obj === null || obj === void 0 ? void 0 : obj.form;
|
|
3381
|
+
this.parameters = obj === null || obj === void 0 ? void 0 : obj.parameters;
|
|
3382
|
+
}
|
|
3383
|
+
}
|
|
3384
|
+
|
|
3351
3385
|
const components$3 = [DateTagComponent,
|
|
3352
3386
|
DayTagComponent,
|
|
3353
3387
|
WeekTagComponent,
|
|
@@ -3356,7 +3390,7 @@ const components$3 = [DateTagComponent,
|
|
|
3356
3390
|
AnyTagComponent,
|
|
3357
3391
|
YearTagComponent,
|
|
3358
3392
|
ForecastTagComponent];
|
|
3359
|
-
const ɵ0$
|
|
3393
|
+
const ɵ0$3 = { useUtc: true };
|
|
3360
3394
|
class DateTagModule {
|
|
3361
3395
|
}
|
|
3362
3396
|
DateTagModule.decorators = [
|
|
@@ -3374,7 +3408,7 @@ DateTagModule.decorators = [
|
|
|
3374
3408
|
],
|
|
3375
3409
|
exports: components$3,
|
|
3376
3410
|
providers: [
|
|
3377
|
-
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: ɵ0$
|
|
3411
|
+
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: ɵ0$3 }
|
|
3378
3412
|
],
|
|
3379
3413
|
declarations: components$3,
|
|
3380
3414
|
},] }
|
|
@@ -3636,7 +3670,7 @@ DrDatePickerCustomHeaderComponent.ctorParameters = () => [
|
|
|
3636
3670
|
const moment = require('moment');
|
|
3637
3671
|
const noop = () => {
|
|
3638
3672
|
};
|
|
3639
|
-
const ɵ0$
|
|
3673
|
+
const ɵ0$2 = noop;
|
|
3640
3674
|
class DrDatePickerComponent {
|
|
3641
3675
|
constructor(cdr, dateAdapter, datePickerService) {
|
|
3642
3676
|
this.cdr = cdr;
|
|
@@ -4290,7 +4324,7 @@ DrStepperModule.decorators = [
|
|
|
4290
4324
|
},] }
|
|
4291
4325
|
];
|
|
4292
4326
|
|
|
4293
|
-
const ɵ0 = {}, ɵ1 = {};
|
|
4327
|
+
const ɵ0$1 = {}, ɵ1 = {};
|
|
4294
4328
|
class DrDialogModule {
|
|
4295
4329
|
}
|
|
4296
4330
|
DrDialogModule.decorators = [
|
|
@@ -4305,18 +4339,433 @@ DrDialogModule.decorators = [
|
|
|
4305
4339
|
],
|
|
4306
4340
|
exports: [DialogWrapperComponent, DialogModalWrapperComponent],
|
|
4307
4341
|
providers: [
|
|
4308
|
-
{ provide: MatDialogRef, useValue: ɵ0 },
|
|
4342
|
+
{ provide: MatDialogRef, useValue: ɵ0$1 },
|
|
4309
4343
|
{ provide: MAT_DIALOG_DATA, useValue: ɵ1 },
|
|
4310
4344
|
DialogService
|
|
4311
4345
|
]
|
|
4312
4346
|
},] }
|
|
4313
4347
|
];
|
|
4314
4348
|
|
|
4349
|
+
class DrChatFormComponent {
|
|
4350
|
+
constructor(cdr, domSanitizer) {
|
|
4351
|
+
this.cdr = cdr;
|
|
4352
|
+
this.domSanitizer = domSanitizer;
|
|
4353
|
+
this.inputFocus = false;
|
|
4354
|
+
this.inputHover = false;
|
|
4355
|
+
this.droppedFiles = [];
|
|
4356
|
+
/**
|
|
4357
|
+
* Predefined message text
|
|
4358
|
+
*
|
|
4359
|
+
* @type {string}
|
|
4360
|
+
*/
|
|
4361
|
+
this.message = '';
|
|
4362
|
+
/**
|
|
4363
|
+
* Message placeholder text
|
|
4364
|
+
*
|
|
4365
|
+
* @type {string}
|
|
4366
|
+
*/
|
|
4367
|
+
this.messagePlaceholder = 'Type a message';
|
|
4368
|
+
/**
|
|
4369
|
+
* Show send button
|
|
4370
|
+
*
|
|
4371
|
+
* @type {boolean}
|
|
4372
|
+
*/
|
|
4373
|
+
this.dropFiles = false;
|
|
4374
|
+
/**
|
|
4375
|
+
* File drop placeholder text
|
|
4376
|
+
*
|
|
4377
|
+
* @type {string}
|
|
4378
|
+
*/
|
|
4379
|
+
this.dropFilePlaceholder = 'Drop file to send';
|
|
4380
|
+
/**
|
|
4381
|
+
*
|
|
4382
|
+
* @type {EventEmitter<{ message: string, files: File[] }>}
|
|
4383
|
+
*/
|
|
4384
|
+
this.send = new EventEmitter();
|
|
4385
|
+
/**
|
|
4386
|
+
* Emits when message input value has been changed
|
|
4387
|
+
*
|
|
4388
|
+
* @type {EventEmitter<string>}
|
|
4389
|
+
*/
|
|
4390
|
+
this.inputChange = new EventEmitter();
|
|
4391
|
+
this.fileOver = false;
|
|
4392
|
+
}
|
|
4393
|
+
onDrop(event) {
|
|
4394
|
+
var _a;
|
|
4395
|
+
if (this.dropFiles) {
|
|
4396
|
+
event.preventDefault();
|
|
4397
|
+
event.stopPropagation();
|
|
4398
|
+
this.fileOver = false;
|
|
4399
|
+
if ((_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) {
|
|
4400
|
+
for (const file of event.dataTransfer.files) {
|
|
4401
|
+
const res = file;
|
|
4402
|
+
if (IMAGE_TYPES.includes(file.type)) {
|
|
4403
|
+
const fr = new FileReader();
|
|
4404
|
+
fr.onload = (e) => {
|
|
4405
|
+
res.src = e.target.result;
|
|
4406
|
+
res.urlStyle = this.domSanitizer.bypassSecurityTrustStyle(`url(${res.src})`);
|
|
4407
|
+
this.cdr.detectChanges();
|
|
4408
|
+
};
|
|
4409
|
+
fr.readAsDataURL(file);
|
|
4410
|
+
}
|
|
4411
|
+
this.droppedFiles.push(res);
|
|
4412
|
+
}
|
|
4413
|
+
}
|
|
4414
|
+
}
|
|
4415
|
+
}
|
|
4416
|
+
removeFile(file) {
|
|
4417
|
+
const index = this.droppedFiles.indexOf(file);
|
|
4418
|
+
if (index >= 0) {
|
|
4419
|
+
this.droppedFiles.splice(index, 1);
|
|
4420
|
+
}
|
|
4421
|
+
}
|
|
4422
|
+
onDragOver(event) {
|
|
4423
|
+
event.preventDefault();
|
|
4424
|
+
event.stopPropagation();
|
|
4425
|
+
if (this.dropFiles) {
|
|
4426
|
+
this.fileOver = true;
|
|
4427
|
+
}
|
|
4428
|
+
}
|
|
4429
|
+
onDragLeave(event) {
|
|
4430
|
+
event.preventDefault();
|
|
4431
|
+
event.stopPropagation();
|
|
4432
|
+
if (this.dropFiles) {
|
|
4433
|
+
this.fileOver = false;
|
|
4434
|
+
}
|
|
4435
|
+
}
|
|
4436
|
+
sendMessage() {
|
|
4437
|
+
if (this.droppedFiles.length || String(this.message).trim().length) {
|
|
4438
|
+
this.send.emit({ message: this.message, files: this.droppedFiles });
|
|
4439
|
+
this.message = '';
|
|
4440
|
+
this.droppedFiles = [];
|
|
4441
|
+
this.cdr.markForCheck();
|
|
4442
|
+
}
|
|
4443
|
+
}
|
|
4444
|
+
onModelChange(value) {
|
|
4445
|
+
this.inputChange.emit(value);
|
|
4446
|
+
}
|
|
4447
|
+
}
|
|
4448
|
+
DrChatFormComponent.decorators = [
|
|
4449
|
+
{ type: Component, args: [{
|
|
4450
|
+
selector: 'dr-chat-form',
|
|
4451
|
+
template: "<div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <div class=\"dropped-files__item__preview\" [style.background-image]=\"file.urlStyle || 'none'\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle\"></i>\n </div>\n <div class=\"dropped-files__item__name\">{{ file.name }}</div>\n <i class=\"dropped-files__item__remove dr-icon-exit\" (click)=\"removeFile(file)\"></i>\n </div>\n</div>\n<div class=\"message-row\">\n <dr-input (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keyup.enter)=\"sendMessage()\">\n </dr-input>\n <dr-button (click)=\"sendMessage()\"\n theme=\"icon\"\n icon=\"dr-icon-notify\"\n class=\"send-button\">\n </dr-button>\n</div>\n",
|
|
4452
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4453
|
+
styles: [":host{display:flex;flex-direction:column;padding:16px;border-top:1px solid #ccc}:host .message-row{flex-direction:row;display:flex;align-items:center}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}:host .send-button{margin-left:10px}:host .dropped-files{display:flex;flex-direction:row;margin-bottom:.5rem;flex-wrap:wrap}:host .dropped-files__item{display:flex;flex-direction:column;justify-content:center;margin:0 10px 10px 0;position:relative}:host .dropped-files__item__preview{background-size:cover;background-position:center;width:64px;height:64px;border-radius:8px;border:1px solid #ccc}:host .dropped-files__item__preview i{font-size:62px}:host .dropped-files__item__name{white-space:nowrap;font-size:12px;color:#8f929e;margin-top:4px;max-width:64px;overflow:hidden;text-overflow:ellipsis}:host .dropped-files__item__remove{position:absolute;right:-4px;top:-4px;cursor:pointer;background:white;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"]
|
|
4454
|
+
},] }
|
|
4455
|
+
];
|
|
4456
|
+
DrChatFormComponent.ctorParameters = () => [
|
|
4457
|
+
{ type: ChangeDetectorRef },
|
|
4458
|
+
{ type: DomSanitizer }
|
|
4459
|
+
];
|
|
4460
|
+
DrChatFormComponent.propDecorators = {
|
|
4461
|
+
message: [{ type: Input }],
|
|
4462
|
+
messagePlaceholder: [{ type: Input }],
|
|
4463
|
+
dropFiles: [{ type: Input }],
|
|
4464
|
+
dropFilePlaceholder: [{ type: Input }],
|
|
4465
|
+
send: [{ type: Output }],
|
|
4466
|
+
inputChange: [{ type: Output }],
|
|
4467
|
+
fileOver: [{ type: HostBinding, args: ['class.file-over',] }],
|
|
4468
|
+
onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }],
|
|
4469
|
+
onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }],
|
|
4470
|
+
onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }]
|
|
4471
|
+
};
|
|
4472
|
+
|
|
4473
|
+
/**
|
|
4474
|
+
* `DrCustomMessageService` is used to store instances of `DrChatCustomMessageDirective`s which
|
|
4475
|
+
* were provided in the chat component.
|
|
4476
|
+
*/
|
|
4477
|
+
class DrChatCustomMessageService {
|
|
4478
|
+
constructor() {
|
|
4479
|
+
this.customMessages = new Map();
|
|
4480
|
+
}
|
|
4481
|
+
register(type, instance) {
|
|
4482
|
+
this.customMessages.set(type, instance);
|
|
4483
|
+
}
|
|
4484
|
+
unregister(type) {
|
|
4485
|
+
return this.customMessages.delete(type);
|
|
4486
|
+
}
|
|
4487
|
+
getInstance(type) {
|
|
4488
|
+
return this.customMessages.get(type);
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
DrChatCustomMessageService.decorators = [
|
|
4492
|
+
{ type: Injectable }
|
|
4493
|
+
];
|
|
4494
|
+
|
|
4495
|
+
class DrChatMessageComponent {
|
|
4496
|
+
constructor(customMessageService) {
|
|
4497
|
+
this.customMessageService = customMessageService;
|
|
4498
|
+
this.MESSAGE_TYPE = CHAT_MESSAGE_TYPE;
|
|
4499
|
+
this.MESSAGE_TYPE_CUSTOM = CHAT_MESSAGE_TYPE.EMBED;
|
|
4500
|
+
this._reply = false;
|
|
4501
|
+
}
|
|
4502
|
+
get flyInOut() {
|
|
4503
|
+
return true;
|
|
4504
|
+
}
|
|
4505
|
+
get notReply() {
|
|
4506
|
+
return !this.reply;
|
|
4507
|
+
}
|
|
4508
|
+
/**
|
|
4509
|
+
* Determines if a message is a reply
|
|
4510
|
+
*/
|
|
4511
|
+
get reply() {
|
|
4512
|
+
return this._reply;
|
|
4513
|
+
}
|
|
4514
|
+
set reply(value) {
|
|
4515
|
+
this._reply = !!value;
|
|
4516
|
+
}
|
|
4517
|
+
getTemplate() {
|
|
4518
|
+
this.customMessage = true;
|
|
4519
|
+
const customMessage = this.getCustomMessage(this.type);
|
|
4520
|
+
return customMessage.templateRef;
|
|
4521
|
+
}
|
|
4522
|
+
getTemplateContext() {
|
|
4523
|
+
return { $implicit: this.customMessageData, isReply: this.reply };
|
|
4524
|
+
}
|
|
4525
|
+
getCustomMessage(type) {
|
|
4526
|
+
const customMessageDirective = this.customMessageService.getInstance(type);
|
|
4527
|
+
if (!customMessageDirective) {
|
|
4528
|
+
throw new Error(`dr-chat: Can't find template for custom type '${type}'. ` +
|
|
4529
|
+
`Make sure you provide it in the chat component with *drCustomMessage='${type}'.`);
|
|
4530
|
+
}
|
|
4531
|
+
return customMessageDirective;
|
|
4532
|
+
}
|
|
4533
|
+
}
|
|
4534
|
+
DrChatMessageComponent.decorators = [
|
|
4535
|
+
{ type: Component, args: [{
|
|
4536
|
+
selector: 'dr-chat-message',
|
|
4537
|
+
template: "<div class=\"message\" [class.message--custom]=\"customMessage\">\n <ng-container [ngSwitch]=\"message.kind\">\n <dr-chat-message-text *ngSwitchCase=\"MESSAGE_TYPE.TEXT\" [message]=\"message\"></dr-chat-message-text>\n <dr-chat-message-rich-text *ngSwitchCase=\"MESSAGE_TYPE.RICH_TEXT\" [message]=\"message\"></dr-chat-message-rich-text>\n <dr-chat-message-file *ngSwitchCase=\"MESSAGE_TYPE.DOWNLOAD_FILE\" [message]=\"message\"></dr-chat-message-file>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getTemplate()\" [ngTemplateOutletContext]=\"getTemplateContext()\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n",
|
|
4538
|
+
animations: [
|
|
4539
|
+
trigger('flyInOut', [
|
|
4540
|
+
state('in', style({ transform: 'translateX(0)' })),
|
|
4541
|
+
transition('void => *', [style({ transform: 'translateX(-100%)' }), animate(80)]),
|
|
4542
|
+
transition('* => void', [animate(80, style({ transform: 'translateX(100%)' }))]),
|
|
4543
|
+
]),
|
|
4544
|
+
],
|
|
4545
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4546
|
+
styles: [":host{display:flex;flex-direction:row}:host:not(:first-child){margin-top:8px}.reply+:host.reply,.not-reply+:host.not-reply{margin-top:3px}:host.not-reply{justify-content:flex-end}:host.not-reply .message{color:#fff;background-color:#4646ce}:host .message{display:flex;background-color:#f3f7ff;border-radius:8px;padding:16px;max-width:60%;width:auto}:host .message--custom{max-width:unset;width:80%}\n"]
|
|
4547
|
+
},] }
|
|
4548
|
+
];
|
|
4549
|
+
DrChatMessageComponent.ctorParameters = () => [
|
|
4550
|
+
{ type: DrChatCustomMessageService }
|
|
4551
|
+
];
|
|
4552
|
+
DrChatMessageComponent.propDecorators = {
|
|
4553
|
+
flyInOut: [{ type: HostBinding, args: ['@flyInOut',] }],
|
|
4554
|
+
notReply: [{ type: HostBinding, args: ['class.not-reply',] }],
|
|
4555
|
+
reply: [{ type: Input }, { type: HostBinding, args: ['class.reply',] }],
|
|
4556
|
+
type: [{ type: Input }],
|
|
4557
|
+
message: [{ type: Input }],
|
|
4558
|
+
customMessageData: [{ type: Input }]
|
|
4559
|
+
};
|
|
4560
|
+
|
|
4561
|
+
class DrChatComponent {
|
|
4562
|
+
constructor(cdr) {
|
|
4563
|
+
this.cdr = cdr;
|
|
4564
|
+
this.noMessagesPlaceholder = 'No messages yet.';
|
|
4565
|
+
this._scrollBottom = true;
|
|
4566
|
+
}
|
|
4567
|
+
/**
|
|
4568
|
+
* Scroll chat to the bottom of the list when a new message arrives
|
|
4569
|
+
*/
|
|
4570
|
+
get scrollBottom() {
|
|
4571
|
+
return this._scrollBottom;
|
|
4572
|
+
}
|
|
4573
|
+
set scrollBottom(value) {
|
|
4574
|
+
this._scrollBottom = !!value;
|
|
4575
|
+
}
|
|
4576
|
+
ngAfterViewInit() {
|
|
4577
|
+
this.messages.changes.subscribe(messages => {
|
|
4578
|
+
this.messages = messages;
|
|
4579
|
+
this.updateView();
|
|
4580
|
+
});
|
|
4581
|
+
this.updateView();
|
|
4582
|
+
}
|
|
4583
|
+
updateView() {
|
|
4584
|
+
if (this.scrollBottom) {
|
|
4585
|
+
this.scrollListBottom();
|
|
4586
|
+
}
|
|
4587
|
+
}
|
|
4588
|
+
scrollListBottom() {
|
|
4589
|
+
setTimeout(() => {
|
|
4590
|
+
this.messagesContainer.nativeElement.scrollTo({ top: this.messagesContainer.nativeElement.scrollHeight, behavior: 'smooth' });
|
|
4591
|
+
this.cdr.markForCheck();
|
|
4592
|
+
});
|
|
4593
|
+
}
|
|
4594
|
+
}
|
|
4595
|
+
DrChatComponent.decorators = [
|
|
4596
|
+
{ type: Component, args: [{
|
|
4597
|
+
selector: 'dr-chat',
|
|
4598
|
+
template: "<div class=\"header\">\n {{ title }}\n</div>\n\n<div class=\"scrollable\">\n <div class=\"messages\" #messagesContainer>\n <ng-content select=\"dr-chat-message\"></ng-content>\n <p class=\"no-messages\" *ngIf=\"!messages?.length\">{{ noMessagesPlaceholder }}</p>\n </div>\n</div>\n\n<div class=\"form\">\n <ng-content select=\"dr-chat-form\"></ng-content>\n</div>\n",
|
|
4599
|
+
providers: [DrChatCustomMessageService],
|
|
4600
|
+
styles: [":host{display:flex;flex-grow:1;flex-direction:column;position:relative;height:100%;background-color:#fff;border:1px solid #e5e6ea;border-radius:8px;box-shadow:0 4px 8px 1px #00000040;color:#151b3f;font-family:\"Poppins\",sans-serif;font-size:14px;font-weight:400;line-height:22px}:host .header{border-bottom:1px solid #e5e6ea;padding:16px 32px;font-weight:bold}:host .scrollable{display:flex;flex-grow:1;overflow-x:hidden;overflow-y:auto;height:100%;width:100%}:host .scrollable .messages{padding:16px;overflow-y:auto;overflow-x:hidden;display:flex;flex-shrink:0;flex-direction:column;width:100%}:host .scrollable .no-messages{text-align:center}\n"]
|
|
4601
|
+
},] }
|
|
4602
|
+
];
|
|
4603
|
+
DrChatComponent.ctorParameters = () => [
|
|
4604
|
+
{ type: ChangeDetectorRef }
|
|
4605
|
+
];
|
|
4606
|
+
DrChatComponent.propDecorators = {
|
|
4607
|
+
title: [{ type: Input }],
|
|
4608
|
+
noMessagesPlaceholder: [{ type: Input }],
|
|
4609
|
+
scrollBottom: [{ type: Input }],
|
|
4610
|
+
messagesContainer: [{ type: ViewChild, args: ['messagesContainer',] }],
|
|
4611
|
+
messages: [{ type: ContentChildren, args: [DrChatMessageComponent,] }],
|
|
4612
|
+
chatForm: [{ type: ContentChild, args: [DrChatFormComponent,] }]
|
|
4613
|
+
};
|
|
4614
|
+
|
|
4615
|
+
/**
|
|
4616
|
+
* Chat text message component.
|
|
4617
|
+
*/
|
|
4618
|
+
class DrChatMessageTextComponent {
|
|
4619
|
+
}
|
|
4620
|
+
DrChatMessageTextComponent.decorators = [
|
|
4621
|
+
{ type: Component, args: [{
|
|
4622
|
+
selector: 'dr-chat-message-text',
|
|
4623
|
+
template: "<div class=\"text\" *ngIf=\"message\">{{ message.text }}</div>\n",
|
|
4624
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4625
|
+
styles: [":host{display:flex}:host .text{display:flex;word-break:break-word}\n"]
|
|
4626
|
+
},] }
|
|
4627
|
+
];
|
|
4628
|
+
DrChatMessageTextComponent.propDecorators = {
|
|
4629
|
+
message: [{ type: Input }]
|
|
4630
|
+
};
|
|
4631
|
+
|
|
4632
|
+
/**
|
|
4633
|
+
* Chat rich-text message component.
|
|
4634
|
+
*/
|
|
4635
|
+
class DrChatMessageRichTextComponent {
|
|
4636
|
+
}
|
|
4637
|
+
DrChatMessageRichTextComponent.decorators = [
|
|
4638
|
+
{ type: Component, args: [{
|
|
4639
|
+
selector: 'dr-chat-message-rich-text',
|
|
4640
|
+
template: "<div class=\"paragraphs\">\n <div *ngFor=\"let paragraph of message.paragraphs\"\n class=\"paragraphs__item\"\n [class]=\"paragraph.kind\"\n [innerText]=\"paragraph.value\">\n </div>\n</div>\n",
|
|
4641
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
4642
|
+
styles: [".paragraphs{display:flex;flex-direction:column}.paragraphs__item:not(:first-child){margin-top:8px}.paragraphs__item.code{display:flex;padding:4px;border:1px solid #8f929e;background:#ccc}\n"]
|
|
4643
|
+
},] }
|
|
4644
|
+
];
|
|
4645
|
+
DrChatMessageRichTextComponent.propDecorators = {
|
|
4646
|
+
message: [{ type: Input }]
|
|
4647
|
+
};
|
|
4648
|
+
|
|
4649
|
+
/**
|
|
4650
|
+
* Chat message component.
|
|
4651
|
+
*/
|
|
4652
|
+
class DrChatMessageFileComponent {
|
|
4653
|
+
constructor(cd, domSanitizer) {
|
|
4654
|
+
this.cd = cd;
|
|
4655
|
+
this.domSanitizer = domSanitizer;
|
|
4656
|
+
}
|
|
4657
|
+
/**
|
|
4658
|
+
* Message file path
|
|
4659
|
+
*
|
|
4660
|
+
* @type {Date}
|
|
4661
|
+
*/
|
|
4662
|
+
set files(files) {
|
|
4663
|
+
this.readyFiles = (files || []).map((file) => {
|
|
4664
|
+
const isImage = this.isImage(file);
|
|
4665
|
+
return Object.assign(Object.assign({}, file), { urlStyle: isImage && this.domSanitizer.bypassSecurityTrustStyle(`url(${file.url})`), isImage });
|
|
4666
|
+
});
|
|
4667
|
+
this.cd.detectChanges();
|
|
4668
|
+
}
|
|
4669
|
+
isImage(file) {
|
|
4670
|
+
const type = file.type;
|
|
4671
|
+
if (type) {
|
|
4672
|
+
return IMAGE_TYPES.includes(type);
|
|
4673
|
+
}
|
|
4674
|
+
return false;
|
|
4675
|
+
}
|
|
4676
|
+
}
|
|
4677
|
+
DrChatMessageFileComponent.decorators = [
|
|
4678
|
+
{ type: Component, args: [{
|
|
4679
|
+
selector: 'dr-chat-message-file',
|
|
4680
|
+
template: "<div class=\"message-content-group\">\n <a *ngFor=\"let file of readyFiles\" [href]=\"file.url\" target=\"_blank\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle && file.icon\"></i>\n <div *ngIf=\"file.urlStyle\" [style.background-image]=\"file.urlStyle\"></div>\n </a>\n</div>\n",
|
|
4681
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
4682
|
+
},] }
|
|
4683
|
+
];
|
|
4684
|
+
DrChatMessageFileComponent.ctorParameters = () => [
|
|
4685
|
+
{ type: ChangeDetectorRef },
|
|
4686
|
+
{ type: DomSanitizer }
|
|
4687
|
+
];
|
|
4688
|
+
DrChatMessageFileComponent.propDecorators = {
|
|
4689
|
+
message: [{ type: Input }],
|
|
4690
|
+
files: [{ type: Input }]
|
|
4691
|
+
};
|
|
4692
|
+
|
|
4693
|
+
const throwCustomMessageTypeIsRequired = () => {
|
|
4694
|
+
throw new Error('[drCustomMessage]: custom message type is required.');
|
|
4695
|
+
};
|
|
4696
|
+
const ɵ0 = throwCustomMessageTypeIsRequired;
|
|
4697
|
+
class DrChatCustomMessageDirective {
|
|
4698
|
+
constructor(templateRef, customMessageService) {
|
|
4699
|
+
this.templateRef = templateRef;
|
|
4700
|
+
this.customMessageService = customMessageService;
|
|
4701
|
+
}
|
|
4702
|
+
/**
|
|
4703
|
+
* Defines a message type which should rendered with the custom message template.
|
|
4704
|
+
*
|
|
4705
|
+
* @type {string}
|
|
4706
|
+
*/
|
|
4707
|
+
get drCustomMessage() {
|
|
4708
|
+
return this._type;
|
|
4709
|
+
}
|
|
4710
|
+
set drCustomMessage(value) {
|
|
4711
|
+
this._type = value;
|
|
4712
|
+
}
|
|
4713
|
+
get type() {
|
|
4714
|
+
return this._type;
|
|
4715
|
+
}
|
|
4716
|
+
ngOnInit() {
|
|
4717
|
+
if (!this._type) {
|
|
4718
|
+
throwCustomMessageTypeIsRequired();
|
|
4719
|
+
}
|
|
4720
|
+
this.customMessageService.register(this.type, this);
|
|
4721
|
+
}
|
|
4722
|
+
ngOnDestroy() {
|
|
4723
|
+
this.customMessageService.unregister(this.type);
|
|
4724
|
+
}
|
|
4725
|
+
}
|
|
4726
|
+
DrChatCustomMessageDirective.decorators = [
|
|
4727
|
+
{ type: Directive, args: [{
|
|
4728
|
+
selector: `[drCustomMessage]`,
|
|
4729
|
+
},] }
|
|
4730
|
+
];
|
|
4731
|
+
DrChatCustomMessageDirective.ctorParameters = () => [
|
|
4732
|
+
{ type: TemplateRef },
|
|
4733
|
+
{ type: DrChatCustomMessageService }
|
|
4734
|
+
];
|
|
4735
|
+
DrChatCustomMessageDirective.propDecorators = {
|
|
4736
|
+
drCustomMessage: [{ type: Input }]
|
|
4737
|
+
};
|
|
4738
|
+
|
|
4739
|
+
const DR_CHAT_COMPONENTS = [
|
|
4740
|
+
DrChatComponent,
|
|
4741
|
+
DrChatMessageComponent,
|
|
4742
|
+
DrChatFormComponent,
|
|
4743
|
+
DrChatMessageTextComponent,
|
|
4744
|
+
DrChatMessageFileComponent,
|
|
4745
|
+
DrChatMessageRichTextComponent,
|
|
4746
|
+
];
|
|
4747
|
+
const DR_CHAT_DIRECTIVES = [DrChatCustomMessageDirective];
|
|
4748
|
+
class DrChatModule {
|
|
4749
|
+
}
|
|
4750
|
+
DrChatModule.decorators = [
|
|
4751
|
+
{ type: NgModule, args: [{
|
|
4752
|
+
imports: [
|
|
4753
|
+
FormsModule,
|
|
4754
|
+
ReactiveFormsModule,
|
|
4755
|
+
CommonModule,
|
|
4756
|
+
DrAvatarModule,
|
|
4757
|
+
DrInputsModule
|
|
4758
|
+
],
|
|
4759
|
+
declarations: [...DR_CHAT_COMPONENTS, ...DR_CHAT_DIRECTIVES],
|
|
4760
|
+
exports: [...DR_CHAT_COMPONENTS, ...DR_CHAT_DIRECTIVES],
|
|
4761
|
+
},] }
|
|
4762
|
+
];
|
|
4763
|
+
|
|
4315
4764
|
/* components */
|
|
4316
4765
|
|
|
4317
4766
|
/**
|
|
4318
4767
|
* Generated bundle index. Do not edit.
|
|
4319
4768
|
*/
|
|
4320
4769
|
|
|
4321
|
-
export { AnyTagComponent, CalendarView, CheckboxComponent, CustomDateFormat, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DayTagComponent, DialogService, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrButtonComponent, DrDialogModule, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrSelectComponent, DrSharedUtils, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, ForecastTagComponent, ListTagComponent, ListTagModule, MonthTagComponent, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, SpinnerSize, SpinnerType, TimeframeOption, TooltipComponent, TooltipPosition, WeekTagComponent, YearTagComponent, components$3 as ɵa, POPUP_ANIMATION as ɵb, DrDatePickerComponent as ɵc, DrDatePickerService as ɵd, DrDatePickerWithTimeframeComponent as ɵe, DrDatePickerFormatDirective as ɵf, DrDatePickerCustomHeaderComponent as ɵg, DrShowTimeframePipe as ɵh, TooltipInfoComponent as ɵi, TooltipInfoSimpleComponent as ɵj, TooltipNoBodyComponent as ɵk, TooltipProcessDefaultComponent as ɵl, StepperComponent as ɵm, DialogWrapperComponent as ɵn, DialogModalWrapperComponent as ɵo };
|
|
4770
|
+
export { AnyTagComponent, CHAT_MESSAGE_TYPE, CalendarView, ChatMessage, CheckboxComponent, CustomDateFormat, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DayTagComponent, DialogService, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrButtonComponent, DrChatModule, DrDialogModule, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrSelectComponent, DrSharedUtils, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, ForecastTagComponent, IMAGE_TYPES, ListTagComponent, ListTagModule, MonthTagComponent, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, SpinnerSize, SpinnerType, TimeframeOption, TooltipComponent, TooltipPosition, WeekTagComponent, YearTagComponent, components$3 as ɵa, POPUP_ANIMATION as ɵb, DrDatePickerComponent as ɵc, DrDatePickerService as ɵd, DrDatePickerWithTimeframeComponent as ɵe, DrDatePickerFormatDirective as ɵf, DrDatePickerCustomHeaderComponent as ɵg, DrShowTimeframePipe as ɵh, TooltipInfoComponent as ɵi, TooltipInfoSimpleComponent as ɵj, TooltipNoBodyComponent as ɵk, TooltipProcessDefaultComponent as ɵl, StepperComponent as ɵm, DialogWrapperComponent as ɵn, DialogModalWrapperComponent as ɵo, DrChatComponent as ɵp, DrChatCustomMessageService as ɵq, DrChatMessageComponent as ɵr, DrChatFormComponent as ɵs, DrChatMessageTextComponent as ɵt, DrChatMessageFileComponent as ɵu, DrChatMessageRichTextComponent as ɵv, DrChatCustomMessageDirective as ɵw };
|
|
4322
4771
|
//# sourceMappingURL=datarailsshared-datarailsshared.js.map
|