{"version":3,"file":"c8y-ngx-components-editor.mjs","sources":["../../editor/editor.component.ts","../../editor/editor.component.html","../../editor/monaco-editor-marker.directive.ts","../../editor/c8y-ngx-components-editor.ts"],"sourcesContent":["import {\n  Component,\n  AfterViewInit,\n  OnDestroy,\n  NgZone,\n  ViewChild,\n  ElementRef,\n  forwardRef,\n  Input,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type * as Monaco from 'monaco-editor';\nimport { LoadingComponent, ThemeOptions, ThemeSwitcherService } from '@c8y/ngx-components';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\nimport { NgIf } from '@angular/common';\n\nexport async function loadMonacoEditor() {\n  const monaco = await import('monaco-editor');\n  return monaco.default || monaco;\n}\n\n@Component({\n  selector: 'c8y-editor',\n  templateUrl: './editor.component.html',\n  standalone: true,\n  imports: [LoadingComponent, NgIf],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => EditorComponent),\n      multi: true\n    }\n  ]\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  @Input() editorOptions: Monaco.editor.IStandaloneEditorConstructionOptions = {};\n  @Output() editorInit = new EventEmitter<Monaco.editor.IStandaloneCodeEditor>();\n  monaco: typeof Monaco;\n  editor: Monaco.editor.IStandaloneCodeEditor;\n\n  private _readOnly = false;\n  private _currentValue = '';\n  private _onChanges: (value: string) => void;\n  private _onTouched: () => void;\n  @ViewChild('editorContainer', { static: true }) _editorContainer: ElementRef;\n  private themeChanges$: Observable<ThemeOptions>;\n\n  constructor(\n    private zone: NgZone,\n    private theme: ThemeSwitcherService\n  ) {\n    this.themeChanges$ = this.theme.currentlyAppliedTheme$.pipe(takeUntilDestroyed());\n  }\n\n  writeValue(obj: string | object): void {\n    if (typeof obj === 'string') {\n      this._currentValue = obj;\n    } else {\n      this._currentValue = JSON.stringify(obj, null, 2);\n    }\n\n    if (this.editor) {\n      this.editor.setValue(this._currentValue);\n    }\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this._onChanges = fn;\n    this.register();\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n    this.register();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this._readOnly = isDisabled;\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    this.monaco = await loadMonacoEditor();\n    this.editor = this.monaco.editor.create(\n      this._editorContainer.nativeElement,\n      Object.assign(\n        {\n          value: this._currentValue || '',\n          language: 'json',\n          automaticLayout: true,\n          readOnly: this._readOnly\n        },\n        this.editorOptions\n      )\n    );\n    (<any>window).monacoEditor = this.editor;\n    this.editorInit.emit(this.editor);\n    this.register();\n    this.themeChanges$.subscribe(theme => {\n      const themeToSet = theme === 'dark' ? `vs-dark` : 'vs';\n      this.monaco.editor.setTheme(themeToSet);\n    });\n  }\n\n  register() {\n    if (!this.editor) {\n      return;\n    }\n    if (this._onChanges) {\n      const onChanges = this._onChanges;\n      this.editor.onDidChangeModelContent(() => {\n        this.zone.run(() => {\n          const value = this.editor.getValue();\n          this._currentValue = value;\n          onChanges(value);\n        });\n      });\n      this._onChanges = undefined;\n    }\n\n    if (this._onTouched) {\n      const onTouched = this._onTouched;\n      this.editor.onDidChangeModelContent(() => {\n        this.zone.run(() => {\n          onTouched();\n        });\n      });\n      this._onTouched = undefined;\n    }\n  }\n\n  ngOnDestroy() {\n    this.editor.getModel().dispose();\n    this.editor.dispose();\n  }\n}\n","<c8y-loading *ngIf=\"!monaco\"></c8y-loading>\n<div class=\"editor-container\" style=\"height: 100%\" #editorContainer></div>\n","import { Directive, NgZone, OnDestroy, forwardRef } from '@angular/core';\nimport { EditorComponent } from './editor.component';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n  selector: 'c8y-editor [monacoEditorMarkerValidator]',\n  standalone: true,\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => MonacoEditorMarkerValidatorDirective),\n      multi: true\n    }\n  ]\n})\nexport class MonacoEditorMarkerValidatorDirective implements Validator, OnDestroy {\n  private editorInitSubscription: Subscription;\n\n  constructor(\n    private editorComponent: EditorComponent,\n    private zone: NgZone\n  ) {}\n\n  ngOnDestroy(): void {\n    this.editorInitSubscription?.unsubscribe();\n  }\n\n  validate(_control: AbstractControl<any, any>): ValidationErrors {\n    if (!this.editorComponent.monaco || !this.editorComponent.editor) {\n      return null;\n    }\n    const uri = this.editorComponent.editor.getModel().uri;\n    const markers = this.editorComponent.monaco.editor.getModelMarkers({ resource: uri });\n    if (markers.length) {\n      return markers;\n    }\n\n    return null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.editorInitSubscription = this.editorComponent.editorInit.subscribe(editor => {\n      editor.onDidChangeModelDecorations(() => {\n        this.zone.run(() => {\n          fn();\n        });\n      });\n    });\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EditorComponent"],"mappings":"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"}