@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.
- package/assets/styles/_styles.scss +4 -0
- package/datarailsshared-datarailsshared-1.5.286.tgz +0 -0
- package/esm2022/lib/dr-code-editor/components/code-editor-hint-wrapper.component.mjs +15 -0
- package/esm2022/lib/dr-code-editor/components/dr-codemirror.component.mjs +201 -0
- package/esm2022/lib/dr-code-editor/dr-code-editor.component.mjs +292 -0
- package/esm2022/lib/dr-code-editor/dr-code-editor.module.mjs +42 -0
- package/esm2022/lib/dr-code-editor/models/code-editor-hint.mjs +6 -0
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.mjs +12 -2
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.mjs +7 -2
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.mjs +3 -2
- package/esm2022/lib/utils/dr-shared-utils.mjs +4 -1
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/datarailsshared-datarailsshared.mjs +617 -68
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-code-editor/components/code-editor-hint-wrapper.component.d.ts +7 -0
- package/lib/dr-code-editor/components/dr-codemirror.component.d.ts +47 -0
- package/lib/dr-code-editor/dr-code-editor.component.d.ts +44 -0
- package/lib/dr-code-editor/dr-code-editor.module.d.ts +17 -0
- package/lib/dr-code-editor/models/code-editor-hint.d.ts +14 -0
- package/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.d.ts +3 -2
- package/lib/utils/dr-shared-utils.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
- package/styles.css +526 -0
- 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$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
1230
|
-
this.onChangeCallback = noop$
|
|
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
|
-
|
|
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$
|
|
2266
|
-
this.onTouchedCallback = noop$
|
|
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
|