{"version":3,"file":"covalent-code-editor.mjs","sources":["../../../../libs/angular-code-editor/src/lib/code-editor.component.ts","../../../../libs/angular-code-editor/src/lib/code-editor.component.html","../../../../libs/angular-code-editor/src/lib/code-editor.module.ts","../../../../libs/angular-code-editor/src/covalent-code-editor.ts"],"sourcesContent":["import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnInit,\n  ViewChild,\n  ElementRef,\n  forwardRef,\n  ChangeDetectorRef,\n  OnDestroy,\n  NgZone,\n  Inject,\n  PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { Observable, of, Subject } from 'rxjs';\nimport { fromEvent, merge, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\n// Use esm version to support shipping subset of languages and features\nimport { editor, languages, IDisposable } from 'monaco-editor';\n\nimport {\n  mixinControlValueAccessor,\n  mixinDisabled,\n} from '@covalent/core/common';\n\nconst noop = () => {\n  // empty method\n};\n\n// counter for ids to allow for multiple editors on one page\nlet uniqueCounter = 0;\n\nexport class TdCodeEditorBase {\n  constructor(public _changeDetectorRef: ChangeDetectorRef) {}\n}\n\nexport const _TdCodeEditorMixinBase = mixinControlValueAccessor(\n  mixinDisabled(TdCodeEditorBase),\n  []\n);\n\n@Component({\n  selector: 'td-code-editor',\n  templateUrl: './code-editor.component.html',\n  styleUrls: ['./code-editor.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TdCodeEditorComponent),\n      multi: true,\n    },\n  ],\n})\nexport class TdCodeEditorComponent\n  extends _TdCodeEditorMixinBase\n  implements OnInit, ControlValueAccessor, OnDestroy\n{\n  private _destroy: Subject<boolean> = new Subject<boolean>();\n  private _widthSubject: Subject<number> = new Subject<number>();\n  private _heightSubject: Subject<number> = new Subject<number>();\n\n  private _editorStyle = 'width:100%;height:100%;';\n  private _value = '';\n  private _theme = 'vs';\n  private _language = 'javascript';\n  private _subject: Subject<string> = new Subject();\n  private _editorInnerContainer: string =\n    'editorInnerContainer' + uniqueCounter++;\n  private _editor!: editor.IStandaloneCodeEditor;\n  private _fromEditor = false;\n  private _componentInitialized = false;\n  private _editorOptions: any = {};\n  private _isFullScreen = false;\n  private _keycode: any;\n  private _registeredLanguagesStyles: HTMLStyleElement[] = [];\n  private _disposables: IDisposable[] = [];\n\n  @ViewChild('editorContainer', { static: true }) _editorContainer!: ElementRef;\n\n  /**\n   * editorInitialized: function($event)\n   * Event emitted when editor is first initialized\n   */\n  @Output()\n  editorInitialized: EventEmitter<editor.IStandaloneCodeEditor> =\n    new EventEmitter<editor.IStandaloneCodeEditor>();\n\n  /**\n   * editorConfigurationChanged: function($event)\n   * Event emitted when editor's configuration changes\n   */\n  @Output() editorConfigurationChanged: EventEmitter<void> =\n    new EventEmitter<void>();\n\n  /**\n   * editorLanguageChanged: function($event)\n   * Event emitted when editor's Language changes\n   */\n  @Output() editorLanguageChanged: EventEmitter<void> =\n    new EventEmitter<void>();\n\n  /**\n   * editorValueChange: function($event)\n   * Event emitted any time something changes the editor value\n   */\n  @Output() editorValueChange: EventEmitter<void> = new EventEmitter<void>();\n\n  propagateChange = (_: any) => noop;\n\n  /**\n   * value?: string\n   */\n  @Input()\n  override set value(value: string) {\n    this._value = value;\n\n    if (this._componentInitialized) {\n      this.applyValue();\n    }\n  }\n  override get value(): string {\n    return this._value;\n  }\n\n  applyValue(): void {\n    if (!this._fromEditor) {\n      this._editor.setValue(this._value || '');\n    }\n    this._fromEditor = false;\n    this.propagateChange(this._value);\n    this.editorValueChange.emit();\n  }\n\n  override registerOnChange(fn: any): void {\n    this.propagateChange = fn;\n  }\n  override registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * getEditorContent?: function\n   * Returns the content within the editor\n   */\n  getValue(): Observable<string> {\n    if (!this._componentInitialized) {\n      return of('');\n    }\n    setTimeout(() => {\n      this._subject.next(this._value);\n      this._subject.complete();\n      this._subject = new Subject();\n    });\n    return this._subject.asObservable();\n  }\n\n  /**\n   * language?: string\n   * language used in editor\n   */\n  @Input()\n  set language(language: string) {\n    this._language = language;\n    if (this._componentInitialized) {\n      this.applyLanguage();\n    }\n  }\n\n  get language(): string {\n    return this._language;\n  }\n\n  applyLanguage(): void {\n    if (this._language) {\n      editor.setModelLanguage(\n        this._editor.getModel() as editor.ITextModel,\n        this._language\n      );\n      this.editorLanguageChanged.emit();\n    }\n  }\n\n  /**\n   * registerLanguage?: function\n   * Registers a custom Language within the editor\n   */\n  registerLanguage(language: any): void {\n    if (this._componentInitialized) {\n      languages.register({ id: language.id });\n\n      this._disposables.push(\n        languages.setMonarchTokensProvider(language.id, {\n          tokenizer: {\n            root: language.monarchTokensProvider,\n          },\n        })\n      );\n\n      // Define a new theme that constains only rules that match this language\n      editor.defineTheme(language.customTheme.id, language.customTheme.theme);\n      this._theme = language.customTheme.id;\n\n      this._disposables.push(\n        languages.registerCompletionItemProvider(language.id, {\n          provideCompletionItems: () => {\n            return language.completionItemProvider;\n          },\n        })\n      );\n\n      const css: HTMLStyleElement = document.createElement('style');\n      css.type = 'text/css';\n      css.innerHTML = language.monarchTokensProviderCSS;\n      document.body.appendChild(css);\n      this.editorConfigurationChanged.emit();\n      this._registeredLanguagesStyles = [\n        ...this._registeredLanguagesStyles,\n        css,\n      ];\n    }\n  }\n\n  /**\n   * style?: string\n   * css style of the editor on the page\n   */\n  @Input()\n  set editorStyle(editorStyle: string) {\n    this._editorStyle = editorStyle;\n    if (this._componentInitialized) {\n      this.applyStyle();\n    }\n  }\n\n  get editorStyle(): string {\n    return this._editorStyle;\n  }\n\n  applyStyle(): void {\n    if (this._editorStyle) {\n      const containerDiv: HTMLDivElement = this._editorContainer.nativeElement;\n      containerDiv.setAttribute('style', this._editorStyle);\n    }\n  }\n\n  /**\n   * theme?: string\n   * Theme to be applied to editor\n   */\n  @Input()\n  set theme(theme: string) {\n    this._theme = theme;\n    if (this._componentInitialized) {\n      this._editor.updateOptions({ theme });\n      this.editorConfigurationChanged.emit();\n    }\n  }\n  get theme(): string {\n    return this._theme;\n  }\n\n  /**\n   * fullScreenKeyBinding?: number\n   * See here for key bindings https://microsoft.github.io/monaco-editor/api/enums/keycode.html\n   * Sets the KeyCode for shortcutting to Fullscreen mode\n   */\n  @Input()\n  set fullScreenKeyBinding(keycode: number[]) {\n    this._keycode = keycode;\n  }\n  get fullScreenKeyBinding(): number[] {\n    return this._keycode;\n  }\n\n  /**\n   * editorOptions?: object\n   * Options used on editor instantiation. Available options listed here:\n   * https://microsoft.github.io/monaco-editor/api/interfaces/editor.ieditoroptions.html\n   */\n  @Input()\n  set editorOptions(editorOptions: any) {\n    this._editorOptions = editorOptions;\n    if (this._componentInitialized) {\n      this._editor.updateOptions(editorOptions);\n      this.editorConfigurationChanged.emit();\n    }\n  }\n  get editorOptions(): any {\n    return this._editorOptions;\n  }\n\n  /**\n   * layout method that calls layout method of editor and instructs the editor to remeasure its container\n   */\n  layout(): void {\n    if (this._componentInitialized) {\n      this._editor.layout();\n    }\n  }\n\n  /**\n   * Returns if in Full Screen Mode or not\n   */\n  get isFullScreen(): boolean {\n    return this._isFullScreen;\n  }\n\n  // tslint:disable-next-line:member-ordering\n  constructor(\n    _changeDetectorRef: ChangeDetectorRef,\n    private _elementRef: ElementRef<HTMLElement>,\n    private _ngZone: NgZone,\n    @Inject(PLATFORM_ID) private platformId: string\n  ) {\n    super(_changeDetectorRef);\n  }\n\n  ngOnInit(): void {\n    if (isPlatformServer(this.platformId)) {\n      return;\n    }\n\n    const containerDiv: HTMLDivElement = this._editorContainer.nativeElement;\n    containerDiv.id = this._editorInnerContainer;\n\n    this._editor = editor.create(\n      containerDiv,\n      Object.assign(\n        {\n          value: this._value,\n          language: this.language,\n          theme: this._theme,\n        },\n        this.editorOptions\n      )\n    );\n    this._componentInitialized = true;\n    setTimeout(() => {\n      this.applyLanguage();\n      this._fromEditor = true;\n      this.applyValue();\n      this.applyStyle();\n      this.editorInitialized.emit(this._editor);\n      this.editorConfigurationChanged.emit();\n    });\n    // The `onDidChangeContent` returns a disposable object (an object with `dispose()` method) which will cleanup\n    // the listener. The callback, that we pass to `onDidChangeContent`, captures `this`. This leads to a circular reference\n    // (`td-code-editor -> monaco -> td-code-editor`) and prevents the `td-code-editor` from being GC'd.\n    this._disposables.push(\n      (this._editor.getModel() as editor.ITextModel).onDidChangeContent(() => {\n        this._fromEditor = true;\n        this.writeValue(this._editor.getValue());\n        this.layout();\n      })\n    );\n    this.addFullScreenModeCommand();\n\n    this._ngZone.runOutsideAngular(() =>\n      merge(\n        fromEvent(window, 'resize').pipe(debounceTime(100)),\n        this._widthSubject.asObservable().pipe(distinctUntilChanged()),\n        this._heightSubject.asObservable().pipe(distinctUntilChanged())\n      )\n        .pipe(debounceTime(100), takeUntil(this._destroy))\n        .subscribe(() => {\n          // Note: this is being called outside of the Angular zone since we don't have to\n          // run change detection whenever the editor resizes itself.\n          this.layout();\n        })\n    );\n    this._ngZone.runOutsideAngular(() =>\n      timer(500, 250)\n        .pipe(takeUntil(this._destroy))\n        .subscribe(() => {\n          const { width, height } =\n            this._elementRef.nativeElement.getBoundingClientRect();\n          this._widthSubject.next(width);\n          this._heightSubject.next(height);\n        })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this._changeDetectorRef.detach();\n    this._registeredLanguagesStyles.forEach((style: HTMLStyleElement) =>\n      style.remove()\n    );\n    while (this._disposables.length) {\n      this._disposables.pop()?.dispose();\n    }\n    if (this._editor) {\n      this._editor.dispose();\n    }\n    this._destroy.next(true);\n    this._destroy.unsubscribe();\n  }\n\n  /**\n   * showFullScreenEditor request for full screen of Code Editor based on its browser type.\n   */\n  public showFullScreenEditor(): void {\n    if (this._componentInitialized) {\n      const codeEditorElement: HTMLDivElement = this._editorContainer\n        .nativeElement as HTMLDivElement;\n      codeEditorElement.requestFullscreen();\n    }\n    this._isFullScreen = true;\n  }\n\n  /**\n   * exitFullScreenEditor request to exit full screen of Code Editor based on its browser type.\n   */\n  public exitFullScreenEditor(): void {\n    if (this._componentInitialized) {\n      document.exitFullscreen();\n    }\n    this._isFullScreen = false;\n  }\n\n  /**\n   * addFullScreenModeCommand used to add the fullscreen option to the context menu\n   */\n  private addFullScreenModeCommand(): void {\n    this._disposables.push(\n      this._editor.addAction({\n        // An unique identifier of the contributed action.\n        id: 'fullScreen',\n        // A label of the action that will be presented to the user.\n        label: 'Full Screen',\n        // An optional array of keybindings for the action.\n        contextMenuGroupId: 'navigation',\n        keybindings: this._keycode,\n        contextMenuOrder: 1.5,\n        // Method that will be executed when the action is triggered.\n        run: () => {\n          this.showFullScreenEditor();\n        },\n      })\n    );\n  }\n}\n","<div class=\"editor-container\" #editorContainer></div>\n","import { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { TdCodeEditorComponent } from './code-editor.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [TdCodeEditorComponent],\n  exports: [TdCodeEditorComponent],\n  bootstrap: [TdCodeEditorComponent],\n})\nexport class CovalentCodeEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}