@datarailsshared/datarailsshared 1.5.283 → 1.5.285

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.
@@ -8,7 +8,7 @@ import { MAT_DATE_FORMATS, DateAdapter, MAT_DATE_LOCALE, MatNativeDateModule } f
8
8
  import moment from 'moment';
9
9
  import * as i1$2 from '@angular/forms';
10
10
  import { NG_VALUE_ACCESSOR, FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
11
- import { Observable, BehaviorSubject, Subject, noop as noop$2, from, merge as merge$1, fromEvent, throwError } from 'rxjs';
11
+ import { Observable, BehaviorSubject, Subject, noop as noop$3, from, merge as merge$1, fromEvent, throwError } from 'rxjs';
12
12
  import * as _ from 'lodash';
13
13
  import { find, reduce, isObject, isNil, map, isNumber, merge, forEach, some, orderBy, cloneDeep, filter as filter$1, includes, indexOf, pull, concat, isString, isBoolean } from 'lodash';
14
14
  import { skip, takeUntil, debounceTime, filter, distinctUntilChanged, startWith, switchMap, first, catchError, tap, finalize } from 'rxjs/operators';
@@ -21,6 +21,7 @@ import { ComponentPortal } from '@angular/cdk/portal';
21
21
  import * as i3 from '@ng-select/ng-select';
22
22
  import { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select';
23
23
  import * as i1$5 from '@angular/platform-browser';
24
+ import * as CodeMirror from 'codemirror';
24
25
  import * as i2 from '@angular/material/tabs';
25
26
  import { MatTabsModule } from '@angular/material/tabs';
26
27
  import * as i1$6 from '@angular/material/legacy-dialog';
@@ -28,6 +29,10 @@ import { MAT_LEGACY_DIALOG_DATA, MatLegacyDialogModule, MatLegacyDialogRef } fro
28
29
  import * as i1$7 from 'ngx-toastr';
29
30
  import { Toast, ToastrModule } from 'ngx-toastr';
30
31
  import { MatLegacyTooltipModule } from '@angular/material/legacy-tooltip';
32
+ import 'codemirror/mode/javascript/javascript';
33
+ import 'codemirror/addon/edit/matchbrackets';
34
+ import 'codemirror/addon/hint/show-hint';
35
+ import '@codemirror/autocomplete';
31
36
 
32
37
  class AnyTagComponent {
33
38
  constructor() {
@@ -194,6 +199,9 @@ class DrSharedUtils {
194
199
  resizeObserver.disconnect();
195
200
  };
196
201
  }); }
202
+ static { this.normalizeLineEndings = (str) => {
203
+ return str ? str.replace(/\r\n|\r/g, '\n') : str;
204
+ }; }
197
205
  }
198
206
 
199
207
  class DrDatePickerService {
@@ -1189,7 +1197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1189
1197
  args: ['drDatePickerFormat']
1190
1198
  }] } });
1191
1199
 
1192
- const noop$1 = () => {
1200
+ const noop$2 = () => {
1193
1201
  };
1194
1202
  class DrDatePickerComponent {
1195
1203
  set min(minDate) {
@@ -1226,8 +1234,8 @@ class DrDatePickerComponent {
1226
1234
  this.timeframeOption = TimeframeOption;
1227
1235
  this.innerValue = null;
1228
1236
  this.destroyed$ = new Subject();
1229
- this.onTouchedCallback = noop$1;
1230
- this.onChangeCallback = noop$1;
1237
+ this.onTouchedCallback = noop$2;
1238
+ this.onChangeCallback = noop$2;
1231
1239
  // Should be as arrow function to avoid lose scope
1232
1240
  this.dateFilter = (moment) => {
1233
1241
  if (this.datepickerFilter && moment) {
@@ -2262,8 +2270,8 @@ class DrInputComponent {
2262
2270
  this.clearHandler = new EventEmitter();
2263
2271
  this.buttonHandler = new EventEmitter();
2264
2272
  this.tabindex = -1;
2265
- this.onChangeCallback = noop$2;
2266
- this.onTouchedCallback = noop$2;
2273
+ this.onChangeCallback = noop$3;
2274
+ this.onTouchedCallback = noop$3;
2267
2275
  this.onChange = () => {
2268
2276
  };
2269
2277
  this.onTouched = () => {
@@ -3299,7 +3307,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3299
3307
  type: Output
3300
3308
  }] } });
3301
3309
 
3302
- const noop = () => { };
3310
+ const noop$1 = () => { };
3303
3311
  class DrDatePickerRangeComponent {
3304
3312
  get defaultValue() {
3305
3313
  return {
@@ -3340,8 +3348,8 @@ class DrDatePickerRangeComponent {
3340
3348
  this.labelTo = 'To';
3341
3349
  this.placeholderFrom = 'Select...';
3342
3350
  this.placeholderTo = 'Select...';
3343
- this.onTouchedCallback = noop;
3344
- this.onChangeCallback = noop;
3351
+ this.onTouchedCallback = noop$1;
3352
+ this.onChangeCallback = noop$1;
3345
3353
  this.innerValue = this.defaultValue;
3346
3354
  this.innerValueFrom = null;
3347
3355
  this.innerValueTo = null;
@@ -3709,11 +3717,11 @@ class DrChatFormComponent {
3709
3717
  return `height: ${height}px;`;
3710
3718
  }
3711
3719
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$5.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
3712
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatFormComponent, selector: "dr-chat-form", inputs: { message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply" }, outputs: { send: "send", abort: "abort", inputChange: "inputChange" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.file-over": "this.fileOver" } }, ngImport: i0, 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 <div class=\"message-row__input\">\n <textarea #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 24px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input textarea{font-size:14px;color:#6d6e6f;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea:focus+.send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input textarea:focus+.send-button,:host .message-row__input .send-button:hover{color:#fff}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}: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:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }, { kind: "component", type: DrDotFlashingComponent, selector: "dr-dot-flashing" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3720
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatFormComponent, selector: "dr-chat-form", inputs: { message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply" }, outputs: { send: "send", abort: "abort", inputChange: "inputChange" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.file-over": "this.fileOver" } }, ngImport: i0, 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 <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\n <textarea\n #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 24px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:#dfe0e3 border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input--focused{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled .send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea{font-size:14px;color:#333;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}: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:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }, { kind: "component", type: DrDotFlashingComponent, selector: "dr-dot-flashing" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3713
3721
  }
3714
3722
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatFormComponent, decorators: [{
3715
3723
  type: Component,
3716
- args: [{ selector: 'dr-chat-form', changeDetection: ChangeDetectionStrategy.OnPush, 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 <div class=\"message-row__input\">\n <textarea #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 24px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input textarea{font-size:14px;color:#6d6e6f;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea:focus+.send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input textarea:focus+.send-button,:host .message-row__input .send-button:hover{color:#fff}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}: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:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"] }]
3724
+ args: [{ selector: 'dr-chat-form', changeDetection: ChangeDetectionStrategy.OnPush, 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 <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\n <textarea\n #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 24px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:#dfe0e3 border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input--focused{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled .send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea{font-size:14px;color:#333;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}: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:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"] }]
3717
3725
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1$5.DomSanitizer }]; }, propDecorators: { message: [{
3718
3726
  type: Input
3719
3727
  }], messagePlaceholder: [{
@@ -4423,6 +4431,551 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4423
4431
  args: ['class']
4424
4432
  }] } });
4425
4433
 
4434
+ class CodeEditorHintWrapperComponent {
4435
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CodeEditorHintWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4436
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CodeEditorHintWrapperComponent, selector: "dr-code-editor-hint-wrapper", ngImport: i0, template: ` <span [innerHTML]="content" [drTooltip]="tooltip"></span> `, isInline: true, dependencies: [{ kind: "directive", type: DrTooltipDirective, selector: "[drTooltip]", inputs: ["drTooltip", "drTooltipContext", "drTooltipPosition", "drTooltipClass", "drTooltipTheme", "drTooltipMousleaveTimeout", "drTooltipMouseEnterTimeout", "drTooltipOptions", "drTooltipShow"] }] }); }
4437
+ }
4438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CodeEditorHintWrapperComponent, decorators: [{
4439
+ type: Component,
4440
+ args: [{
4441
+ selector: 'dr-code-editor-hint-wrapper',
4442
+ template: ` <span [innerHTML]="content" [drTooltip]="tooltip"></span> `,
4443
+ }]
4444
+ }] });
4445
+
4446
+ class DrCodemirrorComponent {
4447
+ set options(value) {
4448
+ this._options = value;
4449
+ if (!this._differ && value) {
4450
+ this._differ = this._differs.find(value).create();
4451
+ }
4452
+ }
4453
+ constructor(_differs, _ngZone) {
4454
+ this._differs = _differs;
4455
+ this._ngZone = _ngZone;
4456
+ this.className = '';
4457
+ this.name = 'codemirror';
4458
+ this.autoFocus = false;
4459
+ this.preserveScrollPosition = false;
4460
+ this.cursorActivity = new EventEmitter();
4461
+ this.focusChange = new EventEmitter();
4462
+ this.scroll = new EventEmitter();
4463
+ this.drop = new EventEmitter();
4464
+ this.codeMirrorLoaded = new EventEmitter();
4465
+ this.value = '';
4466
+ this.disabled = false;
4467
+ this.isFocused = false;
4468
+ this.onChange = (_) => { };
4469
+ this.onTouched = () => { };
4470
+ }
4471
+ get codeMirrorGlobal() {
4472
+ if (this._codeMirror) {
4473
+ return this._codeMirror;
4474
+ }
4475
+ this._codeMirror = CodeMirror;
4476
+ return this._codeMirror;
4477
+ }
4478
+ ngAfterViewInit() {
4479
+ this._ngZone.runOutsideAngular(async () => {
4480
+ const codeMirrorObj = await this.codeMirrorGlobal;
4481
+ const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;
4482
+ this.codeMirror = codeMirror.fromTextArea(this.ref.nativeElement, this._options);
4483
+ this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
4484
+ this.codeMirror.on('scroll', this.scrollChanged.bind(this));
4485
+ this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
4486
+ this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));
4487
+ this.codeMirror.on('change', (cm, change) => this._ngZone.run(() => this.codemirrorValueChanged(cm, change)));
4488
+ this.codeMirror.on('drop', (cm, e) => {
4489
+ this._ngZone.run(() => this.dropFiles(cm, e));
4490
+ });
4491
+ this.codeMirror.setValue(this.value);
4492
+ this.codeMirrorLoaded.emit(this);
4493
+ });
4494
+ }
4495
+ ngDoCheck() {
4496
+ if (!this._differ) {
4497
+ return;
4498
+ }
4499
+ // check options have not changed
4500
+ const changes = this._differ.diff(this._options);
4501
+ if (changes) {
4502
+ changes.forEachChangedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4503
+ changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4504
+ changes.forEachRemovedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4505
+ }
4506
+ }
4507
+ ngOnDestroy() {
4508
+ // is there a lighter-weight way to remove the cm instance?
4509
+ if (this.codeMirror) {
4510
+ this.codeMirror.toTextArea();
4511
+ }
4512
+ }
4513
+ codemirrorValueChanged(cm, change) {
4514
+ const cmVal = cm.getValue();
4515
+ if (this.value !== cmVal) {
4516
+ this.value = cmVal;
4517
+ this.onChange(this.value);
4518
+ }
4519
+ }
4520
+ setOptionIfChanged(optionName, newValue) {
4521
+ if (!this.codeMirror) {
4522
+ return;
4523
+ }
4524
+ // cast to any to handle strictly typed option names
4525
+ // could possibly import settings strings available in the future
4526
+ this.codeMirror.setOption(optionName, newValue);
4527
+ }
4528
+ focusChanged(focused) {
4529
+ this.onTouched();
4530
+ this.isFocused = focused;
4531
+ this.focusChange.emit(focused);
4532
+ }
4533
+ scrollChanged(cm) {
4534
+ this.scroll.emit(cm.getScrollInfo());
4535
+ }
4536
+ cursorActive(cm) {
4537
+ this.cursorActivity.emit(cm);
4538
+ }
4539
+ dropFiles(cm, e) {
4540
+ this.drop.emit([cm, e]);
4541
+ }
4542
+ writeValue(value) {
4543
+ if (value === null || value === undefined) {
4544
+ return;
4545
+ }
4546
+ if (!this.codeMirror) {
4547
+ this.value = value;
4548
+ return;
4549
+ }
4550
+ const cur = this.codeMirror.getValue();
4551
+ if (value !== cur && DrSharedUtils.normalizeLineEndings(cur) !== DrSharedUtils.normalizeLineEndings(value)) {
4552
+ this.value = value;
4553
+ if (this.preserveScrollPosition) {
4554
+ const prevScrollPosition = this.codeMirror.getScrollInfo();
4555
+ this.codeMirror.setValue(this.value);
4556
+ this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);
4557
+ }
4558
+ else {
4559
+ this.codeMirror.setValue(this.value);
4560
+ }
4561
+ }
4562
+ }
4563
+ registerOnChange(fn) {
4564
+ this.onChange = fn;
4565
+ }
4566
+ registerOnTouched(fn) {
4567
+ this.onTouched = fn;
4568
+ }
4569
+ setDisabledState(isDisabled) {
4570
+ this.disabled = isDisabled;
4571
+ this.setOptionIfChanged('readOnly', this.disabled);
4572
+ }
4573
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodemirrorComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
4574
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrCodemirrorComponent, selector: "dr-codemirror", inputs: { className: "className", name: "name", autoFocus: "autoFocus", options: "options", preserveScrollPosition: "preserveScrollPosition" }, outputs: { cursorActivity: "cursorActivity", focusChange: "focusChange", scroll: "scroll", drop: "drop", codeMirrorLoaded: "codeMirrorLoaded" }, providers: [
4575
+ {
4576
+ provide: NG_VALUE_ACCESSOR,
4577
+ useExisting: forwardRef((() => DrCodemirrorComponent)),
4578
+ multi: true,
4579
+ },
4580
+ ], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true }], ngImport: i0, template: `
4581
+ <textarea
4582
+ [name]="name"
4583
+ class="dr-codemirror {{ className }}"
4584
+ [class.dr-codemirror--focused]="isFocused"
4585
+ autocomplete="off"
4586
+ [autofocus]="autoFocus"
4587
+ #ref
4588
+ >
4589
+ </textarea>
4590
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4591
+ }
4592
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodemirrorComponent, decorators: [{
4593
+ type: Component,
4594
+ args: [{
4595
+ selector: 'dr-codemirror',
4596
+ template: `
4597
+ <textarea
4598
+ [name]="name"
4599
+ class="dr-codemirror {{ className }}"
4600
+ [class.dr-codemirror--focused]="isFocused"
4601
+ autocomplete="off"
4602
+ [autofocus]="autoFocus"
4603
+ #ref
4604
+ >
4605
+ </textarea>
4606
+ `,
4607
+ providers: [
4608
+ {
4609
+ provide: NG_VALUE_ACCESSOR,
4610
+ useExisting: forwardRef((() => DrCodemirrorComponent)),
4611
+ multi: true,
4612
+ },
4613
+ ],
4614
+ preserveWhitespaces: false,
4615
+ changeDetection: ChangeDetectionStrategy.OnPush,
4616
+ }]
4617
+ }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.NgZone }]; }, propDecorators: { className: [{
4618
+ type: Input
4619
+ }], name: [{
4620
+ type: Input
4621
+ }], autoFocus: [{
4622
+ type: Input
4623
+ }], options: [{
4624
+ type: Input
4625
+ }], preserveScrollPosition: [{
4626
+ type: Input
4627
+ }], cursorActivity: [{
4628
+ type: Output
4629
+ }], focusChange: [{
4630
+ type: Output
4631
+ }], scroll: [{
4632
+ type: Output
4633
+ }], drop: [{
4634
+ type: Output
4635
+ }], codeMirrorLoaded: [{
4636
+ type: Output
4637
+ }], ref: [{
4638
+ type: ViewChild,
4639
+ args: ['ref']
4640
+ }] } });
4641
+
4642
+ class DrErrorComponent {
4643
+ constructor(formGroupDirective) {
4644
+ this.formGroupDirective = formGroupDirective;
4645
+ this.label = 'Field error';
4646
+ this.errorTooltipPosition = 'top';
4647
+ this.displayAsLabel = false;
4648
+ this.noIcon = false;
4649
+ }
4650
+ set control(value) {
4651
+ if (value) {
4652
+ this._control = value;
4653
+ }
4654
+ }
4655
+ set controlName(value) {
4656
+ if (!value || typeof value !== 'string')
4657
+ return;
4658
+ if (!this.formGroupDirective) {
4659
+ throw new Error('You must provide a formGroupDirective to use this input');
4660
+ }
4661
+ this.control = this.formGroupDirective.control.get(value);
4662
+ }
4663
+ get errorString() {
4664
+ if (this._control.hasError('required')) {
4665
+ return 'Field is required!';
4666
+ }
4667
+ return this._control.errors?.errorString || null;
4668
+ }
4669
+ get isWarning() {
4670
+ return this._control.errors?.isWarning;
4671
+ }
4672
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrErrorComponent, deps: [{ token: i1$2.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
4673
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrErrorComponent, selector: "dr-error", inputs: { control: "control", controlName: "controlName", label: "label", errorTooltipPosition: "errorTooltipPosition", displayAsLabel: "displayAsLabel", noIcon: "noIcon" }, host: { properties: { "class.no-icon": "this.noIcon" } }, ngImport: i0, template: "<div *ngIf=\"_control.status === 'INVALID' && !_control.pristine\"\n [drTooltip]=\"displayAsLabel ? null : errorString\"\n [drTooltipPosition]=\"errorTooltipPosition\"\n class=\"error-container\"\n [class.error-container--cursor-pointer]=\"!displayAsLabel\"\n [class.warning]=\"isWarning\">\n <i *ngIf=\"!noIcon\" class=\"dr-icon-status-error\"></i>\n <span>{{ displayAsLabel ? errorString : label }}</span>\n</div>\n", styles: [":host{display:flex;margin-top:8px}:host:empty{display:none}:host .error-container{display:flex;align-items:center;width:auto;color:#bf1d30}:host .error-container i{font-size:16px;margin-right:2px}:host .error-container span{font-family:Poppins,sans-serif;font-style:normal;font-weight:400;font-size:11px;line-height:20px}:host .error-container.warning{color:#ffb800}:host .error-container.warning span{color:#9e5f00}:host .error-container--cursor-pointer{cursor:pointer}:host.no-icon{margin-top:2px}:host.no-icon .error-container span{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: DrTooltipDirective, selector: "[drTooltip]", inputs: ["drTooltip", "drTooltipContext", "drTooltipPosition", "drTooltipClass", "drTooltipTheme", "drTooltipMousleaveTimeout", "drTooltipMouseEnterTimeout", "drTooltipOptions", "drTooltipShow"] }] }); }
4674
+ }
4675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrErrorComponent, decorators: [{
4676
+ type: Component,
4677
+ args: [{ selector: 'dr-error', template: "<div *ngIf=\"_control.status === 'INVALID' && !_control.pristine\"\n [drTooltip]=\"displayAsLabel ? null : errorString\"\n [drTooltipPosition]=\"errorTooltipPosition\"\n class=\"error-container\"\n [class.error-container--cursor-pointer]=\"!displayAsLabel\"\n [class.warning]=\"isWarning\">\n <i *ngIf=\"!noIcon\" class=\"dr-icon-status-error\"></i>\n <span>{{ displayAsLabel ? errorString : label }}</span>\n</div>\n", styles: [":host{display:flex;margin-top:8px}:host:empty{display:none}:host .error-container{display:flex;align-items:center;width:auto;color:#bf1d30}:host .error-container i{font-size:16px;margin-right:2px}:host .error-container span{font-family:Poppins,sans-serif;font-style:normal;font-weight:400;font-size:11px;line-height:20px}:host .error-container.warning{color:#ffb800}:host .error-container.warning span{color:#9e5f00}:host .error-container--cursor-pointer{cursor:pointer}:host.no-icon{margin-top:2px}:host.no-icon .error-container span{font-size:12px}\n"] }]
4678
+ }], ctorParameters: function () { return [{ type: i1$2.FormGroupDirective, decorators: [{
4679
+ type: Optional
4680
+ }] }]; }, propDecorators: { control: [{
4681
+ type: Input
4682
+ }], controlName: [{
4683
+ type: Input
4684
+ }], label: [{
4685
+ type: Input
4686
+ }], errorTooltipPosition: [{
4687
+ type: Input
4688
+ }], displayAsLabel: [{
4689
+ type: Input
4690
+ }], noIcon: [{
4691
+ type: Input
4692
+ }, {
4693
+ type: HostBinding,
4694
+ args: ['class.no-icon']
4695
+ }] } });
4696
+
4697
+ const noop = () => { };
4698
+ class DrCodeEditorComponent {
4699
+ constructor(cdr, cfr, injector) {
4700
+ this.cdr = cdr;
4701
+ this.cfr = cfr;
4702
+ this.injector = injector;
4703
+ this.innerValue = '';
4704
+ this.onTouchedCallback = noop;
4705
+ this.onChangeCallback = noop;
4706
+ this.parenthesesMarkers = [];
4707
+ this.parenthesisColors = [
4708
+ '#2F3E48',
4709
+ '#1f68cc',
4710
+ '#9480CD',
4711
+ '#4D9944',
4712
+ '#B03E84',
4713
+ '#B64900',
4714
+ '#267392',
4715
+ '#326AC7',
4716
+ ];
4717
+ this.parenthesesMap = {
4718
+ '}': '{',
4719
+ ']': '[',
4720
+ ')': '(',
4721
+ '{': '}',
4722
+ '[': ']',
4723
+ '(': ')',
4724
+ };
4725
+ this._hints = [];
4726
+ this.hintRefsStack = [];
4727
+ this.codeMirrorOptions = {
4728
+ lineWrapping: true,
4729
+ matchBrackets: true,
4730
+ autoRefresh: true,
4731
+ lineNumbers: false,
4732
+ mode: 'javascript',
4733
+ extraKeys: { 'Ctrl-Space': 'autocomplete' },
4734
+ autoCloseBrackets: true,
4735
+ hintOptions: {
4736
+ container: window.document.body,
4737
+ completeSingle: false,
4738
+ },
4739
+ };
4740
+ this.highlightHints = false;
4741
+ }
4742
+ set hints(values) {
4743
+ if (values?.length) {
4744
+ this._hints = values;
4745
+ this.registerHints(values);
4746
+ }
4747
+ }
4748
+ get value() {
4749
+ return this.innerValue;
4750
+ }
4751
+ set value(v) {
4752
+ if (v !== this.innerValue) {
4753
+ this.innerValue = v;
4754
+ this.onChangeCallback(v);
4755
+ this.highlightCustomFunctionsInEditor();
4756
+ this.colorizeParentheses();
4757
+ if (this.highlightHints) {
4758
+ this.updateHighlightHints();
4759
+ }
4760
+ }
4761
+ }
4762
+ writeValue(value) {
4763
+ if (value !== this.innerValue) {
4764
+ this.innerValue = value;
4765
+ }
4766
+ }
4767
+ registerOnChange(fn) {
4768
+ this.onChangeCallback = fn;
4769
+ }
4770
+ registerOnTouched(fn) {
4771
+ this.onTouchedCallback = fn;
4772
+ }
4773
+ focusChanged(bool) {
4774
+ this.isFocused = bool;
4775
+ }
4776
+ afterCodeMirrorLoaded() {
4777
+ this.doc = this.codeEditor.codeMirror.getDoc();
4778
+ if (this._hints.length) {
4779
+ this.codeEditor.codeMirror.on('keyup', (cm, event) => {
4780
+ if ((!event.ctrlKey && event.keyCode >= 65 && event.keyCode <= 90) ||
4781
+ (event.keyCode >= 97 && event.keyCode <= 122) ||
4782
+ (event.keyCode >= 46 && event.keyCode <= 57) ||
4783
+ event.keyCode === 32) {
4784
+ // @ts-ignore
4785
+ CodeMirror.commands.autocomplete(this.codeEditor.codeMirror);
4786
+ }
4787
+ });
4788
+ this.codeEditor.codeMirror.on('focus', (cm, event) => {
4789
+ setTimeout(() => {
4790
+ if (this.isFocused) {
4791
+ // @ts-ignore
4792
+ CodeMirror.commands.autocomplete(this.codeEditor.codeMirror);
4793
+ }
4794
+ }, 200);
4795
+ });
4796
+ }
4797
+ setTimeout(() => {
4798
+ if (this.highlightHints) {
4799
+ this.updateHighlightHints();
4800
+ }
4801
+ });
4802
+ }
4803
+ isClosedParenthesis(parenthesis) {
4804
+ return ['}', ')', ']'].some((value) => value === parenthesis);
4805
+ }
4806
+ colorizeParentheses() {
4807
+ const string = this.doc.getValue();
4808
+ const stack = [];
4809
+ const result = [];
4810
+ let line = 0;
4811
+ let ch = 0;
4812
+ this.parenthesesMarkers.forEach((marker) => marker.clear());
4813
+ this.parenthesesMarkers = [];
4814
+ for (let index = 0; index < string.length; index++) {
4815
+ const char = string.charAt(index);
4816
+ if (char === '\n') {
4817
+ line++;
4818
+ ch = 0;
4819
+ continue;
4820
+ }
4821
+ if (this.parenthesesMap[char]) {
4822
+ const peek = stack ? stack[stack.length - 1] : null;
4823
+ if (!this.isClosedParenthesis(char)) {
4824
+ let colorIndex = (peek?.colorIndex + 1) || 0;
4825
+ colorIndex = colorIndex > this.parenthesisColors.length - 1 ? 0 : colorIndex;
4826
+ stack.push({ value: char, color: this.parenthesisColors[colorIndex], colorIndex });
4827
+ result[index] = { value: char, color: this.parenthesisColors[colorIndex], colorIndex };
4828
+ }
4829
+ if (stack?.length && peek?.value === this.parenthesesMap[char]) {
4830
+ result[index] = { value: char, color: peek.color, colorIndex: peek.colorIndex };
4831
+ stack.pop();
4832
+ }
4833
+ }
4834
+ if (result[index]) {
4835
+ this.parenthesesMarkers.push(this.doc.markText({
4836
+ line,
4837
+ ch,
4838
+ }, {
4839
+ line,
4840
+ ch: ch + 1,
4841
+ }, {
4842
+ css: `color: ${result[index].color}`,
4843
+ }));
4844
+ }
4845
+ ch++;
4846
+ }
4847
+ }
4848
+ highlightCustomFunctionsInEditor() {
4849
+ const markers = this.markers || [];
4850
+ const existMarkers = this.existMarkers || [];
4851
+ existMarkers.forEach((m) => m.clear());
4852
+ this.doc.eachLine((line) => {
4853
+ markers.forEach((marker) => {
4854
+ const searchStr = marker.name + '\\(';
4855
+ const matches = line.text.matchAll(new RegExp(searchStr, 'g'));
4856
+ for (const match of matches) {
4857
+ existMarkers.push(this.doc.markText({
4858
+ line: line.lineNo(),
4859
+ ch: match.index,
4860
+ }, {
4861
+ line: line.lineNo(),
4862
+ ch: match.index + marker.name.length,
4863
+ }, {
4864
+ className: 'marker',
4865
+ title: marker.title,
4866
+ }));
4867
+ }
4868
+ });
4869
+ });
4870
+ }
4871
+ pasteText(text, goCharLeft) {
4872
+ this.doc.replaceSelection(text);
4873
+ this.doc.cm.focus();
4874
+ if (goCharLeft) {
4875
+ this.doc.cm.execCommand('goCharLeft');
4876
+ }
4877
+ }
4878
+ registerHints(dictionary = []) {
4879
+ const hintRegexp = /[\w$]|[ &'"#%$@]/;
4880
+ CodeMirror.registerHelper('hint', 'dictionaryHint', (editor) => {
4881
+ const cursor = editor.getCursor();
4882
+ const currentLine = editor.getLine(cursor.line);
4883
+ let start = cursor.ch;
4884
+ let end = cursor.ch;
4885
+ while (end < currentLine.length && hintRegexp.test(currentLine.charAt(end)))
4886
+ ++end;
4887
+ while (start && hintRegexp.test(currentLine.charAt(start - 1)))
4888
+ --start;
4889
+ const currentWord = (start !== end && currentLine.slice(start, end)) || '';
4890
+ const filteredDictionary = (!currentWord
4891
+ ? dictionary
4892
+ : dictionary.filter((item) => item.value.toLowerCase().includes(currentWord.toLowerCase()))).sort() || [];
4893
+ const hintsList = filteredDictionary.map((item) => {
4894
+ const displayText = item.value;
4895
+ let text = item.value;
4896
+ if (currentLine[start - 1] !== '[') {
4897
+ text = '[' + text;
4898
+ }
4899
+ if (currentLine[end] !== ']') {
4900
+ text += ']';
4901
+ }
4902
+ return {
4903
+ text,
4904
+ displayText,
4905
+ render: (element, data, current) => {
4906
+ const startIndex = current.displayText.toLowerCase().indexOf(currentWord.toLowerCase());
4907
+ const stringToReplace = current.displayText.slice(startIndex, startIndex + currentWord.length);
4908
+ const hintHTML = `${item.icon} ` + current.displayText.replace(stringToReplace, `<b>${stringToReplace}</b>`);
4909
+ const componentFactory = this.cfr.resolveComponentFactory(CodeEditorHintWrapperComponent);
4910
+ const componentRef = componentFactory.create(this.injector);
4911
+ componentRef.instance.content = hintHTML;
4912
+ componentRef.instance.tooltip = item.hint;
4913
+ componentRef.changeDetectorRef.detectChanges();
4914
+ element.appendChild(componentRef.location.nativeElement);
4915
+ this.hintRefsStack.push(componentRef);
4916
+ },
4917
+ };
4918
+ });
4919
+ return {
4920
+ list: hintsList,
4921
+ from: CodeMirror.Pos(cursor.line, start),
4922
+ to: CodeMirror.Pos(cursor.line, end),
4923
+ };
4924
+ });
4925
+ // @ts-ignore
4926
+ CodeMirror.commands.autocomplete = (cm) => {
4927
+ this.destroyHints();
4928
+ // @ts-ignore
4929
+ CodeMirror.showHint(cm, CodeMirror.hint.dictionaryHint);
4930
+ };
4931
+ }
4932
+ destroyHints() {
4933
+ this.hintRefsStack.forEach((ref) => ref.destroy());
4934
+ this.hintRefsStack = [];
4935
+ }
4936
+ updateHighlightHints() {
4937
+ const hints = this._hints || [];
4938
+ const highlightedHints = this.highlightedHints || [];
4939
+ highlightedHints.forEach((m) => m.clear());
4940
+ this.doc.eachLine((line) => {
4941
+ const matches = line.text.matchAll(/(?:\[).+?(?=\])/gm);
4942
+ for (const match of matches) {
4943
+ const hint = hints.find((h) => h.value === match[0].replace('[', ''));
4944
+ if (hint) {
4945
+ highlightedHints.push(this.doc.markText({
4946
+ line: line.lineNo(),
4947
+ ch: match.index + 1,
4948
+ }, {
4949
+ line: line.lineNo(),
4950
+ ch: match.index + 1 + hint.value.length,
4951
+ }, {
4952
+ className: 'hint-variable',
4953
+ title: hint.value,
4954
+ }));
4955
+ }
4956
+ }
4957
+ });
4958
+ this.cdr.markForCheck();
4959
+ }
4960
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
4961
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrCodeEditorComponent, selector: "dr-code-editor", inputs: { markers: "markers", highlightHints: "highlightHints", hints: "hints", control: "control" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => DrCodeEditorComponent)), multi: true }], viewQueries: [{ propertyName: "codeEditor", first: true, predicate: ["codeEditor"], descendants: true }], ngImport: i0, template: "<dr-codemirror\n #codeEditor\n [(ngModel)]=\"value\"\n [options]=\"codeMirrorOptions\"\n [class.mark-hints]=\"highlightHints\"\n [class.mirror-error]=\"control.status === 'INVALID' && !control.pristine\"\n (focusChange)=\"focusChanged($event)\"\n (codeMirrorLoaded)=\"afterCodeMirrorLoaded()\"></dr-codemirror>\n<span *ngIf=\"!isFocused && !innerValue\" class=\"codemirror-placeholder\"\n >Start typing your formula here. We support (+,-,*,/). <br />\n For Example: [Feb-22] - [Jan-22]</span\n>\n<dr-error [control]=\"control\" label=\"Formula error\"></dr-error>\n", styles: ["dr-codemirror ::ng-deep .CodeMirror{height:10rem;border:1px solid #9EA1AA;border-radius:6px}dr-codemirror ::ng-deep .CodeMirror-focused{border-color:#4646ce!important}dr-codemirror ::ng-deep .CodeMirror-line{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400}dr-codemirror ::ng-deep .CodeMirror .CodeMirror-scroll{padding:0}dr-codemirror ::ng-deep .CodeMirror .marker{color:#fff;background:#20a452}dr-codemirror ::ng-deep .CodeMirror .marker:first-child,dr-codemirror ::ng-deep .CodeMirror .cm-variable:not(.marker)+.marker{padding-left:2px;margin-left:2px}dr-codemirror ::ng-deep .CodeMirror .marker+.cm-variable:not(.marker){margin-left:2px}dr-codemirror ::ng-deep .CodeMirror-matchingbracket{color:#0f0!important}:host::ng-deep{position:relative}:host::ng-deep .mirror-error .CodeMirror{border:1px solid #BF1D30}:host::ng-deep .mark-hints .hint-variable{color:#4646ce}dr-error{position:absolute;bottom:5px;left:7px;background:#fff;margin:0}dr-error:not(:last-child){display:none}.codemirror-placeholder{color:#6d6e6f;position:absolute;top:10px;left:10px;font-size:12px;pointer-events:none}::ng-deep .CodeMirror-hints{background:#fff;border:1px solid #e5e6ea;box-shadow:0 4px 8px 1px #00000040;border-radius:6px;z-index:100;padding:8px 0}::ng-deep .CodeMirror-hints .CodeMirror-hint{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400;padding:0 12px;display:flex;align-items:center;height:32px;background:#fff;color:#333}::ng-deep .CodeMirror-hints .CodeMirror-hint,::ng-deep .CodeMirror-hints .CodeMirror-hint-active{background:#fff;color:#333}::ng-deep .CodeMirror-hints:not(:hover) .CodeMirror-hint-active,::ng-deep .CodeMirror-hints .CodeMirror-hint:hover{background:#eaeaff;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DrErrorComponent, selector: "dr-error", inputs: ["control", "controlName", "label", "errorTooltipPosition", "displayAsLabel", "noIcon"] }, { kind: "component", type: DrCodemirrorComponent, selector: "dr-codemirror", inputs: ["className", "name", "autoFocus", "options", "preserveScrollPosition"], outputs: ["cursorActivity", "focusChange", "scroll", "drop", "codeMirrorLoaded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4962
+ }
4963
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorComponent, decorators: [{
4964
+ type: Component,
4965
+ args: [{ selector: 'dr-code-editor', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => DrCodeEditorComponent)), multi: true }], template: "<dr-codemirror\n #codeEditor\n [(ngModel)]=\"value\"\n [options]=\"codeMirrorOptions\"\n [class.mark-hints]=\"highlightHints\"\n [class.mirror-error]=\"control.status === 'INVALID' && !control.pristine\"\n (focusChange)=\"focusChanged($event)\"\n (codeMirrorLoaded)=\"afterCodeMirrorLoaded()\"></dr-codemirror>\n<span *ngIf=\"!isFocused && !innerValue\" class=\"codemirror-placeholder\"\n >Start typing your formula here. We support (+,-,*,/). <br />\n For Example: [Feb-22] - [Jan-22]</span\n>\n<dr-error [control]=\"control\" label=\"Formula error\"></dr-error>\n", styles: ["dr-codemirror ::ng-deep .CodeMirror{height:10rem;border:1px solid #9EA1AA;border-radius:6px}dr-codemirror ::ng-deep .CodeMirror-focused{border-color:#4646ce!important}dr-codemirror ::ng-deep .CodeMirror-line{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400}dr-codemirror ::ng-deep .CodeMirror .CodeMirror-scroll{padding:0}dr-codemirror ::ng-deep .CodeMirror .marker{color:#fff;background:#20a452}dr-codemirror ::ng-deep .CodeMirror .marker:first-child,dr-codemirror ::ng-deep .CodeMirror .cm-variable:not(.marker)+.marker{padding-left:2px;margin-left:2px}dr-codemirror ::ng-deep .CodeMirror .marker+.cm-variable:not(.marker){margin-left:2px}dr-codemirror ::ng-deep .CodeMirror-matchingbracket{color:#0f0!important}:host::ng-deep{position:relative}:host::ng-deep .mirror-error .CodeMirror{border:1px solid #BF1D30}:host::ng-deep .mark-hints .hint-variable{color:#4646ce}dr-error{position:absolute;bottom:5px;left:7px;background:#fff;margin:0}dr-error:not(:last-child){display:none}.codemirror-placeholder{color:#6d6e6f;position:absolute;top:10px;left:10px;font-size:12px;pointer-events:none}::ng-deep .CodeMirror-hints{background:#fff;border:1px solid #e5e6ea;box-shadow:0 4px 8px 1px #00000040;border-radius:6px;z-index:100;padding:8px 0}::ng-deep .CodeMirror-hints .CodeMirror-hint{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400;padding:0 12px;display:flex;align-items:center;height:32px;background:#fff;color:#333}::ng-deep .CodeMirror-hints .CodeMirror-hint,::ng-deep .CodeMirror-hints .CodeMirror-hint-active{background:#fff;color:#333}::ng-deep .CodeMirror-hints:not(:hover) .CodeMirror-hint-active,::ng-deep .CodeMirror-hints .CodeMirror-hint:hover{background:#eaeaff;cursor:pointer}\n"] }]
4966
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { markers: [{
4967
+ type: Input
4968
+ }], highlightHints: [{
4969
+ type: Input
4970
+ }], hints: [{
4971
+ type: Input
4972
+ }], control: [{
4973
+ type: Input
4974
+ }], codeEditor: [{
4975
+ type: ViewChild,
4976
+ args: ['codeEditor']
4977
+ }] } });
4978
+
4426
4979
  var Scenario;
4427
4980
  (function (Scenario) {
4428
4981
  Scenario["ACTUALS"] = "Actuals";
@@ -6205,61 +6758,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6205
6758
  }]
6206
6759
  }], ctorParameters: function () { return []; } });
6207
6760
 
6208
- class DrErrorComponent {
6209
- constructor(formGroupDirective) {
6210
- this.formGroupDirective = formGroupDirective;
6211
- this.label = 'Field error';
6212
- this.errorTooltipPosition = 'top';
6213
- this.displayAsLabel = false;
6214
- this.noIcon = false;
6215
- }
6216
- set control(value) {
6217
- if (value) {
6218
- this._control = value;
6219
- }
6220
- }
6221
- set controlName(value) {
6222
- if (!value || typeof value !== 'string')
6223
- return;
6224
- if (!this.formGroupDirective) {
6225
- throw new Error('You must provide a formGroupDirective to use this input');
6226
- }
6227
- this.control = this.formGroupDirective.control.get(value);
6228
- }
6229
- get errorString() {
6230
- if (this._control.hasError('required')) {
6231
- return 'Field is required!';
6232
- }
6233
- return this._control.errors?.errorString || null;
6234
- }
6235
- get isWarning() {
6236
- return this._control.errors?.isWarning;
6237
- }
6238
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrErrorComponent, deps: [{ token: i1$2.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
6239
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrErrorComponent, selector: "dr-error", inputs: { control: "control", controlName: "controlName", label: "label", errorTooltipPosition: "errorTooltipPosition", displayAsLabel: "displayAsLabel", noIcon: "noIcon" }, host: { properties: { "class.no-icon": "this.noIcon" } }, ngImport: i0, template: "<div *ngIf=\"_control.status === 'INVALID' && !_control.pristine\"\n [drTooltip]=\"displayAsLabel ? null : errorString\"\n [drTooltipPosition]=\"errorTooltipPosition\"\n class=\"error-container\"\n [class.error-container--cursor-pointer]=\"!displayAsLabel\"\n [class.warning]=\"isWarning\">\n <i *ngIf=\"!noIcon\" class=\"dr-icon-status-error\"></i>\n <span>{{ displayAsLabel ? errorString : label }}</span>\n</div>\n", styles: [":host{display:flex;margin-top:8px}:host:empty{display:none}:host .error-container{display:flex;align-items:center;width:auto;color:#bf1d30}:host .error-container i{font-size:16px;margin-right:2px}:host .error-container span{font-family:Poppins,sans-serif;font-style:normal;font-weight:400;font-size:11px;line-height:20px}:host .error-container.warning{color:#ffb800}:host .error-container.warning span{color:#9e5f00}:host .error-container--cursor-pointer{cursor:pointer}:host.no-icon{margin-top:2px}:host.no-icon .error-container span{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: DrTooltipDirective, selector: "[drTooltip]", inputs: ["drTooltip", "drTooltipContext", "drTooltipPosition", "drTooltipClass", "drTooltipTheme", "drTooltipMousleaveTimeout", "drTooltipMouseEnterTimeout", "drTooltipOptions", "drTooltipShow"] }] }); }
6240
- }
6241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrErrorComponent, decorators: [{
6242
- type: Component,
6243
- args: [{ selector: 'dr-error', template: "<div *ngIf=\"_control.status === 'INVALID' && !_control.pristine\"\n [drTooltip]=\"displayAsLabel ? null : errorString\"\n [drTooltipPosition]=\"errorTooltipPosition\"\n class=\"error-container\"\n [class.error-container--cursor-pointer]=\"!displayAsLabel\"\n [class.warning]=\"isWarning\">\n <i *ngIf=\"!noIcon\" class=\"dr-icon-status-error\"></i>\n <span>{{ displayAsLabel ? errorString : label }}</span>\n</div>\n", styles: [":host{display:flex;margin-top:8px}:host:empty{display:none}:host .error-container{display:flex;align-items:center;width:auto;color:#bf1d30}:host .error-container i{font-size:16px;margin-right:2px}:host .error-container span{font-family:Poppins,sans-serif;font-style:normal;font-weight:400;font-size:11px;line-height:20px}:host .error-container.warning{color:#ffb800}:host .error-container.warning span{color:#9e5f00}:host .error-container--cursor-pointer{cursor:pointer}:host.no-icon{margin-top:2px}:host.no-icon .error-container span{font-size:12px}\n"] }]
6244
- }], ctorParameters: function () { return [{ type: i1$2.FormGroupDirective, decorators: [{
6245
- type: Optional
6246
- }] }]; }, propDecorators: { control: [{
6247
- type: Input
6248
- }], controlName: [{
6249
- type: Input
6250
- }], label: [{
6251
- type: Input
6252
- }], errorTooltipPosition: [{
6253
- type: Input
6254
- }], displayAsLabel: [{
6255
- type: Input
6256
- }], noIcon: [{
6257
- type: Input
6258
- }, {
6259
- type: HostBinding,
6260
- args: ['class.no-icon']
6261
- }] } });
6262
-
6263
6761
  class DrDetailsListComponent {
6264
6762
  set items(val) {
6265
6763
  if (!val) {
@@ -7419,6 +7917,12 @@ var FeedbackSentiment;
7419
7917
  })(FeedbackSentiment || (FeedbackSentiment = {}));
7420
7918
  ;
7421
7919
 
7920
+ var ICodeEditorHintIcon;
7921
+ (function (ICodeEditorHintIcon) {
7922
+ ICodeEditorHintIcon["VALUE"] = "#";
7923
+ ICodeEditorHintIcon["CALCULATED_VALUE"] = "=";
7924
+ })(ICodeEditorHintIcon || (ICodeEditorHintIcon = {}));
7925
+
7422
7926
  class DrToastrService {
7423
7927
  constructor(toastr) {
7424
7928
  this.toastr = toastr;
@@ -8249,11 +8753,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8249
8753
  }]
8250
8754
  }] });
8251
8755
 
8756
+ class DrCodeEditorModule {
8757
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8758
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, declarations: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent], imports: [CommonModule,
8759
+ FormsModule,
8760
+ ReactiveFormsModule,
8761
+ DrTooltipModule,
8762
+ DrErrorModule], exports: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent] }); }
8763
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, imports: [CommonModule,
8764
+ FormsModule,
8765
+ ReactiveFormsModule,
8766
+ DrTooltipModule,
8767
+ DrErrorModule] }); }
8768
+ }
8769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, decorators: [{
8770
+ type: NgModule,
8771
+ args: [{
8772
+ imports: [
8773
+ CommonModule,
8774
+ FormsModule,
8775
+ ReactiveFormsModule,
8776
+ DrTooltipModule,
8777
+ DrErrorModule
8778
+ ],
8779
+ exports: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent],
8780
+ providers: [],
8781
+ declarations: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent],
8782
+ }]
8783
+ }] });
8784
+
8252
8785
  /* components */
8253
8786
 
8254
8787
  /**
8255
8788
  * Generated bundle index. Do not edit.
8256
8789
  */
8257
8790
 
8258
- export { AnyTagComponent, BadgeStatus, CHAT_MESSAGE_TYPE, CalendarView, ChatMessage, ChatRole, CheckboxComponent, ClickOutsideDirective, ClickOutsideModule, CustomDateFormat, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DateTags, DayTagComponent, DefaultToastrComponent, DefaultTreeviewEventParser, DefaultTreeviewI18n, DialogModalWrapperComponent, DialogService, DialogWrapperComponent, DownlineTreeviewEventParser, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAlertComponent, DrAlertModule, DrAlertTheme, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrAvatarService, DrBadgeStatusComponent, DrBadgeStatusModule, DrButtonComponent, DrChatAlertComponent, DrChatComponent, DrChatCustomMessageDirective, DrChatFormComponent, DrChatMessageComponent, DrChatMessageFileComponent, DrChatMessageTextComponent, DrChatModule, DrChatSuggestionsComponent, DrDatePickerComponent, DrDatePickerCustomHeaderComponent, DrDatePickerFormatDirective, DrDatePickerRangeComponent, DrDatePickerWithTimeframeComponent, DrDetailsListComponent, DrDetailsListModule, DrDialogModule, DrDotFlashingComponent, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrScenarioConfigurationComponent, DrScenarioModule, DrScenarioTagConfigurationComponent, DrSelectAddItemComponent, DrSelectComponent, DrSharedUtils, DrShowTimeframePipe, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrTagsConstructorComponent, DrTagsConstructorModule, DrToastrModule, DrToastrService, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, FeedbackSentiment, ForecastTagComponent, IMAGE_TYPES, ListTagComponent, ListTagModule, MonthTagComponent, OrderDownlineTreeviewEventParser, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, Scenario, ScenarioService, StepperComponent, TagTypes, TagsConfigSubType, TagsConstructorService, TimeframeOption, ToastrStatus, ToastrStatusIcon, ToggleButtonMode, TooltipComponent, TooltipDefaultComponent, TooltipInfoComponent, TooltipInfoSimpleComponent, TooltipNoBodyComponent, TooltipPosition, TooltipProcessDefaultComponent, TooltipTheme, TreeviewComponent, TreeviewConfig, TreeviewEventParser, TreeviewHelper, TreeviewI18n, TreeviewItem, TreeviewModule, TreeviewPipe, WeekTagComponent, YearTagComponent };
8791
+ export { AnyTagComponent, BadgeStatus, CHAT_MESSAGE_TYPE, CalendarView, ChatMessage, ChatRole, CheckboxComponent, ClickOutsideDirective, ClickOutsideModule, CodeEditorHintWrapperComponent, CustomDateFormat, DIALOG_BUTTON_LABEL, DIALOG_FIELD_TYPE, DIALOG_SIZE, DateFromats, DatePickerPeriodPosition, DateTagComponent, DateTagModule, DateTags, DayTagComponent, DefaultToastrComponent, DefaultTreeviewEventParser, DefaultTreeviewI18n, DialogModalWrapperComponent, DialogService, DialogWrapperComponent, DownlineTreeviewEventParser, DrAccordionComponent, DrAccordionItemBodyComponent, DrAccordionItemComponent, DrAccordionItemHeaderComponent, DrAccordionModule, DrAlertComponent, DrAlertModule, DrAlertTheme, DrAvatarComponent, DrAvatarModule, DrAvatarPipe, DrAvatarService, DrBadgeStatusComponent, DrBadgeStatusModule, DrButtonComponent, DrChatAlertComponent, DrChatComponent, DrChatCustomMessageDirective, DrChatFormComponent, DrChatMessageComponent, DrChatMessageFileComponent, DrChatMessageTextComponent, DrChatModule, DrChatSuggestionsComponent, DrCodeEditorComponent, DrCodeEditorModule, DrCodemirrorComponent, DrDatePickerComponent, DrDatePickerCustomHeaderComponent, DrDatePickerFormatDirective, DrDatePickerRangeComponent, DrDatePickerWithTimeframeComponent, DrDetailsListComponent, DrDetailsListModule, DrDialogModule, DrDotFlashingComponent, DrDropdownComponent, DrDropdownDirective, DrDropdownItemShowPipe, DrDropdownModule, DrDropdownPositionDirective, DrDropdownService, DrErrorComponent, DrErrorModule, DrInputComponent, DrInputsModule, DrLayoutBodyComponent, DrLayoutComponent, DrLayoutHeaderComponent, DrLayoutModule, DrModelDebounceChangeDirective, DrPopoverAlignmentDimension, DrPopoverComponent, DrPopoverDirective, DrPopoverModule, DrPopoverRef, DrPopoverService, DrScenarioConfigurationComponent, DrScenarioModule, DrScenarioTagConfigurationComponent, DrSelectAddItemComponent, DrSelectComponent, DrSharedUtils, DrShowTimeframePipe, DrSpinnerComponent, DrSpinnerDirective, DrSpinnerModule, DrStepperModule, DrTabComponent, DrTabsComponent, DrTabsModule, DrTagComponent, DrTagModule, DrTagsConstructorComponent, DrTagsConstructorModule, DrToastrModule, DrToastrService, DrToggleButtonComponent, DrToggleComponent, DrTooltipDirective, DrTooltipModule, FeedbackSentiment, ForecastTagComponent, ICodeEditorHintIcon, IMAGE_TYPES, ListTagComponent, ListTagModule, MonthTagComponent, OrderDownlineTreeviewEventParser, QuarterTagComponent, RadioButtonComponent, RadioGroupComponent, Scenario, ScenarioService, StepperComponent, TagTypes, TagsConfigSubType, TagsConstructorService, TimeframeOption, ToastrStatus, ToastrStatusIcon, ToggleButtonMode, TooltipComponent, TooltipDefaultComponent, TooltipInfoComponent, TooltipInfoSimpleComponent, TooltipNoBodyComponent, TooltipPosition, TooltipProcessDefaultComponent, TooltipTheme, TreeviewComponent, TreeviewConfig, TreeviewEventParser, TreeviewHelper, TreeviewI18n, TreeviewItem, TreeviewModule, TreeviewPipe, WeekTagComponent, YearTagComponent };
8259
8792
  //# sourceMappingURL=datarailsshared-datarailsshared.mjs.map