@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.
Files changed (34) hide show
  1. package/bundles/datarailsshared-datarailsshared.umd.js +541 -19
  2. package/bundles/datarailsshared-datarailsshared.umd.js.map +1 -1
  3. package/datarailsshared-datarailsshared-1.4.98.tgz +0 -0
  4. package/datarailsshared-datarailsshared.d.ts +8 -0
  5. package/datarailsshared-datarailsshared.metadata.json +1 -1
  6. package/esm2015/datarailsshared-datarailsshared.js +9 -1
  7. package/esm2015/lib/dr-chat/chat.component.js +58 -0
  8. package/esm2015/lib/dr-chat/chat.module.js +37 -0
  9. package/esm2015/lib/dr-chat/dr-chat-form/chat-form.component.js +127 -0
  10. package/esm2015/lib/dr-chat/dr-chat-message/chat-message.component.js +70 -0
  11. package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.directive.js +49 -0
  12. package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.service.js +23 -0
  13. package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-file/chat-message-file.component.js +47 -0
  14. package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-rich-text/chat-message-rich-text.component.js +18 -0
  15. package/esm2015/lib/dr-chat/dr-chat-message/dr-chat-message-text/chat-message-text.component.js +18 -0
  16. package/esm2015/lib/dr-dialog/components/dialog-modal-wrapper/dialog-modal-wrapper.component.js +2 -2
  17. package/esm2015/lib/dr-inputs/dr-select/dr-select.component.js +2 -2
  18. package/esm2015/lib/models/chat.js +33 -0
  19. package/esm2015/public-api.js +3 -1
  20. package/fesm2015/datarailsshared-datarailsshared.js +465 -16
  21. package/fesm2015/datarailsshared-datarailsshared.js.map +1 -1
  22. package/lib/dr-chat/chat.component.d.ts +21 -0
  23. package/lib/dr-chat/chat.module.d.ts +2 -0
  24. package/lib/dr-chat/dr-chat-form/chat-form.component.d.ts +55 -0
  25. package/lib/dr-chat/dr-chat-message/chat-message.component.d.ts +38 -0
  26. package/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.directive.d.ts +18 -0
  27. package/lib/dr-chat/dr-chat-message/dr-chat-message-custom/chat-custom-message.service.d.ts +11 -0
  28. package/lib/dr-chat/dr-chat-message/dr-chat-message-file/chat-message-file.component.d.ts +25 -0
  29. package/lib/dr-chat/dr-chat-message/dr-chat-message-rich-text/chat-message-rich-text.component.d.ts +12 -0
  30. package/lib/dr-chat/dr-chat-message/dr-chat-message-text/chat-message-text.component.d.ts +12 -0
  31. package/lib/models/chat.d.ts +106 -0
  32. package/package.json +1 -1
  33. package/public-api.d.ts +2 -0
  34. 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$6 = MONTH_FORMATS;
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$6 },
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$5 = WEEK_FORMATS;
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$5 },
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$4 = YEAR_FORMATS;
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$4 },
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$3 = DAY_FORMATS;
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$3 },
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()\" 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
+ 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$2 = { useUtc: true };
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$2 }
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$1 = noop;
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