@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
1 lines • 13 kB
Source Map (JSON)
{"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 SimpleChanges,\n OnChanges\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, OnChanges {\n @Input() editorOptions: Monaco.editor.IStandaloneEditorConstructionOptions = {};\n /**\n * Overrides application theme. If not set, the theme will be taken from the theme switcher service.\n */\n @Input() theme: ThemeOptions | null;\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 themeSwitcher: ThemeSwitcherService\n ) {\n this.themeChanges$ = this.themeSwitcher.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 if (this.theme) {\n this.setTheme(this.theme);\n } else {\n this.themeChanges$.subscribe(theme => {\n this.setTheme(theme);\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.editorOptions && this.editor) {\n this.updateOptionsAndLanguage(changes);\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 private setTheme(theme: ThemeOptions) {\n const themeToSet = theme === 'dark' ? `vs-dark` : 'vs';\n this.monaco.editor.setTheme(themeToSet);\n }\n\n private updateOptionsAndLanguage(changes: SimpleChanges) {\n this.editor.updateOptions(this.editorOptions);\n if (this.editorOptions.language !== changes.editorOptions.previousValue.language) {\n const model = this.editor.getModel();\n if (model) {\n this.monaco.editor.setModelLanguage(model, this.editorOptions.language);\n }\n }\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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"}