@datarailsshared/datarailsshared 1.5.284 → 1.5.285

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