{"version":3,"file":"novo-elements-addons-code-editor.mjs","sources":["../../../projects/novo-elements/src/addons/code-editor/CodeEditor.ts","../../../projects/novo-elements/src/addons/code-editor/CodeEditor.module.ts","../../../projects/novo-elements/src/addons/code-editor/novo-elements-addons-code-editor.ts"],"sourcesContent":["// NG2\nimport { AfterViewInit, Component, DestroyRef, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n// Vendor\nimport { defaultKeymap } from '@codemirror/commands';\nimport { javascript } from '@codemirror/lang-javascript';\nimport { Annotation, EditorState } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\nimport { basicSetup } from 'codemirror';\n\n// organize-imports-ignore\n\n// APP\nconst CODE_EDITOR_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => NovoCodeEditor),\n  multi: true,\n};\n\n// CodeMirror transaction annotation to show changes that came in through writeValue (FormControl value) as opposed to UI editing\nconst FormControlCodeWriter = Annotation.define();\n\n// (This is a replacement for the \"novo-ace-editor\". Notably, we are no longer naming it based on the underlying component. It is possible, in the future,\n// we decide there is another code editing component that better fits our use case - in which situation we should replace the implementation here, but keep its name)\n@Component({\n    selector: 'novo-code-editor',\n    template: '',\n    styleUrls: ['./CodeEditor.scss'],\n    providers: [CODE_EDITOR_VALUE_ACCESSOR],\n    standalone: false,\n})\nexport class NovoCodeEditor implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit {\n  @Input()\n  theme: string = 'default';\n\n  @Input()\n  lineNumbers = true;\n\n  @Input()\n  name: string;\n\n  @Output()\n  blur = new EventEmitter();\n  @Output()\n  focus = new EventEmitter();\n\n  private changed = new EventEmitter<string>();\n\n  @Input() mode: string = 'javascript';\n\n  @ViewChild('editorRoot')\n  editorRoot: ElementRef<HTMLElement>;\n\n  editorView: EditorView;\n  initialValue = '';\n\n  @HostBinding('class.editor-disabled')\n  protected disabled = false;\n\n  constructor(private elementRef: ElementRef, private destroyRef: DestroyRef) {}\n\n  ngOnInit(): void {\n  }\n\n  ngOnDestroy(): void {\n    if (this.editorView) {\n      this.editorView.destroy();\n      this.editorView = null;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.createEditorView();\n  }\n\n  createEditorView(): void {\n    const extensions = [\n      basicSetup,\n      keymap.of(defaultKeymap),\n    ];\n    if (this.mode === 'javascript') {\n      extensions.push(javascript());\n    }\n    const initialEditorState = EditorState.create({\n      doc: this.initialValue,\n      extensions,\n    });\n    this.editorView = new EditorView({\n      state: initialEditorState,\n      parent: this.elementRef.nativeElement,\n      dispatch: (transaction, view) => {\n        // Prevent changes if the form is disabled - unless the change came from writeValue function\n        if (transaction.annotation(FormControlCodeWriter) || !(this.disabled && transaction.docChanged)) {\n          view.update([transaction]);\n        }\n        if (transaction.docChanged) {\n          this.changed.emit(view.state.doc.toString());\n        }\n      },\n    });\n  }\n\n  @HostListener('focus')\n  onFocus() {\n    this.focus.emit();\n  }\n\n  @HostListener('blur')\n  onBlur() {\n    this.blur.emit();\n  }\n\n  // ControlValueAccessor forward implementation\n  writeValue(value: any) {\n    if (this.editorView) {\n      this.editorView.dispatch({\n        changes: {\n          from: 0,\n          to: this.editorView.state.doc.length,\n          insert: value,\n        },\n        annotations: FormControlCodeWriter.of({}),\n      });\n    } else if (value != null) {\n      this.initialValue = value;\n    }\n  }\n\n  registerOnChange(fn: any) {\n    this.changed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fn);\n  }\n\n  registerOnTouched(fn: any) {\n    this.blur.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fn);\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NovoCodeEditor } from './CodeEditor';\n\n@NgModule({\n    imports: [CommonModule, FormsModule ],\n    declarations: [NovoCodeEditor],\n    exports: [NovoCodeEditor],\n})\nexport class NovoCodeEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}