@datarailsshared/datarailsshared 1.5.284 → 1.5.286

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 (25) hide show
  1. package/assets/styles/_styles.scss +4 -0
  2. package/datarailsshared-datarailsshared-1.5.286.tgz +0 -0
  3. package/esm2022/lib/dr-code-editor/components/code-editor-hint-wrapper.component.mjs +15 -0
  4. package/esm2022/lib/dr-code-editor/components/dr-codemirror.component.mjs +201 -0
  5. package/esm2022/lib/dr-code-editor/dr-code-editor.component.mjs +292 -0
  6. package/esm2022/lib/dr-code-editor/dr-code-editor.module.mjs +42 -0
  7. package/esm2022/lib/dr-code-editor/models/code-editor-hint.mjs +6 -0
  8. package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.mjs +12 -2
  9. package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.mjs +7 -2
  10. package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.mjs +3 -2
  11. package/esm2022/lib/utils/dr-shared-utils.mjs +4 -1
  12. package/esm2022/public-api.mjs +6 -1
  13. package/fesm2022/datarailsshared-datarailsshared.mjs +617 -68
  14. package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
  15. package/lib/dr-code-editor/components/code-editor-hint-wrapper.component.d.ts +7 -0
  16. package/lib/dr-code-editor/components/dr-codemirror.component.d.ts +47 -0
  17. package/lib/dr-code-editor/dr-code-editor.component.d.ts +44 -0
  18. package/lib/dr-code-editor/dr-code-editor.module.d.ts +17 -0
  19. package/lib/dr-code-editor/models/code-editor-hint.d.ts +14 -0
  20. package/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.d.ts +3 -2
  21. package/lib/utils/dr-shared-utils.d.ts +1 -0
  22. package/package.json +1 -1
  23. package/public-api.d.ts +5 -0
  24. package/styles.css +526 -0
  25. package/datarailsshared-datarailsshared-1.5.284.tgz +0 -0
@@ -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 {
@@ -1029,7 +1037,8 @@ class DrDatePickerCustomHeaderComponent {
1029
1037
  this.calendarView = CalendarView;
1030
1038
  _calendar.stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => this.setPeriodLabels());
1031
1039
  this.datePickerService.format$.pipe(takeUntil(this._destroyed)).subscribe(value => {
1032
- this.selectedTimeframe = this.timeframeOptions.filter(option => option.format === value)[0].value;
1040
+ const timeframe = this.datePickerService.getTimeframe(value);
1041
+ this.selectedTimeframe = this.timeframeOptions.filter(option => option.timeframe === timeframe)[0].value;
1033
1042
  _calendar.currentView = this.selectedTimeframe;
1034
1043
  this.setPeriodLabels();
1035
1044
  if (this.selectedTimeframe === CalendarView.FOR_QUARTERS) {
@@ -1189,7 +1198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1189
1198
  args: ['drDatePickerFormat']
1190
1199
  }] } });
1191
1200
 
1192
- const noop$1 = () => {
1201
+ const noop$2 = () => {
1193
1202
  };
1194
1203
  class DrDatePickerComponent {
1195
1204
  set min(minDate) {
@@ -1226,8 +1235,8 @@ class DrDatePickerComponent {
1226
1235
  this.timeframeOption = TimeframeOption;
1227
1236
  this.innerValue = null;
1228
1237
  this.destroyed$ = new Subject();
1229
- this.onTouchedCallback = noop$1;
1230
- this.onChangeCallback = noop$1;
1238
+ this.onTouchedCallback = noop$2;
1239
+ this.onChangeCallback = noop$2;
1231
1240
  // Should be as arrow function to avoid lose scope
1232
1241
  this.dateFilter = (moment) => {
1233
1242
  if (this.datepickerFilter && moment) {
@@ -1251,7 +1260,17 @@ class DrDatePickerComponent {
1251
1260
  }
1252
1261
  ngOnChanges(changes) {
1253
1262
  if (changes.format?.currentValue && changes.format.currentValue !== changes.format.previousValue) {
1254
- this.datePickerService.updateTimeframeAndFormat(changes.format.currentValue);
1263
+ let timeframe;
1264
+ let format = this.datePickerService.getConfiguredFormat(this.format);
1265
+ if (format) {
1266
+ timeframe = this.format;
1267
+ }
1268
+ else {
1269
+ format = this.datePickerService.normalizeValue(this.format);
1270
+ timeframe = this.datePickerService.getTimeframe(format);
1271
+ }
1272
+ this.datePickerService.timeframe = timeframe;
1273
+ this.datePickerService.format$.next(format);
1255
1274
  }
1256
1275
  }
1257
1276
  /**
@@ -2262,8 +2281,8 @@ class DrInputComponent {
2262
2281
  this.clearHandler = new EventEmitter();
2263
2282
  this.buttonHandler = new EventEmitter();
2264
2283
  this.tabindex = -1;
2265
- this.onChangeCallback = noop$2;
2266
- this.onTouchedCallback = noop$2;
2284
+ this.onChangeCallback = noop$3;
2285
+ this.onTouchedCallback = noop$3;
2267
2286
  this.onChange = () => {
2268
2287
  };
2269
2288
  this.onTouched = () => {
@@ -3217,6 +3236,11 @@ class DrDatePickerWithTimeframeComponent extends DrDatePickerComponent {
3217
3236
  });
3218
3237
  }
3219
3238
  }
3239
+ ngOnChanges(changes) {
3240
+ if (changes.format?.currentValue && changes.format.currentValue !== changes.format.previousValue) {
3241
+ this.datePickerService.updateTimeframeAndFormat(changes.format.currentValue);
3242
+ }
3243
+ }
3220
3244
  pagingClicked(forward) {
3221
3245
  if (this.pagingSetup[this.datePickerService.timeframe]) {
3222
3246
  const nextValue = this.pagingSetup[this.datePickerService.timeframe](forward);
@@ -3268,7 +3292,7 @@ class DrDatePickerWithTimeframeComponent extends DrDatePickerComponent {
3268
3292
  /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrDatePickerWithTimeframeComponent, selector: "dr-date-picker-with-timeframe", inputs: { isDashboardDatepicker: "isDashboardDatepicker", dateFormatConfig: "dateFormatConfig", canSelectTimeframe: "canSelectTimeframe", availableTimeframes: "availableTimeframes", paginationDebounce: "paginationDebounce", isUsingDateTagPresets: "isUsingDateTagPresets", presetTag: "presetTag" }, outputs: { onChangeFormat: "onChangeFormat", onChangePresetTag: "onChangePresetTag" }, host: { properties: { "class.dr-date-picker-on-dashboard": "this.isDashboardClassDisplayed" } }, providers: [
3269
3293
  { provide: NG_VALUE_ACCESSOR, useExisting: DrDatePickerWithTimeframeComponent, multi: true },
3270
3294
  { provide: DrDatePickerService }
3271
- ], usesInheritance: true, ngImport: i0, template: "<dr-button [disabled]=\"isPrevDateDisabled\" *ngIf=\"!disabled\" theme=\"icon\" icon=\"dr-icon-arrow-left\" (click)=\"pagingClicked(false)\"></dr-button>\n<div class=\"dr-datepicker-input-container\">\n <i *ngIf=\"isDashboardDatepicker\" class=\"dr-icon-date\"></i>\n\n <div class=\"dr-datepicker-input-container__formatted-value-display\" (click)=\"datepickerInput.click()\">\n <span *ngIf=\"presetTagSelected && datePickerService.isUsingDateTagPresets\"> {{ presetTagSelected }} </span>\n <span>{{ presetTagSelected && datePickerService.isUsingDateTagPresets ? '(' + displayedFormattedValue + ')' : displayedFormattedValue }}</span>\n </div>\n <input\n #datepickerInput\n [(ngModel)]=\"value\"\n (click)=\"datePicker.open()\"\n [matDatepicker]=\"datePicker\"\n [readonly]=\"readonly\"\n [min]=\"_min\"\n [max]=\"_max\"\n />\n</div>\n<dr-button [disabled]=\"isNextDateDisabled\" *ngIf=\"!disabled\" theme=\"icon\" icon=\"dr-icon-arrow-right\" (click)=\"pagingClicked(true)\"></dr-button>\n<mat-datepicker #datePicker\n class=\"dr-timeframe-datepicker\"\n [calendarHeaderComponent]=\"customHeader\"\n (yearSelected)=\"chosenPeriodHandler($event, timeframeOption.YEAR)\"\n (monthSelected)=\"chosenPeriodHandler($event, timeframeOption.MONTH)\"\n [panelClass]=\"datePickerService.isUsingDateTagPresets ? 'date-picker-preset-tag' : 'dr-timeframe-datepicker'\"\n >\n</mat-datepicker>\n", styles: [":host{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:Poppins,sans-serif;background-color:#fff;border:1px solid #9EA1AA;border-radius:6px;color:#333;overflow:hidden;outline:none;cursor:pointer}:host:hover{border-color:#9ea1aa}:host.active,:host:focus-within{border-color:#4646ce!important;color:#333}:host.disabled{pointer-events:none;border:1px solid #AEABAC;background:#f0f1f4;color:#aeabac}:host.disabled:after{color:#aeabac}:host.ng-valid.ng-dirty{border-color:#037c5a}:host.ng-invalid.ng-dirty:not(:focus-within){border-color:#bf1d30!important}:host.ng-untouched.ng-valid{border-color:#9ea1aa}:host:after,:host:before{position:absolute;display:flex;border-color:#6D6E6F transparent transparent;color:#6d6e6f}:host:after{font-family:DataRails!important;content:\"\\ea13\";font-size:24px;color:#6d6e6f;top:0;bottom:0;right:8px;pointer-events:none;position:absolute;display:flex;align-items:center;justify-content:center}:host i{display:flex;align-items:center;position:absolute;color:#6d6e6f;left:8px;top:0;bottom:0}:host input{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}:host input.when-quarter{position:absolute;visibility:hidden}:host input:disabled{border:none;color:#aeabac;background:transparent}:host input::-webkit-search-decoration,:host input::-webkit-search-cancel-button,:host input::-webkit-search-results-button,:host input::-webkit-search-results-decoration{-webkit-appearance:none}:host input::placeholder{color:#6d6e6f;font-size:14px;line-height:18px}::ng-deep .mat-datepicker-popup .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important}::ng-deep .mat-datepicker-popup .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit}::ng-deep .mat-datepicker-popup .mat-datepicker-content button[disabled]:hover{border:inherit}::ng-deep .mat-datepicker-popup .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),::ng-deep .mat-datepicker-popup .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff}::ng-deep .mat-datepicker-popup .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#f2f2fb;color:#4646ce;font-weight:600}::ng-deep .mat-datepicker-popup .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600}::ng-deep .mat-datepicker-popup .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none}::ng-deep .mat-datepicker-popup .mat-button-focus-overlay{background:#f5f5f5}::ng-deep .mat-datepicker-popup .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#f5f5f5;transition:opacity .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-datepicker-popup .mat-calendar-controls .mat-calendar-period-button:hover{background:#f5f5f5;transition:background .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-datepicker-popup .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#333}::ng-deep .mat-datepicker-popup .mat-calendar-table-header-divider{display:none}::ng-deep .mat-datepicker-popup .mat-calendar-body-label{color:#fff;padding:0}:host{border:none;display:flex;align-items:center}:host.disabled{background:transparent;color:#aeabac}:host.disabled.dr-date-picker-on-dashboard{border:none;padding:0 8px}:host.disabled.dr-date-picker-on-dashboard .dr-datepicker-input-container__formatted-value-display{text-decoration:none;color:#aeabac;font-weight:400}:host.disabled.dr-date-picker-on-dashboard .dr-datepicker-input-container i{color:#aeabac}:host.dr-date-picker-on-dashboard{width:-moz-fit-content;width:fit-content;justify-content:space-between}:host.dr-date-picker-on-dashboard mat-datepicker{position:absolute}:host.dr-date-picker-on-dashboard:after{visibility:hidden}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:-10px}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container__formatted-value-display{font-weight:600;width:auto;margin-left:5px}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container .dr-icon-date{display:block;position:relative;top:0;margin-right:8px;color:#4e566c}:host .dr-datepicker-input-container input{visibility:hidden;position:absolute;width:100%}:host .dr-datepicker-input-container__formatted-value-display{width:90px;height:22px;padding-left:0;text-align:center;line-height:22px;color:#0c142b;text-decoration-line:underline}:host .dr-datepicker-input-container__formatted-value-display:hover{background-color:#f2f2fb;border-radius:5px;cursor:pointer;text-decoration-line:underline;color:#4646ce}::ng-deep .date-picker-preset-tag{width:386px!important}::ng-deep .date-picker-preset-tag .mat-calendar-content{padding-left:32px!important;padding-right:32px!important}\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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3295
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<dr-button [disabled]=\"isPrevDateDisabled\" *ngIf=\"!disabled\" theme=\"icon\" icon=\"dr-icon-arrow-left\" (click)=\"pagingClicked(false)\"></dr-button>\n<div class=\"dr-datepicker-input-container\">\n <i *ngIf=\"isDashboardDatepicker\" class=\"dr-icon-date\"></i>\n\n <div class=\"dr-datepicker-input-container__formatted-value-display\" (click)=\"datepickerInput.click()\">\n <span *ngIf=\"presetTagSelected && datePickerService.isUsingDateTagPresets\"> {{ presetTagSelected }} </span>\n <span>{{ presetTagSelected && datePickerService.isUsingDateTagPresets ? '(' + displayedFormattedValue + ')' : displayedFormattedValue }}</span>\n </div>\n <input\n #datepickerInput\n [(ngModel)]=\"value\"\n (click)=\"datePicker.open()\"\n [matDatepicker]=\"datePicker\"\n [readonly]=\"readonly\"\n [min]=\"_min\"\n [max]=\"_max\"\n />\n</div>\n<dr-button [disabled]=\"isNextDateDisabled\" *ngIf=\"!disabled\" theme=\"icon\" icon=\"dr-icon-arrow-right\" (click)=\"pagingClicked(true)\"></dr-button>\n<mat-datepicker #datePicker\n class=\"dr-timeframe-datepicker\"\n [calendarHeaderComponent]=\"customHeader\"\n (yearSelected)=\"chosenPeriodHandler($event, timeframeOption.YEAR)\"\n (monthSelected)=\"chosenPeriodHandler($event, timeframeOption.MONTH)\"\n [panelClass]=\"datePickerService.isUsingDateTagPresets ? 'date-picker-preset-tag' : 'dr-timeframe-datepicker'\"\n >\n</mat-datepicker>\n", styles: [":host{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:Poppins,sans-serif;background-color:#fff;border:1px solid #9EA1AA;border-radius:6px;color:#333;overflow:hidden;outline:none;cursor:pointer}:host:hover{border-color:#9ea1aa}:host.active,:host:focus-within{border-color:#4646ce!important;color:#333}:host.disabled{pointer-events:none;border:1px solid #AEABAC;background:#f0f1f4;color:#aeabac}:host.disabled:after{color:#aeabac}:host.ng-valid.ng-dirty{border-color:#037c5a}:host.ng-invalid.ng-dirty:not(:focus-within){border-color:#bf1d30!important}:host.ng-untouched.ng-valid{border-color:#9ea1aa}:host:after,:host:before{position:absolute;display:flex;border-color:#6D6E6F transparent transparent;color:#6d6e6f}:host:after{font-family:DataRails!important;content:\"\\ea13\";font-size:24px;color:#6d6e6f;top:0;bottom:0;right:8px;pointer-events:none;position:absolute;display:flex;align-items:center;justify-content:center}:host i{display:flex;align-items:center;position:absolute;color:#6d6e6f;left:8px;top:0;bottom:0}:host input{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}:host input.when-quarter{position:absolute;visibility:hidden}:host input:disabled{border:none;color:#aeabac;background:transparent}:host input::-webkit-search-decoration,:host input::-webkit-search-cancel-button,:host input::-webkit-search-results-button,:host input::-webkit-search-results-decoration{-webkit-appearance:none}:host input::placeholder{color:#6d6e6f;font-size:14px;line-height:18px}::ng-deep .mat-datepicker-popup .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important}::ng-deep .mat-datepicker-popup .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit}::ng-deep .mat-datepicker-popup .mat-datepicker-content button[disabled]:hover{border:inherit}::ng-deep .mat-datepicker-popup .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),::ng-deep .mat-datepicker-popup .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff}::ng-deep .mat-datepicker-popup .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#f2f2fb;color:#4646ce;font-weight:600}::ng-deep .mat-datepicker-popup .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600}::ng-deep .mat-datepicker-popup .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none}::ng-deep .mat-datepicker-popup .mat-button-focus-overlay{background:#f5f5f5}::ng-deep .mat-datepicker-popup .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#f5f5f5;transition:opacity .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-datepicker-popup .mat-calendar-controls .mat-calendar-period-button:hover{background:#f5f5f5;transition:background .2s cubic-bezier(.35,0,.25,1)}::ng-deep .mat-datepicker-popup .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#333}::ng-deep .mat-datepicker-popup .mat-calendar-table-header-divider{display:none}::ng-deep .mat-datepicker-popup .mat-calendar-body-label{color:#fff;padding:0}:host{border:none;display:flex;align-items:center}:host.disabled{background:transparent;color:#aeabac}:host.disabled.dr-date-picker-on-dashboard{border:none;padding:0 8px}:host.disabled.dr-date-picker-on-dashboard .dr-datepicker-input-container__formatted-value-display{text-decoration:none;color:#aeabac;font-weight:400}:host.disabled.dr-date-picker-on-dashboard .dr-datepicker-input-container i{color:#aeabac}:host.dr-date-picker-on-dashboard{width:-moz-fit-content;width:fit-content;justify-content:space-between}:host.dr-date-picker-on-dashboard mat-datepicker{position:absolute}:host.dr-date-picker-on-dashboard:after{visibility:hidden}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:-10px}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container__formatted-value-display{font-weight:600;width:auto;margin-left:5px}:host.dr-date-picker-on-dashboard .dr-datepicker-input-container .dr-icon-date{display:block;position:relative;top:0;margin-right:8px;color:#4e566c}:host .dr-datepicker-input-container input{visibility:hidden;position:absolute;width:100%}:host .dr-datepicker-input-container__formatted-value-display{width:90px;height:22px;padding-left:0;text-align:center;line-height:22px;color:#0c142b;text-decoration-line:underline}:host .dr-datepicker-input-container__formatted-value-display:hover{background-color:#f2f2fb;border-radius:5px;cursor:pointer;text-decoration-line:underline;color:#4646ce}::ng-deep .date-picker-preset-tag{width:386px!important}::ng-deep .date-picker-preset-tag .mat-calendar-content{padding-left:32px!important;padding-right:32px!important}\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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3272
3296
  }
3273
3297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrDatePickerWithTimeframeComponent, decorators: [{
3274
3298
  type: Component,
@@ -3299,7 +3323,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3299
3323
  type: Output
3300
3324
  }] } });
3301
3325
 
3302
- const noop = () => { };
3326
+ const noop$1 = () => { };
3303
3327
  class DrDatePickerRangeComponent {
3304
3328
  get defaultValue() {
3305
3329
  return {
@@ -3340,8 +3364,8 @@ class DrDatePickerRangeComponent {
3340
3364
  this.labelTo = 'To';
3341
3365
  this.placeholderFrom = 'Select...';
3342
3366
  this.placeholderTo = 'Select...';
3343
- this.onTouchedCallback = noop;
3344
- this.onChangeCallback = noop;
3367
+ this.onTouchedCallback = noop$1;
3368
+ this.onChangeCallback = noop$1;
3345
3369
  this.innerValue = this.defaultValue;
3346
3370
  this.innerValueFrom = null;
3347
3371
  this.innerValueTo = null;
@@ -4423,6 +4447,551 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4423
4447
  args: ['class']
4424
4448
  }] } });
4425
4449
 
4450
+ class CodeEditorHintWrapperComponent {
4451
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CodeEditorHintWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4452
+ /** @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"] }] }); }
4453
+ }
4454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CodeEditorHintWrapperComponent, decorators: [{
4455
+ type: Component,
4456
+ args: [{
4457
+ selector: 'dr-code-editor-hint-wrapper',
4458
+ template: ` <span [innerHTML]="content" [drTooltip]="tooltip"></span> `,
4459
+ }]
4460
+ }] });
4461
+
4462
+ class DrCodemirrorComponent {
4463
+ set options(value) {
4464
+ this._options = value;
4465
+ if (!this._differ && value) {
4466
+ this._differ = this._differs.find(value).create();
4467
+ }
4468
+ }
4469
+ constructor(_differs, _ngZone) {
4470
+ this._differs = _differs;
4471
+ this._ngZone = _ngZone;
4472
+ this.className = '';
4473
+ this.name = 'codemirror';
4474
+ this.autoFocus = false;
4475
+ this.preserveScrollPosition = false;
4476
+ this.cursorActivity = new EventEmitter();
4477
+ this.focusChange = new EventEmitter();
4478
+ this.scroll = new EventEmitter();
4479
+ this.drop = new EventEmitter();
4480
+ this.codeMirrorLoaded = new EventEmitter();
4481
+ this.value = '';
4482
+ this.disabled = false;
4483
+ this.isFocused = false;
4484
+ this.onChange = (_) => { };
4485
+ this.onTouched = () => { };
4486
+ }
4487
+ get codeMirrorGlobal() {
4488
+ if (this._codeMirror) {
4489
+ return this._codeMirror;
4490
+ }
4491
+ this._codeMirror = CodeMirror;
4492
+ return this._codeMirror;
4493
+ }
4494
+ ngAfterViewInit() {
4495
+ this._ngZone.runOutsideAngular(async () => {
4496
+ const codeMirrorObj = await this.codeMirrorGlobal;
4497
+ const codeMirror = codeMirrorObj?.default ? codeMirrorObj.default : codeMirrorObj;
4498
+ this.codeMirror = codeMirror.fromTextArea(this.ref.nativeElement, this._options);
4499
+ this.codeMirror.on('cursorActivity', cm => this._ngZone.run(() => this.cursorActive(cm)));
4500
+ this.codeMirror.on('scroll', this.scrollChanged.bind(this));
4501
+ this.codeMirror.on('blur', () => this._ngZone.run(() => this.focusChanged(false)));
4502
+ this.codeMirror.on('focus', () => this._ngZone.run(() => this.focusChanged(true)));
4503
+ this.codeMirror.on('change', (cm, change) => this._ngZone.run(() => this.codemirrorValueChanged(cm, change)));
4504
+ this.codeMirror.on('drop', (cm, e) => {
4505
+ this._ngZone.run(() => this.dropFiles(cm, e));
4506
+ });
4507
+ this.codeMirror.setValue(this.value);
4508
+ this.codeMirrorLoaded.emit(this);
4509
+ });
4510
+ }
4511
+ ngDoCheck() {
4512
+ if (!this._differ) {
4513
+ return;
4514
+ }
4515
+ // check options have not changed
4516
+ const changes = this._differ.diff(this._options);
4517
+ if (changes) {
4518
+ changes.forEachChangedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4519
+ changes.forEachAddedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4520
+ changes.forEachRemovedItem(option => this.setOptionIfChanged(option.key, option.currentValue));
4521
+ }
4522
+ }
4523
+ ngOnDestroy() {
4524
+ // is there a lighter-weight way to remove the cm instance?
4525
+ if (this.codeMirror) {
4526
+ this.codeMirror.toTextArea();
4527
+ }
4528
+ }
4529
+ codemirrorValueChanged(cm, change) {
4530
+ const cmVal = cm.getValue();
4531
+ if (this.value !== cmVal) {
4532
+ this.value = cmVal;
4533
+ this.onChange(this.value);
4534
+ }
4535
+ }
4536
+ setOptionIfChanged(optionName, newValue) {
4537
+ if (!this.codeMirror) {
4538
+ return;
4539
+ }
4540
+ // cast to any to handle strictly typed option names
4541
+ // could possibly import settings strings available in the future
4542
+ this.codeMirror.setOption(optionName, newValue);
4543
+ }
4544
+ focusChanged(focused) {
4545
+ this.onTouched();
4546
+ this.isFocused = focused;
4547
+ this.focusChange.emit(focused);
4548
+ }
4549
+ scrollChanged(cm) {
4550
+ this.scroll.emit(cm.getScrollInfo());
4551
+ }
4552
+ cursorActive(cm) {
4553
+ this.cursorActivity.emit(cm);
4554
+ }
4555
+ dropFiles(cm, e) {
4556
+ this.drop.emit([cm, e]);
4557
+ }
4558
+ writeValue(value) {
4559
+ if (value === null || value === undefined) {
4560
+ return;
4561
+ }
4562
+ if (!this.codeMirror) {
4563
+ this.value = value;
4564
+ return;
4565
+ }
4566
+ const cur = this.codeMirror.getValue();
4567
+ if (value !== cur && DrSharedUtils.normalizeLineEndings(cur) !== DrSharedUtils.normalizeLineEndings(value)) {
4568
+ this.value = value;
4569
+ if (this.preserveScrollPosition) {
4570
+ const prevScrollPosition = this.codeMirror.getScrollInfo();
4571
+ this.codeMirror.setValue(this.value);
4572
+ this.codeMirror.scrollTo(prevScrollPosition.left, prevScrollPosition.top);
4573
+ }
4574
+ else {
4575
+ this.codeMirror.setValue(this.value);
4576
+ }
4577
+ }
4578
+ }
4579
+ registerOnChange(fn) {
4580
+ this.onChange = fn;
4581
+ }
4582
+ registerOnTouched(fn) {
4583
+ this.onTouched = fn;
4584
+ }
4585
+ setDisabledState(isDisabled) {
4586
+ this.disabled = isDisabled;
4587
+ this.setOptionIfChanged('readOnly', this.disabled);
4588
+ }
4589
+ /** @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 }); }
4590
+ /** @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: [
4591
+ {
4592
+ provide: NG_VALUE_ACCESSOR,
4593
+ useExisting: forwardRef((() => DrCodemirrorComponent)),
4594
+ multi: true,
4595
+ },
4596
+ ], viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true }], ngImport: i0, 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
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4607
+ }
4608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodemirrorComponent, decorators: [{
4609
+ type: Component,
4610
+ args: [{
4611
+ selector: 'dr-codemirror',
4612
+ template: `
4613
+ <textarea
4614
+ [name]="name"
4615
+ class="dr-codemirror {{ className }}"
4616
+ [class.dr-codemirror--focused]="isFocused"
4617
+ autocomplete="off"
4618
+ [autofocus]="autoFocus"
4619
+ #ref
4620
+ >
4621
+ </textarea>
4622
+ `,
4623
+ providers: [
4624
+ {
4625
+ provide: NG_VALUE_ACCESSOR,
4626
+ useExisting: forwardRef((() => DrCodemirrorComponent)),
4627
+ multi: true,
4628
+ },
4629
+ ],
4630
+ preserveWhitespaces: false,
4631
+ changeDetection: ChangeDetectionStrategy.OnPush,
4632
+ }]
4633
+ }], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i0.NgZone }]; }, propDecorators: { className: [{
4634
+ type: Input
4635
+ }], name: [{
4636
+ type: Input
4637
+ }], autoFocus: [{
4638
+ type: Input
4639
+ }], options: [{
4640
+ type: Input
4641
+ }], preserveScrollPosition: [{
4642
+ type: Input
4643
+ }], cursorActivity: [{
4644
+ type: Output
4645
+ }], focusChange: [{
4646
+ type: Output
4647
+ }], scroll: [{
4648
+ type: Output
4649
+ }], drop: [{
4650
+ type: Output
4651
+ }], codeMirrorLoaded: [{
4652
+ type: Output
4653
+ }], ref: [{
4654
+ type: ViewChild,
4655
+ args: ['ref']
4656
+ }] } });
4657
+
4658
+ class DrErrorComponent {
4659
+ constructor(formGroupDirective) {
4660
+ this.formGroupDirective = formGroupDirective;
4661
+ this.label = 'Field error';
4662
+ this.errorTooltipPosition = 'top';
4663
+ this.displayAsLabel = false;
4664
+ this.noIcon = false;
4665
+ }
4666
+ set control(value) {
4667
+ if (value) {
4668
+ this._control = value;
4669
+ }
4670
+ }
4671
+ set controlName(value) {
4672
+ if (!value || typeof value !== 'string')
4673
+ return;
4674
+ if (!this.formGroupDirective) {
4675
+ throw new Error('You must provide a formGroupDirective to use this input');
4676
+ }
4677
+ this.control = this.formGroupDirective.control.get(value);
4678
+ }
4679
+ get errorString() {
4680
+ if (this._control.hasError('required')) {
4681
+ return 'Field is required!';
4682
+ }
4683
+ return this._control.errors?.errorString || null;
4684
+ }
4685
+ get isWarning() {
4686
+ return this._control.errors?.isWarning;
4687
+ }
4688
+ /** @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 }); }
4689
+ /** @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"] }] }); }
4690
+ }
4691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrErrorComponent, decorators: [{
4692
+ type: Component,
4693
+ 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"] }]
4694
+ }], ctorParameters: function () { return [{ type: i1$2.FormGroupDirective, decorators: [{
4695
+ type: Optional
4696
+ }] }]; }, propDecorators: { control: [{
4697
+ type: Input
4698
+ }], controlName: [{
4699
+ type: Input
4700
+ }], label: [{
4701
+ type: Input
4702
+ }], errorTooltipPosition: [{
4703
+ type: Input
4704
+ }], displayAsLabel: [{
4705
+ type: Input
4706
+ }], noIcon: [{
4707
+ type: Input
4708
+ }, {
4709
+ type: HostBinding,
4710
+ args: ['class.no-icon']
4711
+ }] } });
4712
+
4713
+ const noop = () => { };
4714
+ class DrCodeEditorComponent {
4715
+ constructor(cdr, cfr, injector) {
4716
+ this.cdr = cdr;
4717
+ this.cfr = cfr;
4718
+ this.injector = injector;
4719
+ this.innerValue = '';
4720
+ this.onTouchedCallback = noop;
4721
+ this.onChangeCallback = noop;
4722
+ this.parenthesesMarkers = [];
4723
+ this.parenthesisColors = [
4724
+ '#2F3E48',
4725
+ '#1f68cc',
4726
+ '#9480CD',
4727
+ '#4D9944',
4728
+ '#B03E84',
4729
+ '#B64900',
4730
+ '#267392',
4731
+ '#326AC7',
4732
+ ];
4733
+ this.parenthesesMap = {
4734
+ '}': '{',
4735
+ ']': '[',
4736
+ ')': '(',
4737
+ '{': '}',
4738
+ '[': ']',
4739
+ '(': ')',
4740
+ };
4741
+ this._hints = [];
4742
+ this.hintRefsStack = [];
4743
+ this.codeMirrorOptions = {
4744
+ lineWrapping: true,
4745
+ matchBrackets: true,
4746
+ autoRefresh: true,
4747
+ lineNumbers: false,
4748
+ mode: 'javascript',
4749
+ extraKeys: { 'Ctrl-Space': 'autocomplete' },
4750
+ autoCloseBrackets: true,
4751
+ hintOptions: {
4752
+ container: window.document.body,
4753
+ completeSingle: false,
4754
+ },
4755
+ };
4756
+ this.highlightHints = false;
4757
+ }
4758
+ set hints(values) {
4759
+ if (values?.length) {
4760
+ this._hints = values;
4761
+ this.registerHints(values);
4762
+ }
4763
+ }
4764
+ get value() {
4765
+ return this.innerValue;
4766
+ }
4767
+ set value(v) {
4768
+ if (v !== this.innerValue) {
4769
+ this.innerValue = v;
4770
+ this.onChangeCallback(v);
4771
+ this.highlightCustomFunctionsInEditor();
4772
+ this.colorizeParentheses();
4773
+ if (this.highlightHints) {
4774
+ this.updateHighlightHints();
4775
+ }
4776
+ }
4777
+ }
4778
+ writeValue(value) {
4779
+ if (value !== this.innerValue) {
4780
+ this.innerValue = value;
4781
+ }
4782
+ }
4783
+ registerOnChange(fn) {
4784
+ this.onChangeCallback = fn;
4785
+ }
4786
+ registerOnTouched(fn) {
4787
+ this.onTouchedCallback = fn;
4788
+ }
4789
+ focusChanged(bool) {
4790
+ this.isFocused = bool;
4791
+ }
4792
+ afterCodeMirrorLoaded() {
4793
+ this.doc = this.codeEditor.codeMirror.getDoc();
4794
+ if (this._hints.length) {
4795
+ this.codeEditor.codeMirror.on('keyup', (cm, event) => {
4796
+ if ((!event.ctrlKey && event.keyCode >= 65 && event.keyCode <= 90) ||
4797
+ (event.keyCode >= 97 && event.keyCode <= 122) ||
4798
+ (event.keyCode >= 46 && event.keyCode <= 57) ||
4799
+ event.keyCode === 32) {
4800
+ // @ts-ignore
4801
+ CodeMirror.commands.autocomplete(this.codeEditor.codeMirror);
4802
+ }
4803
+ });
4804
+ this.codeEditor.codeMirror.on('focus', (cm, event) => {
4805
+ setTimeout(() => {
4806
+ if (this.isFocused) {
4807
+ // @ts-ignore
4808
+ CodeMirror.commands.autocomplete(this.codeEditor.codeMirror);
4809
+ }
4810
+ }, 200);
4811
+ });
4812
+ }
4813
+ setTimeout(() => {
4814
+ if (this.highlightHints) {
4815
+ this.updateHighlightHints();
4816
+ }
4817
+ });
4818
+ }
4819
+ isClosedParenthesis(parenthesis) {
4820
+ return ['}', ')', ']'].some((value) => value === parenthesis);
4821
+ }
4822
+ colorizeParentheses() {
4823
+ const string = this.doc.getValue();
4824
+ const stack = [];
4825
+ const result = [];
4826
+ let line = 0;
4827
+ let ch = 0;
4828
+ this.parenthesesMarkers.forEach((marker) => marker.clear());
4829
+ this.parenthesesMarkers = [];
4830
+ for (let index = 0; index < string.length; index++) {
4831
+ const char = string.charAt(index);
4832
+ if (char === '\n') {
4833
+ line++;
4834
+ ch = 0;
4835
+ continue;
4836
+ }
4837
+ if (this.parenthesesMap[char]) {
4838
+ const peek = stack ? stack[stack.length - 1] : null;
4839
+ if (!this.isClosedParenthesis(char)) {
4840
+ let colorIndex = (peek?.colorIndex + 1) || 0;
4841
+ colorIndex = colorIndex > this.parenthesisColors.length - 1 ? 0 : colorIndex;
4842
+ stack.push({ value: char, color: this.parenthesisColors[colorIndex], colorIndex });
4843
+ result[index] = { value: char, color: this.parenthesisColors[colorIndex], colorIndex };
4844
+ }
4845
+ if (stack?.length && peek?.value === this.parenthesesMap[char]) {
4846
+ result[index] = { value: char, color: peek.color, colorIndex: peek.colorIndex };
4847
+ stack.pop();
4848
+ }
4849
+ }
4850
+ if (result[index]) {
4851
+ this.parenthesesMarkers.push(this.doc.markText({
4852
+ line,
4853
+ ch,
4854
+ }, {
4855
+ line,
4856
+ ch: ch + 1,
4857
+ }, {
4858
+ css: `color: ${result[index].color}`,
4859
+ }));
4860
+ }
4861
+ ch++;
4862
+ }
4863
+ }
4864
+ highlightCustomFunctionsInEditor() {
4865
+ const markers = this.markers || [];
4866
+ const existMarkers = this.existMarkers || [];
4867
+ existMarkers.forEach((m) => m.clear());
4868
+ this.doc.eachLine((line) => {
4869
+ markers.forEach((marker) => {
4870
+ const searchStr = marker.name + '\\(';
4871
+ const matches = line.text.matchAll(new RegExp(searchStr, 'g'));
4872
+ for (const match of matches) {
4873
+ existMarkers.push(this.doc.markText({
4874
+ line: line.lineNo(),
4875
+ ch: match.index,
4876
+ }, {
4877
+ line: line.lineNo(),
4878
+ ch: match.index + marker.name.length,
4879
+ }, {
4880
+ className: 'marker',
4881
+ title: marker.title,
4882
+ }));
4883
+ }
4884
+ });
4885
+ });
4886
+ }
4887
+ pasteText(text, goCharLeft) {
4888
+ this.doc.replaceSelection(text);
4889
+ this.doc.cm.focus();
4890
+ if (goCharLeft) {
4891
+ this.doc.cm.execCommand('goCharLeft');
4892
+ }
4893
+ }
4894
+ registerHints(dictionary = []) {
4895
+ const hintRegexp = /[\w$]|[ &'"#%$@]/;
4896
+ CodeMirror.registerHelper('hint', 'dictionaryHint', (editor) => {
4897
+ const cursor = editor.getCursor();
4898
+ const currentLine = editor.getLine(cursor.line);
4899
+ let start = cursor.ch;
4900
+ let end = cursor.ch;
4901
+ while (end < currentLine.length && hintRegexp.test(currentLine.charAt(end)))
4902
+ ++end;
4903
+ while (start && hintRegexp.test(currentLine.charAt(start - 1)))
4904
+ --start;
4905
+ const currentWord = (start !== end && currentLine.slice(start, end)) || '';
4906
+ const filteredDictionary = (!currentWord
4907
+ ? dictionary
4908
+ : dictionary.filter((item) => item.value.toLowerCase().includes(currentWord.toLowerCase()))).sort() || [];
4909
+ const hintsList = filteredDictionary.map((item) => {
4910
+ const displayText = item.value;
4911
+ let text = item.value;
4912
+ if (currentLine[start - 1] !== '[') {
4913
+ text = '[' + text;
4914
+ }
4915
+ if (currentLine[end] !== ']') {
4916
+ text += ']';
4917
+ }
4918
+ return {
4919
+ text,
4920
+ displayText,
4921
+ render: (element, data, current) => {
4922
+ const startIndex = current.displayText.toLowerCase().indexOf(currentWord.toLowerCase());
4923
+ const stringToReplace = current.displayText.slice(startIndex, startIndex + currentWord.length);
4924
+ const hintHTML = `${item.icon} ` + current.displayText.replace(stringToReplace, `<b>${stringToReplace}</b>`);
4925
+ const componentFactory = this.cfr.resolveComponentFactory(CodeEditorHintWrapperComponent);
4926
+ const componentRef = componentFactory.create(this.injector);
4927
+ componentRef.instance.content = hintHTML;
4928
+ componentRef.instance.tooltip = item.hint;
4929
+ componentRef.changeDetectorRef.detectChanges();
4930
+ element.appendChild(componentRef.location.nativeElement);
4931
+ this.hintRefsStack.push(componentRef);
4932
+ },
4933
+ };
4934
+ });
4935
+ return {
4936
+ list: hintsList,
4937
+ from: CodeMirror.Pos(cursor.line, start),
4938
+ to: CodeMirror.Pos(cursor.line, end),
4939
+ };
4940
+ });
4941
+ // @ts-ignore
4942
+ CodeMirror.commands.autocomplete = (cm) => {
4943
+ this.destroyHints();
4944
+ // @ts-ignore
4945
+ CodeMirror.showHint(cm, CodeMirror.hint.dictionaryHint);
4946
+ };
4947
+ }
4948
+ destroyHints() {
4949
+ this.hintRefsStack.forEach((ref) => ref.destroy());
4950
+ this.hintRefsStack = [];
4951
+ }
4952
+ updateHighlightHints() {
4953
+ const hints = this._hints || [];
4954
+ const highlightedHints = this.highlightedHints || [];
4955
+ highlightedHints.forEach((m) => m.clear());
4956
+ this.doc.eachLine((line) => {
4957
+ const matches = line.text.matchAll(/(?:\[).+?(?=\])/gm);
4958
+ for (const match of matches) {
4959
+ const hint = hints.find((h) => h.value === match[0].replace('[', ''));
4960
+ if (hint) {
4961
+ highlightedHints.push(this.doc.markText({
4962
+ line: line.lineNo(),
4963
+ ch: match.index + 1,
4964
+ }, {
4965
+ line: line.lineNo(),
4966
+ ch: match.index + 1 + hint.value.length,
4967
+ }, {
4968
+ className: 'hint-variable',
4969
+ title: hint.value,
4970
+ }));
4971
+ }
4972
+ }
4973
+ });
4974
+ this.cdr.markForCheck();
4975
+ }
4976
+ /** @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 }); }
4977
+ /** @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 }); }
4978
+ }
4979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorComponent, decorators: [{
4980
+ type: Component,
4981
+ 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"] }]
4982
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { markers: [{
4983
+ type: Input
4984
+ }], highlightHints: [{
4985
+ type: Input
4986
+ }], hints: [{
4987
+ type: Input
4988
+ }], control: [{
4989
+ type: Input
4990
+ }], codeEditor: [{
4991
+ type: ViewChild,
4992
+ args: ['codeEditor']
4993
+ }] } });
4994
+
4426
4995
  var Scenario;
4427
4996
  (function (Scenario) {
4428
4997
  Scenario["ACTUALS"] = "Actuals";
@@ -6205,61 +6774,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6205
6774
  }]
6206
6775
  }], ctorParameters: function () { return []; } });
6207
6776
 
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
6777
  class DrDetailsListComponent {
6264
6778
  set items(val) {
6265
6779
  if (!val) {
@@ -7419,6 +7933,12 @@ var FeedbackSentiment;
7419
7933
  })(FeedbackSentiment || (FeedbackSentiment = {}));
7420
7934
  ;
7421
7935
 
7936
+ var ICodeEditorHintIcon;
7937
+ (function (ICodeEditorHintIcon) {
7938
+ ICodeEditorHintIcon["VALUE"] = "#";
7939
+ ICodeEditorHintIcon["CALCULATED_VALUE"] = "=";
7940
+ })(ICodeEditorHintIcon || (ICodeEditorHintIcon = {}));
7941
+
7422
7942
  class DrToastrService {
7423
7943
  constructor(toastr) {
7424
7944
  this.toastr = toastr;
@@ -8249,11 +8769,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
8249
8769
  }]
8250
8770
  }] });
8251
8771
 
8772
+ class DrCodeEditorModule {
8773
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8774
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, declarations: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent], imports: [CommonModule,
8775
+ FormsModule,
8776
+ ReactiveFormsModule,
8777
+ DrTooltipModule,
8778
+ DrErrorModule], exports: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent] }); }
8779
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, imports: [CommonModule,
8780
+ FormsModule,
8781
+ ReactiveFormsModule,
8782
+ DrTooltipModule,
8783
+ DrErrorModule] }); }
8784
+ }
8785
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrCodeEditorModule, decorators: [{
8786
+ type: NgModule,
8787
+ args: [{
8788
+ imports: [
8789
+ CommonModule,
8790
+ FormsModule,
8791
+ ReactiveFormsModule,
8792
+ DrTooltipModule,
8793
+ DrErrorModule
8794
+ ],
8795
+ exports: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent],
8796
+ providers: [],
8797
+ declarations: [DrCodemirrorComponent, DrCodeEditorComponent, CodeEditorHintWrapperComponent],
8798
+ }]
8799
+ }] });
8800
+
8252
8801
  /* components */
8253
8802
 
8254
8803
  /**
8255
8804
  * Generated bundle index. Do not edit.
8256
8805
  */
8257
8806
 
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 };
8807
+ 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
8808
  //# sourceMappingURL=datarailsshared-datarailsshared.mjs.map