{"version":3,"file":"cisstech-nge-monaco.mjs","sources":["../../../projects/nge/monaco/src/monaco-config.ts","../../../projects/nge/monaco/src/contributions/monaco-contribution.ts","../../../projects/nge/monaco/src/services/monaco-loader.service.ts","../../../projects/nge/monaco/src/components/monaco-diff-editor/monaco-diff-editor.component.ts","../../../projects/nge/monaco/src/components/monaco-diff-editor/monaco-diff-editor.component.html","../../../projects/nge/monaco/src/components/monaco-placeholder/monaco-placeholder.component.ts","../../../projects/nge/monaco/src/components/monaco-placeholder/monaco-placeholder.component.html","../../../projects/nge/monaco/src/components/monaco-editor/monaco-editor.component.ts","../../../projects/nge/monaco/src/components/monaco-editor/monaco-editor.component.html","../../../projects/nge/monaco/src/services/monaco-theme.service.ts","../../../projects/nge/monaco/src/services/monaco-colorizer.service.ts","../../../projects/nge/monaco/src/components/monaco-viewer/monaco-viewer.component.ts","../../../projects/nge/monaco/src/components/monaco-viewer/monaco-viewer.component.html","../../../projects/nge/monaco/src/monaco-constants.ts","../../../projects/nge/monaco/src/contributions/prevent-symbol-duplication.ts","../../../projects/nge/monaco/src/monaco.module.ts","../../../projects/nge/monaco/index.ts","../../../projects/nge/monaco/cisstech-nge-monaco.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\n/**\n * Monaco editor loader configuration.\n */\nexport interface NgeMonacoConfig {\n  /**\n   * Base path for monaco editor default: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.20.0'\n   */\n  assets?: string\n\n  /**\n   * Default locale (en).\n   */\n  locale?: 'de' | 'en' | 'es' | 'fr' | 'it' | 'ja' | 'ko' | 'ru' | 'zh-ch' | 'zh-tw'\n\n  /**\n   * Monaco editor default options.\n   */\n  options?: monaco.editor.IEditorOptions\n\n  /** Monaco editor theming configuration. */\n  theming?: {\n    /** path to theme files. */\n    themes?: string[]\n    /** default theme 'vs' */\n    default?: string\n  }\n}\n\n/**\n * Monaco editor loader configuration token.\n */\nexport const NGE_MONACO_CONFIG = new InjectionToken<NgeMonacoConfig>('NGE_MONACO_CONFIG')\n","import { InjectionToken } from '@angular/core'\n\nexport interface NgeMonacoContribution {\n  activate(): void | Promise<void>\n  deactivate?(): void | Promise<void>\n}\n\nexport const NGE_MONACO_CONTRIBUTION = new InjectionToken<NgeMonacoContribution>('NGE_MONACO_CONTRIBUTION')\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core'\nimport { ResourceLoaderService } from '@cisstech/nge/services'\nimport { lastValueFrom, of, Subject } from 'rxjs'\nimport { NGE_MONACO_CONTRIBUTION, NgeMonacoContribution } from '../contributions/monaco-contribution'\nimport { NGE_MONACO_CONFIG, NgeMonacoConfig } from '../monaco-config'\n\n/** monaco editor cdn url hosted at cdnjs. */\nexport const MONACO_CDNJS_URL = 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0'\n\n/** monaco editor cdn url hosted at jsdeliver. */\nexport const MONACO_JS_DELIVER_URL = 'https://cdn.jsdelivr.net/npm/monaco-editor@0.52.0'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst WINDOW = window as any\n\n/**\n * Loads monaco editor using AMD loader.\n */\n@Injectable({ providedIn: 'root' })\nexport class NgeMonacoLoaderService implements OnDestroy {\n  private readonly monaco$ = new Subject<typeof monaco>()\n\n  private baseUrl = MONACO_CDNJS_URL\n  private loadPromise?: Promise<typeof monaco>\n\n  constructor(\n    @Optional()\n    @Inject(NGE_MONACO_CONFIG)\n    private readonly config: NgeMonacoConfig,\n    @Optional()\n    @Inject(NGE_MONACO_CONTRIBUTION)\n    private readonly contributions: NgeMonacoContribution[],\n    private readonly resourceLoader: ResourceLoaderService\n  ) {\n    this.contributions = contributions || []\n  }\n\n  async ngOnDestroy() {\n    await this.deactivateContributions()\n  }\n\n  /**\n   * Call the given `observer` function to extend monaco editor functionalities\n   * once it will be available in `window.monaco`.\n   *\n   * The function will be called immediately if monaco api is already loaded.\n   * @param observer observer object.\n   * @returns A subscription object that should be unsubscribed later.\n   */\n  onLoadMonaco(observer: (arg: typeof monaco) => void) {\n    if (typeof WINDOW.monaco === 'undefined') {\n      return this.monaco$.asObservable().subscribe(observer)\n    }\n    return of(WINDOW.monaco as typeof monaco).subscribe(observer)\n  }\n\n  /**\n   * Loads monaco editor if it is not loaded.\n   */\n  loadAsync() {\n    return (\n      this.loadPromise ??\n      (this.loadPromise = new Promise((resolve) => {\n        (async () => {\n          // Try to fix the issues described here by loading monaco editor\n          // after all the other scripts.\n          // https://stackoverflow.com/a/33635881\n          // https://github.com/microsoft/monaco-editor/issues/662\n          // https://github.com/microsoft/monaco-editor/issues/1249\n          const interval = setInterval(() => {\n            if (document.readyState !== 'complete') return\n            clearInterval(interval)\n\n            setTimeout(async () => {\n              await this.resourceLoader.waitForPendings()\n\n              this.baseUrl = this.config?.assets || MONACO_CDNJS_URL\n              if (this.baseUrl.endsWith('/')) {\n                this.baseUrl = this.baseUrl.slice(0, this.baseUrl.length - 1)\n              }\n\n              this.addWorkersIfCrossDomain()\n\n              if (!WINDOW.require) {\n                lastValueFrom(this.resourceLoader.loadAllAsync([['script', `${this.baseUrl}/min/vs/loader.js`]])).then(\n                  () => this.onLoad(resolve)\n                )\n              } else {\n                this.onLoad(resolve)\n              }\n            }, 300)\n          })\n        })()\n      }))\n    )\n  }\n\n  private onLoad(resolve: (e: typeof monaco) => void): void {\n    WINDOW.require.config({\n      paths: { vs: this.baseUrl + '/min/vs' },\n    })\n\n    const locale = this.config?.locale || ''\n    if (locale !== 'en') {\n      WINDOW.require.config({\n        'vs/nls': {\n          availableLanguages: { '*': locale },\n        },\n      })\n    }\n\n    WINDOW.require(['vs/editor/editor.main'], async () => {\n      await this.activateContributions()\n      this.monaco$.next(monaco)\n      resolve(monaco)\n    })\n  }\n\n  private addWorkersIfCrossDomain() {\n    // https://github.com/microsoft/monaco-editor/blob/master/docs/integrate-amd-cross.md\n    if (this.baseUrl.startsWith('http')) {\n      const proxy = URL.createObjectURL(\n        new Blob(\n          [\n            `\n                self.MonacoEnvironment = { baseUrl: '${this.baseUrl}/min' };\n                importScripts('${this.baseUrl}/min/vs/base/worker/workerMain.js');\n            `,\n          ],\n          { type: 'text/javascript' }\n        )\n      )\n\n      WINDOW.MonacoEnvironment = {\n        baseUrl: this.baseUrl + '/min',\n        getWorkerUrl: () => proxy,\n        globalAPI: true,\n      }\n    }\n  }\n\n  private async activateContributions(): Promise<void> {\n    await Promise.all(this.contributions.map((e) => e.activate()))\n  }\n\n  private async deactivateContributions(): Promise<void> {\n    await Promise.all(\n      this.contributions.map((e) => {\n        if (e.deactivate) {\n          return e.deactivate()\n        }\n        return Promise.resolve()\n      })\n    )\n  }\n}\n","import {\n  AfterViewChecked,\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { NgeMonacoConfig, NGE_MONACO_CONFIG } from '../../monaco-config'\nimport { NgeMonacoLoaderService } from '../../services/monaco-loader.service'\n\n@Component({\n  selector: 'nge-monaco-diff-editor',\n  templateUrl: './monaco-diff-editor.component.html',\n  styleUrls: ['./monaco-diff-editor.component.scss'],\n})\nexport class NgeMonacoDiffEditorComponent implements AfterViewInit, AfterViewChecked, OnDestroy {\n  @ViewChild('container', { static: true })\n  container!: ElementRef<HTMLElement>\n\n  @Output()\n  ready = new EventEmitter<monaco.editor.IEditor>()\n\n  @Input()\n  autoLayout = true\n\n  @Input()\n  options?: monaco.editor.IStandaloneDiffEditorConstructionOptions\n\n  private editor?: monaco.editor.IStandaloneDiffEditor\n  private width = 0\n  private height = 0\n\n  constructor(\n    private readonly loader: NgeMonacoLoaderService,\n    @Optional()\n    @Inject(NGE_MONACO_CONFIG)\n    private readonly config: NgeMonacoConfig\n  ) {}\n\n  @HostListener('window:resize')\n  onResizeWindow() {\n    this.editor?.layout()\n  }\n\n  ngAfterViewInit() {\n    this.loader.loadAsync().then(() => {\n      this.createEditor()\n    })\n  }\n\n  ngAfterViewChecked() {\n    if (!this.autoLayout) {\n      return\n    }\n    const { offsetWidth, offsetHeight } = this.container.nativeElement\n    if (offsetWidth !== this.width || offsetHeight !== this.height) {\n      this.width = offsetWidth\n      this.height = offsetHeight\n      this.editor?.layout()\n    }\n  }\n\n  ngOnDestroy() {\n    this.editor?.dispose()\n  }\n\n  private createEditor() {\n    this.editor = monaco.editor.createDiffEditor(this.container.nativeElement, {\n      ...(this.config.options || {}),\n      ...(this.options || {}),\n    })\n    this.ready.emit(this.editor)\n  }\n}\n","<div class=\"nge-monaco-diff-editor-container\" #container></div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'nge-monaco-placeholder',\n  templateUrl: './monaco-placeholder.component.html',\n  styleUrls: ['./monaco-placeholder.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeMonacoPlaceholderComponent {}\n","\n","import {\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { NGE_MONACO_CONFIG, NgeMonacoConfig } from '../../monaco-config'\nimport { NgeMonacoLoaderService } from '../../services/monaco-loader.service'\n\n@Component({\n  selector: 'nge-monaco-editor',\n  templateUrl: './monaco-editor.component.html',\n  styleUrls: ['./monaco-editor.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeMonacoEditorComponent implements AfterViewInit, AfterViewChecked, OnDestroy {\n  protected loading = true\n  @ViewChild('container', { static: true })\n  protected container!: ElementRef<HTMLElement>\n\n  @Output() ready = new EventEmitter<monaco.editor.IEditor>()\n  @Input() autoLayout = true\n  @Input() options?: monaco.editor.IStandaloneEditorConstructionOptions\n\n  private editor?: monaco.editor.IStandaloneCodeEditor\n  private width = 0\n  private height = 0\n\n  constructor(\n    private readonly loader: NgeMonacoLoaderService,\n    @Optional()\n    @Inject(NGE_MONACO_CONFIG)\n    private readonly config: NgeMonacoConfig\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.loader.loadAsync().then(() => {\n      this.createEditor()\n    })\n  }\n\n  ngAfterViewChecked(): void {\n    if (!this.autoLayout) {\n      return\n    }\n    const { offsetWidth, offsetHeight } = this.container.nativeElement\n    if (offsetWidth !== this.width || offsetHeight !== this.height) {\n      this.width = offsetWidth\n      this.height = offsetHeight\n      this.editor?.layout()\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.editor?.dispose()\n  }\n\n  @HostListener('window:resize')\n  protected onResizeWindow(): void {\n    this.editor?.layout()\n  }\n\n  private createEditor(): void {\n    this.editor = monaco.editor.create(this.container.nativeElement, {\n      ...(this.config.options || {}),\n      ...(this.options || {}),\n    })\n    this.loading = false\n    this.ready.emit(this.editor)\n  }\n}\n","<nge-monaco-placeholder *ngIf=\"loading\" />\n<div class=\"nge-monaco-editor-container\" #container></div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpClient } from '@angular/common/http'\nimport { Inject, Injectable, Optional } from '@angular/core'\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { NgeMonacoContribution } from '../contributions/monaco-contribution'\nimport { NGE_MONACO_CONFIG, NgeMonacoConfig } from '../monaco-config'\n\n@Injectable({ providedIn: 'root' })\nexport class NgeMonacoThemeService implements NgeMonacoContribution {\n  private readonly themes = new BehaviorSubject<string[]>([])\n  private readonly activeTheme = new BehaviorSubject<NgeMonacoTheme | undefined>(undefined)\n\n  private themeService: any\n\n  constructor(\n    @Optional()\n    private readonly http: HttpClient,\n\n    @Optional()\n    @Inject(NGE_MONACO_CONFIG)\n    private readonly config: NgeMonacoConfig\n  ) {}\n\n  /**\n   * Gets the current active theme of monaco editor (undefined if monaco editor is not loaded).\n   */\n  get theme(): NgeMonacoTheme | undefined {\n    return this.activeTheme.value\n  }\n\n  /**\n   * Gets an observable that emit each time monaco editor theme change.\n   *\n   * Note: The observable emits first with the current theme\n   * the first time `subscribe()` method is called.\n   */\n  get themeChanges(): Observable<NgeMonacoTheme | undefined> {\n    return this.activeTheme.asObservable()\n  }\n\n  /**\n   * Gets an observable that emit each time monaco editor theme list change.\n   */\n  get themesChanges(): Observable<string[]> {\n    return this.themes.asObservable().pipe(\n      map((e) => e.slice()) // return a copy of the array\n    )\n  }\n\n  async activate(): Promise<void> {\n    //this.decorateCreateEditorAPI()\n\n    const node = document.createElement('div')\n\n    const editor = monaco.editor.create(node)\n    this.themeService = (editor as any)._themeService\n    setTimeout(() => editor.dispose())\n\n    this.retrieveThemes()\n\n    await this.setTheme(this.config?.theming?.default || 'vs')\n    node.remove()\n  }\n\n  /**\n   * Switches monaco editor theme.\n   * @param themeName The new theme to use.\n   *\n   */\n  async setTheme(themeName: string): Promise<void> {\n    await this.defineTheme(themeName)\n    monaco.editor.setTheme(themeName)\n    this.activeTheme.next(this.themeService.getColorTheme())\n  }\n\n  /**\n   * Gets the information about the given `themeName`\n   * @param themeName The theme to get.\n   * @returns A promise that resolves with the theme info.\n   */\n  async getTheme(themeName: string): Promise<NgeMonacoTheme> {\n    await this.defineTheme(themeName)\n    return this.themeService._knownThemes.get(themeName)\n  }\n\n  /**\n   * Defines a theme for the Monaco editor.\n   * @remarks\n   * - If the theme is already defined, this method does nothing.\n   * @param themeName - The name of the theme to define.\n   * @throws {ReferenceError} If the themeName argument is not provided.\n   * @throws {Error} If the specified theme is missing.\n   * @throws {Error} If HttpClientModule is missing in AppModule.\n   * @returns A Promise that resolves when the theme is defined successfully.\n   */\n  async defineTheme(themeName: string): Promise<void> {\n    if (!themeName) {\n      throw new ReferenceError('Argument \"themeName\" is required')\n    }\n\n    const knownThemes: Map<string, NgeMonacoTheme> = this.themeService._knownThemes\n    if (knownThemes.has(themeName)) {\n      return\n    }\n\n    const customThemePath = this.config?.theming?.themes?.find((e) => {\n      return this.themeNameFromPath(e) === themeName\n    })\n    if (!customThemePath) {\n      throw new Error(`[nge-monaco] Missing theme \"${themeName}\"`)\n    }\n\n    if (!this.http) {\n      throw new Error('[nge-monaco] Missing HttpClientModule in AppModule. See README for more information')\n    }\n\n    try {\n      const theme = await firstValueFrom(this.http.get<any>(customThemePath))\n      monaco.editor.defineTheme(themeName, {\n        base: theme.base,\n        inherit: theme.inherit,\n        rules: theme.rules,\n        colors: theme.colors as any,\n      })\n    } catch (error) {\n      console.error('[nge-monaco] Failed to load theme ' + customThemePath, error)\n    }\n  }\n\n  private retrieveThemes(): void {\n    const themes: string[] = []\n    this.themeService._knownThemes.forEach((theme: any) => {\n      themes.push(theme.themeName)\n    })\n    const customThemes: string[] = (this.config?.theming?.themes || []).map(this.themeNameFromPath.bind(this))\n    this.themes.next(themes.concat(customThemes))\n  }\n\n  private themeNameFromPath(path: string): string {\n    const name = path.split('/').pop()\n    if (!name) {\n      throw new Error(`[nge-monaco]: invalid theme path \"${path}\"`)\n    }\n    return name.replace('.json', '')\n  }\n\n  private decorateCreateEditorAPI(): void {\n    const createEditor = monaco.editor.create\n    monaco.editor.create = (\n      element: HTMLElement,\n      options?: monaco.editor.IStandaloneEditorConstructionOptions | undefined,\n      override?: monaco.editor.IEditorOverrideServices | undefined\n    ) => {\n      const editor = createEditor.call(monaco.editor, element, options, override)\n      const updateOptions = editor.updateOptions\n      editor.updateOptions = (newOptions: monaco.editor.IStandaloneEditorConstructionOptions) => {\n        updateOptions.call(editor, newOptions)\n        if (newOptions.theme) {\n          this.setTheme(newOptions.theme).catch(console.error)\n        }\n      }\n\n      if (options?.theme) {\n        this.setTheme(options.theme).catch(console.error)\n      }\n      return editor\n    }\n  }\n}\n\nexport interface NgeMonacoTheme {\n  id: string\n  type: 'light' | 'dark' | 'hc'\n  colors: Map<string, any>\n  themeName: string\n  semanticHighlighting: boolean\n  themeData: monaco.editor.IStandaloneThemeData\n  defaultColors: Map<string, any>\n  defines(colorId: string): boolean\n  getColor(colorId: string, useDefault?: boolean): any\n  getColors(): Map<string, any>\n}\n\n/** List of all custom themes from of the library */\nexport const NGE_MONACO_THEMES = [\n  'active4d.json',\n  'all-hallows-eve.json',\n  'amy.json',\n  'birds-of-paradise.json',\n  'blackboard.json',\n  'brilliance-black.json',\n  'brilliance-dull.json',\n  'chrome-devtools.json',\n  'clouds-midnight.json',\n  'clouds.json',\n  'cobalt.json',\n  'dawn.json',\n  'dreamweaver.json',\n  'eiffel.json',\n  'espresso-libre.json',\n  'github.json',\n  'idle-fingers.json',\n  'idle.json',\n  'iplastic.json',\n  'katzenmilch.json',\n  'kuroir-theme.json',\n  'kr-theme.json',\n  'lazy.json',\n  'magicwb-amiga.json',\n  'merbivore-soft.json',\n  'merbivore.json',\n  'monokai-bright.json',\n  'monokai.json',\n  'monoindustrial.json',\n  'night-owl.json',\n  'nord.json',\n  'oceanic-next.json',\n  'one-dark-pro.json',\n  'pastels-on-dark.json',\n  'slush-and-poppies.json',\n  'solarized-dark.json',\n  'solarized-light.json',\n  'space-cadet.json',\n  'sunburst.json',\n  'textmate.json',\n  'tomorrow-night-blue.json',\n  'tomorrow-night-bright.json',\n  'tomorrow-night-eighties.json',\n  'tomorrow-night.json',\n  'tomorrow.json',\n  'twilight.json',\n  'upstream-sunburst.json',\n  'vibrant-ink.json',\n  'xcode.json',\n  'zenburnesque.json',\n]\n","import { Injectable } from '@angular/core'\nimport { NgeMonacoLoaderService } from './monaco-loader.service'\nimport { NgeMonacoThemeService } from './monaco-theme.service'\n\n@Injectable({ providedIn: 'root' })\nexport class NgeMonacoColorizerService {\n  constructor(\n    private readonly loader: NgeMonacoLoaderService,\n    private readonly theming: NgeMonacoThemeService\n  ) {}\n\n  async colorizeElement(options: NgeMonacoColorizeOptions) {\n    await this.loader.loadAsync()\n    if (options.theme) {\n      await this.theming.defineTheme(options.theme)\n    }\n\n    const { element } = options\n\n    element.innerHTML = this.escapeHtml(options.code || '')\n    element.style.padding = '4px'\n    element.style.display = 'block'\n\n    const pre = element.parentElement\n    if (pre?.tagName === 'PRE') {\n      if (!pre.classList.contains('monaco-editor')) {\n        pre.classList.add('monaco-editor')\n      }\n      if (!pre.classList.contains('monaco-editor-background')) {\n        pre.classList.add('monaco-editor-background')\n      }\n    }\n\n    element.className = ''\n\n    const languages = monaco.languages.getLanguages()\n    const language = languages.find((e) => {\n      return e.id === options.language || e.aliases?.find((a) => a === options.language)\n    })?.id\n\n    await monaco.editor.colorizeElement(element, {\n      mimeType: language || 'plaintext',\n      theme: options.theme || this.theming.theme?.themeName || 'vs',\n    })\n\n    this.highlightLines(options)\n    this.showLineNumbers(options)\n\n    this.addFileTab(options)\n  }\n\n  private escapeHtml(input: string): string {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const map: any = {\n      '<': '&lt;',\n      '>': '&gt;',\n    }\n    return input.replace(/[<>]/g, (tag) => map[tag] || tag)\n  }\n\n  private highlightLines(options: NgeMonacoColorizeOptions): void {\n    if (!options.highlights) {\n      return\n    }\n\n    const { element } = options\n\n    const linesToHighlight = this.lineNumbersFromString(options.highlights.toString())\n\n    let newLine = true\n    let lineNumber = 1\n    element.childNodes.forEach((e) => {\n      const node = e as HTMLElement\n      if (newLine) {\n        const div = document.createElement('div')\n        div.style.height = '18px'\n        if (linesToHighlight.includes(lineNumber)) {\n          div.classList.add('rangeHighlight')\n          div.classList.add('selected-text')\n        }\n        element.insertBefore(div, node)\n        element.removeChild(node)\n        div.appendChild(node)\n        newLine = false\n      } else if (node.tagName === 'BR') {\n        lineNumber++\n        newLine = true\n      }\n    })\n    Array.from(element.getElementsByTagName('br')).forEach((node) => node.remove())\n  }\n\n  private showLineNumbers(options: NgeMonacoColorizeOptions): void {\n    if (!options.lines) {\n      return\n    }\n\n    const { element } = options\n    const lines = this.lineNumbersFromString(options.lines.toString())\n    const length = (options.code || '').split('\\n').length\n    if (lines.length === 1) {\n      for (let i = lines[0] + 1; i <= length; i++) {\n        lines.push(i)\n      }\n    }\n\n    const side = ['<div style=\"padding:0  12px; text-align: right;\">']\n    for (let i = 0; i < length; i++) {\n      let num = ''\n      if (lines.includes(i + 1)) {\n        num = '' + (i + 1)\n      }\n      side.push(`<div class=\"line-numbers\" style=\"height: 18px\">${num}</div>`)\n    }\n    side.push('</div>')\n\n    element.style.display = 'flex'\n    element.innerHTML = `\n            ${side.join('')}\n            <div style=\"flex: 1;\">${element.innerHTML}</div>\n        `\n  }\n\n  private lineNumbersFromString(input: string): number[] {\n    const tokens = (input || '').trim().split(' ')\n    const lines: number[] = []\n    for (const token of tokens) {\n      if (token.includes('-')) {\n        const range = token.split('-')\n        const start = Number.parseInt(range[0], 10)\n        const end = Number.parseInt(range[1], 10)\n        if (start && end) {\n          for (let i = start; i <= end; i++) {\n            if (!lines.includes(i)) {\n              lines.push(i)\n            }\n          }\n        }\n      } else {\n        const n = Number.parseInt(token, 10)\n        if (n) {\n          lines.push(n)\n        }\n      }\n    }\n    return lines\n  }\n\n  private addFileTab(options: NgeMonacoColorizeOptions): void {\n    const { element, code, filename } = options\n    const container = element.parentElement as HTMLElement\n\n    // Force remove padding from pre element\n    if (container) {\n      container.style.padding = '0'\n      container.style.margin = '0'\n      container.style.width = '100%'\n    }\n\n    // Create tab container that takes full width\n    const tabContainer = document.createElement('div')\n    tabContainer.style.display = 'flex'\n    tabContainer.style.justifyContent = 'space-between'\n    tabContainer.style.alignItems = 'center'\n    tabContainer.style.padding = '8px 16px'\n    tabContainer.style.borderBottom = '1px solid var(--vscode-dropdown-border, #e8e8e8)'\n    tabContainer.style.backgroundColor = 'var(--vscode-editor-background, #fafafa)'\n    tabContainer.style.fontSize = '14px'\n    tabContainer.style.width = '100%'\n    tabContainer.style.boxSizing = 'border-box'\n    tabContainer.style.fontFamily = 'var(--monaco-monospace-font, \"SF Mono\", Monaco, Menlo, Consolas, \"Ubuntu Mono\", monospace)'\n\n    // Add filename on left side\n    const filenameSpan = document.createElement('span')\n    filenameSpan.textContent = filename || ''\n    filenameSpan.style.overflow = 'hidden'\n    filenameSpan.style.textOverflow = 'ellipsis'\n    filenameSpan.style.whiteSpace = 'nowrap'\n    filenameSpan.style.fontWeight = '500'\n    filenameSpan.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))'\n    filenameSpan.title = filename || ''\n\n    // Add file actions container (right side)\n    const fileActions = document.createElement('div')\n    fileActions.className = 'file-actions'\n    fileActions.style.display = 'flex'\n    fileActions.style.gap = '4px'\n\n    // Create copy button with icon\n    const copyButton = document.createElement('button')\n    copyButton.style.border = 'none'\n    copyButton.style.background = 'none'\n    copyButton.style.cursor = 'pointer'\n    copyButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))'\n    copyButton.style.display = 'flex'\n    copyButton.style.alignItems = 'center'\n    copyButton.style.justifyContent = 'center'\n    copyButton.style.width = '32px'\n    copyButton.style.height = '32px'\n    copyButton.style.padding = '0'\n    copyButton.style.borderRadius = '4px'\n    copyButton.style.transition = 'all 0.3s'\n    copyButton.title = 'Copy code to clipboard'\n\n    // Hover effect\n    copyButton.addEventListener('mouseover', () => {\n      copyButton.style.color = '#1890ff'\n      copyButton.style.backgroundColor = 'rgba(0, 0, 0, 0.04)'\n    })\n    copyButton.addEventListener('mouseout', () => {\n      copyButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))'\n      copyButton.style.backgroundColor = 'transparent'\n    })\n\n    // Copy functionality\n    copyButton.addEventListener('click', async (event) => {\n      // Prevent default action and event bubbling\n      event.preventDefault();\n      event.stopPropagation();\n\n      try {\n        await navigator.clipboard.writeText(code || '');\n\n        // Show feedback\n        copyButton.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"></path></svg>`;\n        copyButton.style.color = '#52c41a';\n\n\n        setTimeout(() => {\n          // Use requestAnimationFrame to ensure smooth transition\n          requestAnimationFrame(() => {\n            copyButton.innerHTML = copySvg;\n            copyButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))';\n\n          });\n        }, 2000);\n      } catch (err) {\n        console.error('Failed to copy code:', err);\n\n      }\n\n      // Return false to ensure no further action\n      return false;\n    })\n\n    // Create download button with icon\n    const downloadButton = document.createElement('button')\n    downloadButton.style.border = 'none'\n    downloadButton.style.background = 'none'\n    downloadButton.style.cursor = 'pointer'\n    downloadButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))'\n    downloadButton.style.display = 'flex'\n    downloadButton.style.alignItems = 'center'\n    downloadButton.style.justifyContent = 'center'\n    downloadButton.style.width = '32px'\n    downloadButton.style.height = '32px'\n    downloadButton.style.padding = '0'\n    downloadButton.style.borderRadius = '4px'\n    downloadButton.style.transition = 'all 0.3s'\n    downloadButton.title = 'Download code as file'\n\n    // Hover effect\n    downloadButton.addEventListener('mouseover', () => {\n      downloadButton.style.color = '#1890ff'\n      downloadButton.style.backgroundColor = 'rgba(0, 0, 0, 0.04)'\n    })\n    downloadButton.addEventListener('mouseout', () => {\n      downloadButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))'\n      downloadButton.style.backgroundColor = 'transparent'\n    })\n\n    // Download functionality\n    downloadButton.addEventListener('click', (event) => {\n      // Prevent default action and event bubbling\n      event.preventDefault();\n      event.stopPropagation();\n\n      // Save original content\n      const originalInnerHTML = downloadButton.innerHTML;\n\n      try {\n        const blob = new Blob([code || ''], { type: 'text/plain' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = filename || 'code.txt';\n        a.style.display = 'none';\n        a.setAttribute('data-no-scroll', 'true'); // Mark as no-scroll\n\n        // Execute download\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n\n        // Show success feedback similar to copy button\n        downloadButton.innerHTML = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"></path></svg>`;\n        downloadButton.style.color = '#52c41a';\n\n\n        // Reset button after timeout\n        setTimeout(() => {\n          // Use requestAnimationFrame for smoother transition\n          requestAnimationFrame(() => {\n            downloadButton.innerHTML = downloadSvg;\n            downloadButton.style.color = 'var(--vscode-editor-foreground, rgba(0, 0, 0, 0.85))';\n            URL.revokeObjectURL(url); // Clean up URL object\n\n          });\n        }, 2000);\n      } catch (err) {\n        console.error('Failed to download code:', err);\n        downloadButton.innerHTML = originalInnerHTML;\n      }\n\n      // Return false to ensure no further action\n      return false;\n    })\n\n    // Copy icon SVG\n    const copySvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>`;\n\n    // Download icon SVG\n    const downloadSvg = `<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>`;\n\n    copyButton.innerHTML = copySvg;\n    downloadButton.innerHTML = downloadSvg;\n\n    // Add buttons to actions container\n    fileActions.appendChild(copyButton)\n    fileActions.appendChild(downloadButton)\n\n    // Build the tab\n    tabContainer.appendChild(filenameSpan)\n    tabContainer.appendChild(fileActions)\n\n    // Insert tab before the editor content\n    if (container) {\n      container.insertBefore(tabContainer, element)\n\n      // Add some styling to the container for better appearance\n      container.style.border = '1px solid #e8e8e8'\n      container.style.borderRadius = '2px'\n      container.style.overflow = 'hidden'\n      container.style.marginBottom = '16px'\n      container.style.padding = '0'\n\n      // Add inner padding to code content\n      element.style.padding = '16px'\n    } else {\n      // If no container, wrap the element with one\n      const wrapper = document.createElement('div')\n      wrapper.style.border = '1px solid #e8e8e8'\n      wrapper.style.borderRadius = '2px'\n      wrapper.style.overflow = 'hidden'\n      wrapper.style.marginBottom = '16px'\n      wrapper.style.padding = '0'\n      wrapper.style.width = '100%'\n\n      const parent = element.parentElement\n      if (parent) {\n        parent.insertBefore(wrapper, element)\n        wrapper.appendChild(tabContainer)\n        wrapper.appendChild(element)\n\n        // Add inner padding to code content\n        element.style.padding = '16px'\n      }\n    }\n  }\n}\n\nexport interface NgeMonacoColorizeOptions {\n  /** Element to colorize (&lt;code&gt; element). */\n  element: HTMLElement\n\n  /** Code to highlight */\n  code: string\n\n  /** Theme to use for the syntax highlighting  */\n  theme?: string\n\n  /** Target language (default plaintext). */\n  language?: string\n\n  /**\n   * Start line number or a space separated list of line numbers to show.\n   *\n   * Example:\n   *\n   * *Show all line numbers starting 1*\n   *\n   * `\"1\"`\n   *\n   * *Show all line numbers from 1 to 4*\n   *\n   * `\"1-4\"`\n   *\n   * *Show lines 2 4 5 6 7 9*\n   *\n   * `\"2 4-7 9\"`\n   */\n  lines?: string | number\n\n  /**\n   * A space separated list of line numbers to highlight.\n   *\n   * Example:\n   *\n   * *Highlight line 1*\n   *\n   * `\"1\"`\n   *\n   * *Highlight all lines from 1 to 4*\n   *\n   * `\"1-4\"`\n   *\n   * *Highlight lines 2 4 5 6 7 9*\n   *\n   * `\"2 4-7 9\"`\n   */\n  highlights?: string | number\n\n\n  /**\n   * Optional filename to display in the tab header.\n   */\n  filename?: string\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  ViewChild,\n  inject,\n} from '@angular/core'\nimport { NgeMonacoColorizerService } from '../../services/monaco-colorizer.service'\nimport { Subscription } from 'rxjs'\n\n@Component({\n  selector: 'nge-monaco-viewer',\n  templateUrl: 'monaco-viewer.component.html',\n  styleUrls: ['monaco-viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeMonacoViewerComponent implements OnChanges, OnDestroy {\n  private readonly colorizer = inject(NgeMonacoColorizerService)\n  private readonly changeDetectorRef = inject(ChangeDetectorRef)\n\n  private editor?: monaco.editor.IEditor\n  private observer?: MutationObserver\n  private subscriptions: Subscription[] = []\n\n  protected loading = true\n\n  @ViewChild('container', { static: true }) container!: ElementRef<HTMLElement>\n  @ViewChild('transclusion', { static: true })\n  transclusion!: ElementRef<HTMLElement>\n\n  /** code to highlight */\n  @Input() code?: string\n\n  /** show line numbers? */\n  @Input() lines?: string | number\n\n  /** theme to use for the syntax highlighting  */\n  @Input() theme?: string\n\n  /** target language */\n  @Input() language?: string\n\n  /** space separated list of line numbers to highlight */\n  @Input() highlights?: string | number\n\n  /** filename to display in the header tab */\n  @Input() filename?: string\n\n\n  ngOnChanges(): void {\n    const code = this.transclusion.nativeElement.textContent?.trim() || this.code || ''\n    this.colorize(code)\n  }\n\n  ngOnDestroy(): void {\n    this.editor?.dispose()\n    this.observer?.disconnect()\n    this.subscriptions.forEach((s) => s.unsubscribe())\n  }\n\n  private async colorize(code: string): Promise<void> {\n    try {\n      await this.colorizer.colorizeElement({\n        code: code || '',\n        theme: this.theme,\n        lines: this.lines,\n        language: this.language,\n        highlights: this.highlights,\n        filename: this.filename,\n        element: this.container.nativeElement,\n      })\n    } finally {\n      this.loading = false\n      this.changeDetectorRef.markForCheck()\n    }\n  }\n}\n","<nge-monaco-placeholder *ngIf=\"loading\" />\n\n<pre class=\"monaco-editor monaco-editor-background\">\n  <code #container></code>\n</pre>\n\n<div #transclusion style=\"display: none;\">\n  <ng-content></ng-content>\n</div>\n\n","// ACTIONS\n/** Toggle High Contrast Theme */\nexport const ACTION_TOGGLE_HIGH_CONTRAST = 'editor.action.toggleHighContrast'\n\n/** Set Selection Anchor */\nexport const ACTION_SET_SELECTION_ANCHOR = 'editor.action.setSelectionAnchor'\n\n/** Move Selected Text Left */\nexport const ACTION_MOVE_CARRET_LEFT = 'editor.action.moveCarretLeftAction'\n\n/** Move Selected Text Right */\nexport const ACTION_MOVE_CARRET_RIGHT = 'editor.action.moveCarretRightAction'\n\n/** Transpose Letters */\nexport const ACTION_TRANSPOSE_LETTERS = 'editor.action.transposeLetters'\n\n/** Copy With Syntax Highlighting */\nexport const ACTION_CLIPBOARD_COPY_WITH_SYNTAX_HIGHLIGHTING = 'editor.action.clipboardCopyWithSyntaxHighlightingAction'\n\n/** Toggle Line Comment */\nexport const ACTION_COMMENT_LINE = 'editor.action.commentLine'\n\n/** Add Line Comment */\nexport const ACTION_ADD_COMMENT_LINE = 'editor.action.addCommentLine'\n\n/** Remove Line Comment */\nexport const ACTION_REMOVE_COMMENT_LINE = 'editor.action.removeCommentLine'\n\n/** Toggle Block Comment */\nexport const ACTION_BLOCK_COMMENT = 'editor.action.blockComment'\n\n/** Show Editor Context Menu */\nexport const ACTION_SHOW_CONTEXT_MENU = 'editor.action.showContextMenu'\n\n/** Cursor Undo */\nexport const ACTION_CURSOR_UNDO = 'cursorUndo'\n\n/** Cursor Redo */\nexport const ACTION_CURSOR_REDO = 'cursorRedo'\n\n/** Editor Font Zoom In */\nexport const ACTION_FONT_ZOOM_IN = 'editor.action.fontZoomIn'\n\n/** Editor Font Zoom Out */\nexport const ACTION_FONT_ZOOM_OUT = 'editor.action.fontZoomOut'\n\n/** Editor Font Zoom Reset */\nexport const ACTION_FONT_ZOOM_RESET = 'editor.action.fontZoomReset'\n\n/** Convert Indentation to Spaces */\nexport const ACTION_INDENTATION_TO_SPACES = 'editor.action.indentationToSpaces'\n\n/** Convert Indentation to Tabs */\nexport const ACTION_INDENTATION_TO_TABS = 'editor.action.indentationToTabs'\n\n/** Indent Using Tabs */\nexport const ACTION_INDENT_USING_TABS = 'editor.action.indentUsingTabs'\n\n/** Indent Using Spaces */\nexport const ACTION_INDENT_USING_SPACES = 'editor.action.indentUsingSpaces'\n\n/** Detect Indentation from Content */\nexport const ACTION_DETECT_INDENTATION = 'editor.action.detectIndentation'\n\n/** Reindent Lines */\nexport const ACTION_REINDENTLINES = 'editor.action.reindentlines'\n\n/** Reindent Selected Lines */\nexport const ACTION_REINDENTSELECTEDLINES = 'editor.action.reindentselectedlines'\n\n/** Copy Line Up */\nexport const ACTION_COPY_LINES_UP = 'editor.action.copyLinesUpAction'\n\n/** Copy Line Down */\nexport const ACTION_COPY_LINES_DOWN = 'editor.action.copyLinesDownAction'\n\n/** Duplicate Selection */\nexport const ACTION_DUPLICATE_SELECTION = 'editor.action.duplicateSelection'\n\n/** Move Line Up */\nexport const ACTION_MOVE_LINES_UP = 'editor.action.moveLinesUpAction'\n\n/** Move Line Down */\nexport const ACTION_MOVE_LINES_DOWN = 'editor.action.moveLinesDownAction'\n\n/** Sort Lines Ascending */\nexport const ACTION_SORT_LINES_ASCENDING = 'editor.action.sortLinesAscending'\n\n/** Sort Lines Descending */\nexport const ACTION_SORT_LINES_DESCENDING = 'editor.action.sortLinesDescending'\n\n/** Trim Trailing Whitespace */\nexport const ACTION_TRIM_TRAILING_WHITESPACE = 'editor.action.trimTrailingWhitespace'\n\n/** Delete Line */\nexport const ACTION_DELETE_LINES = 'editor.action.deleteLines'\n\n/** Indent Line */\nexport const ACTION_INDENT_LINES = 'editor.action.indentLines'\n\n/** Outdent Line */\nexport const ACTION_OUTDENT_LINES = 'editor.action.outdentLines'\n\n/** Insert Line Above */\nexport const ACTION_INSERT_LINE_BEFORE = 'editor.action.insertLineBefore'\n\n/** Insert Line Below */\nexport const ACTION_INSERT_LINE_AFTER = 'editor.action.insertLineAfter'\n\n/** Delete All Left */\nexport const ACTION_DELETE_ALL_LEFT = 'deleteAllLeft'\n\n/** Delete All Right */\nexport const ACTION_DELETE_ALL_RIGHT = 'deleteAllRight'\n\n/** Join Lines */\nexport const ACTION_JOIN_LINES = 'editor.action.joinLines'\n\n/** Transpose characters around the cursor */\nexport const ACTION_TRANSPOSE = 'editor.action.transpose'\n\n/** Transform to Uppercase */\nexport const ACTION_TRANSFORM_TO_UPPERCASE = 'editor.action.transformToUppercase'\n\n/** Transform to Lowercase */\nexport const ACTION_TRANSFORM_TO_LOWERCASE = 'editor.action.transformToLowercase'\n\n/** Transform to Title Case */\nexport const ACTION_TRANSFORM_TO_TITLECASE = 'editor.action.transformToTitlecase'\n\n/** Expand Selection */\nexport const ACTION_SMART_SELECT_EXPAND = 'editor.action.smartSelect.expand'\n\n/** Shrink Selection */\nexport const ACTION_SMART_SELECT_SHRINK = 'editor.action.smartSelect.shrink'\n\n/** Developer: Force Retokenize */\nexport const ACTION_FORCE_RETOKENIZE = 'editor.action.forceRetokenize'\n\n/** Toggle Tab Key Moves Focus */\nexport const ACTION_TOGGLE_TAB_FOCUS_MODE = 'editor.action.toggleTabFocusMode'\n\n/** Command Palette */\nexport const ACTION_QUICK_COMMAND = 'editor.action.quickCommand'\n\n/** Replace with Previous Value */\nexport const ACTION_IN_PLACE_REPLACE_UP = 'editor.action.inPlaceReplace.up'\n\n/** Replace with Next Value */\nexport const ACTION_IN_PLACE_REPLACE_DOWN = 'editor.action.inPlaceReplace.down'\n\n/** Go to Line/Column... */\nexport const ACTION_GOTO_LINE = 'editor.action.gotoLine'\n\n/** Select to Bracket */\nexport const ACTION_SELECT_TO_BRACKET = 'editor.action.selectToBracket'\n\n/** Go to Bracket */\nexport const ACTION_JUMP_TO_BRACKET = 'editor.action.jumpToBracket'\n\n/** Find */\nexport const ACTION_FIND = 'actions.find'\n\n/** Find With Selection */\nexport const ACTION_FIND_WITH_SELECTION = 'actions.findWithSelection'\n\n/** Find Next */\nexport const ACTION_NEXT_MATCH_FIND = 'editor.action.nextMatchFindAction'\n\n/** Find Previous */\nexport const ACTION_PREVIOUS_MATCH_FIND = 'editor.action.previousMatchFindAction'\n\n/** Find Next Selection */\nexport const ACTION_NEXT_SELECTION_MATCH_FIND = 'editor.action.nextSelectionMatchFindAction'\n\n/** Find Previous Selection */\nexport const ACTION_PREVIOUS_SELECTION_MATCH_FIND = 'editor.action.previousSelectionMatchFindAction'\n\n/** Replace */\nexport const ACTION_START_FIND_REPLACE = 'editor.action.startFindReplaceAction'\n\n/** Unfold */\nexport const ACTION_EDITOR_UNFOLD = 'editor.unfold'\n\n/** Unfold Recursively */\nexport const ACTION_EDITOR_UNFOLD_RECURSIVELY = 'editor.unfoldRecursively'\n\n/** Fold */\nexport const ACTION_EDITOR_FOLD = 'editor.fold'\n\n/** Fold Recursively */\nexport const ACTION_EDITOR_FOLD_RECURSIVELY = 'editor.foldRecursively'\n\n/** Fold All */\nexport const ACTION_EDITOR_FOLD_ALL = 'editor.foldAll'\n\n/** Unfold All */\nexport const ACTION_EDITOR_UNFOLD_ALL = 'editor.unfoldAll'\n\n/** Fold All Block Comments */\nexport const ACTION_EDITOR_FOLD_ALL_BLOCK_COMMENTS = 'editor.foldAllBlockComments'\n\n/** Fold All Regions */\nexport const ACTION_EDITOR_FOLD_ALL_MARKER_REGIONS = 'editor.foldAllMarkerRegions'\n\n/** Unfold All Regions */\nexport const ACTION_EDITOR_UNFOLD_ALL_MARKER_REGIONS = 'editor.unfoldAllMarkerRegions'\n\n/** Toggle Fold */\nexport const ACTION_EDITOR_TOGGLE_FOLD = 'editor.toggleFold'\n\n/** Fold Level 1 */\nexport const ACTION_EDITOR_FOLD_LEVEL1 = 'editor.foldLevel1'\n\n/** Fold Level 2 */\nexport const ACTION_EDITOR_FOLD_LEVEL2 = 'editor.foldLevel2'\n\n/** Fold Level 3 */\nexport const ACTION_EDITOR_FOLD_LEVEL3 = 'editor.foldLevel3'\n\n/** Fold Level 4 */\nexport const ACTION_EDITOR_FOLD_LEVEL4 = 'editor.foldLevel4'\n\n/** Fold Level 5 */\nexport const ACTION_EDITOR_FOLD_LEVEL5 = 'editor.foldLevel5'\n\n/** Fold Level 6 */\nexport const ACTION_EDITOR_FOLD_LEVEL6 = 'editor.foldLevel6'\n\n/** Fold Level 7 */\nexport const ACTION_EDITOR_FOLD_LEVEL7 = 'editor.foldLevel7'\n\n/** Open Link */\nexport const ACTION_OPEN_LINK = 'editor.action.openLink'\n\n/** Trigger Symbol Highlight */\nexport const ACTION_WORD_HIGHLIGHT_TRIGGER = 'editor.action.wordHighlight.trigger'\n\n/** Show Accessibility Help */\nexport const ACTION_SHOW_ACCESSIBILITY_HELP = 'editor.action.showAccessibilityHelp'\n\n/** Developer: Inspect Tokens */\nexport const ACTION_INSPECT_TOKENS = 'editor.action.inspectTokens'\n\n/** Go to Next Problem (Error, Warning, Info) */\nexport const ACTION_MARKER_NEXT = 'editor.action.marker.next'\n\n/** Go to Previous Problem (Error, Warning, Info) */\nexport const ACTION_MARKER_PREV = 'editor.action.marker.prev'\n\n/** Go to Next Problem in Files (Error, Warning, Info) */\nexport const ACTION_MARKER_NEXT_IN_FILES = 'editor.action.marker.nextInFiles'\n\n/** Go to Previous Problem in Files (Error, Warning, Info) */\nexport const ACTION_MARKER_PREV_IN_FILES = 'editor.action.marker.prevInFiles'\n\n/** Show Hover */\nexport const ACTION_SHOW_HOVER = 'editor.action.showHover'\n\n/** Show Definition Preview Hover */\nexport const ACTION_SHOW_DEFINITION_PREVIEW_HOVER = 'editor.action.showDefinitionPreviewHover'\n\n/** Add Cursor Above */\nexport const ACTION_INSERT_CURSOR_ABOVE = 'editor.action.insertCursorAbove'\n\n/** Add Cursor Below */\nexport const ACTION_INSERT_CURSOR_BELOW = 'editor.action.insertCursorBelow'\n\n/** Add Cursors to Line Ends */\nexport const ACTION_INSERT_CURSOR_AT_END_OF_EACH_LINE_SELECTED = 'editor.action.insertCursorAtEndOfEachLineSelected'\n\n/** Add Selection To Next Find Match */\nexport const ACTION_ADD_SELECTION_TO_NEXT_FIND_MATCH = 'editor.action.addSelectionToNextFindMatch'\n\n/** Add Selection To Previous Find Match */\nexport const ACTION_ADD_SELECTION_TO_PREVIOUS_FIND_MATCH = 'editor.action.addSelectionToPreviousFindMatch'\n\n/** Move Last Selection To Next Find Match */\nexport const ACTION_MOVE_SELECTION_TO_NEXT_FIND_MATCH = 'editor.action.moveSelectionToNextFindMatch'\n\n/** Move Last Selection To Previous Find Match */\nexport const ACTION_MOVE_SELECTION_TO_PREVIOUS_FIND_MATCH = 'editor.action.moveSelectionToPreviousFindMatch'\n\n/** Select All Occurrences of Find Match */\nexport const ACTION_SELECT_HIGHLIGHTS = 'editor.action.selectHighlights'\n\n/** Add Cursors To Bottom */\nexport const ACTION_ADD_CURSORS_TO_BOTTOM = 'editor.action.addCursorsToBottom'\n\n/** Add Cursors To Top */\nexport const ACTION_ADD_CURSORS_TO_TOP = 'editor.action.addCursorsToTop'\n\n/** Trigger Suggest */\nexport const ACTION_TRIGGER_SUGGEST = 'editor.action.triggerSuggest'\n\n// https://github.com/microsoft/vscode/tree/master/src/vs/editor/contrib\n\nexport const COLOR_DETECTOR_CONTRIB = 'editor.contrib.colorDetector'\nexport const CONTEXT_MENU_CONTRIB = 'editor.contrib.contextmenu'\nexport const CURSOR_UNDO_REDO_CONTROLLER_CONTRIB = 'editor.contrib.cursorUndoRedoController'\nexport const DRAG_AND_DROP_CONTRIB = 'editor.contrib.dragAndDrop'\nexport const AUTO_FORMAT_CONTRIB = 'editor.contrib.autoFormat'\nexport const FORMAT_ON_PAST_CONTRIB = 'editor.contrib.formatOnPaste'\nexport const SMART_SELECT_CONTRIB = 'editor.contrib.smartSelectController'\nexport const IPAD_SHOW_KEYBOARD_CONTRIB = 'editor.contrib.iPadShowKeyboard'\nexport const BRACKET_MATCHING_CONTROLLER_CONTRIB = 'editor.contrib.bracketMatchingController'\nexport const CODE_LENS_CONTRIB = 'css.editor.codeLens'\nexport const FIND_CONTROLLE_CONTRIB = 'editor.contrib.findController'\nexport const FOLDING_CONTRIB = 'editor.contrib.folding'\nexport const IN_PLACE_REPLACE_CONTROLLER_CONTRIB = 'editor.contrib.inPlaceReplaceController'\nexport const LINK_DETECTOR_CONTRIB = 'editor.linkDetector'\nexport const MESSAGE_CONTROLLER_CONTRIB = 'editor.contrib.messageController'\nexport const QUICK_FIX_CONTROLLER_CONTRIB = 'editor.contrib.quickFixController'\nexport const MULTI_CURSOR_CONTROLLER_CONTRIB = 'editor.contrib.multiCursorController'\nexport const SELECTION_HIGHLIGHTER_CONTRIB = 'editor.contrib.selectionHighlighter'\nexport const PARAMETER_HINTS_CONTRIB = 'editor.controller.parameterHints'\nexport const REFERENCE_CONTROLLER_CONTRIB = 'editor.contrib.referenceController'\nexport const RENAME_CONTROLLER_CONTRIB = 'editor.contrib.renameController'\nexport const WORD_HIGHLIGHTER_CONTRIB = 'editor.contrib.wordHighlighter'\nexport const ACCESSIBILIY_HELP_CONTROLLER_CONTRIB = 'editor.contrib.accessibilityHelpController'\nexport const INSPECT_TOKENS_CONTRIB = 'editor.contrib.inspectTokens'\nexport const QUICK_OPEN_CONTROLLER_CONTRIB = 'editor.controller.quickOpenController'\nexport const GOTO_DEFINITION_CONTRIB = 'editor.contrib.gotodefinitionatposition'\nexport const REFERENCES_CONTROLLER_CONTRIB = 'editor.contrib.referencesController'\nexport const MARKER_CONTROLLER_CONTRIB = 'editor.contrib.markerController'\nexport const HOVER_CONTRIB = 'editor.contrib.hover'\nexport const SNIPPET_CONTROLLER_CONTRIB = 'snippetController2'\nexport const SUGGEST_CONTROLLER_CONTRIB = 'editor.contrib.suggestController'\n","import { NgeMonacoContribution } from './monaco-contribution'\n\n/**\n * When a user type a composition key like ^ or \\` the editor\n * enter in composition mode, then after the user type any key the editor leave\n * this composition mode an duplicate the character pressed by the user.\n *\n * This bug occurs only on some browsers like firefox and calling this method will prevent this behavior\n * by removing any extra character added by the editor between 2 calls\n * of `onDidCompositionStart` and `onDidCompositionEnd`\n */\nexport class PreventSymbolDuplication implements NgeMonacoContribution {\n  private disposable?: monaco.IDisposable\n\n  activate() {\n    this.disposable = monaco.editor.onDidCreateEditor((e) => {\n      this.preventSymbolDuplicationOnCompositionEnd(e)\n    })\n  }\n\n  deactivate() {\n    this.disposable?.dispose()\n  }\n\n  private preventSymbolDuplicationOnCompositionEnd(editor: monaco.editor.ICodeEditor) {\n    const positions: monaco.Position[] = []\n    let disposables: monaco.IDisposable[] = []\n    disposables.push(\n      editor.onDidCompositionStart(() => {\n        const position = editor.getPosition()\n        if (position) {\n          positions.push(position)\n        }\n      })\n    )\n    disposables.push(\n      editor.onDidCompositionEnd(() => {\n        setTimeout(() => {\n          if (!positions.length) {\n            return\n          }\n          const before = positions[0]\n          const after = editor.getPosition()\n          if (!after) {\n            return\n          }\n\n          positions.splice(0, 1)\n          const diff = after.column - before.column\n          if (diff > 1) {\n            // unfocus the editor to leave composition\n            // mode because when the user type ` the editor\n            // leave the composition mode and begin another one\n            ;(document.activeElement as any)?.blur()\n\n            // focus the editor to let the user continue to edit the content\n            // of the editor\n            editor.focus()\n\n            const r = new monaco.Range(after.lineNumber, after.column - (diff - 1), after.lineNumber, after.column)\n            editor.executeEdits('api', [{ range: r, text: '', forceMoveMarkers: false }])\n          }\n        })\n      })\n    )\n    disposables.push(\n      editor.onDidDispose(() => {\n        disposables.forEach((e) => e.dispose())\n        disposables = []\n      })\n    )\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport { ModuleWithProviders, NgModule } from '@angular/core'\nimport { NgeMonacoDiffEditorComponent } from './components/monaco-diff-editor/monaco-diff-editor.component'\nimport { NgeMonacoEditorComponent } from './components/monaco-editor/monaco-editor.component'\nimport { NgeMonacoViewerComponent } from './components/monaco-viewer/monaco-viewer.component'\nimport { NGE_MONACO_CONTRIBUTION } from './contributions/monaco-contribution'\nimport { PreventSymbolDuplication } from './contributions/prevent-symbol-duplication'\nimport { NgeMonacoConfig, NGE_MONACO_CONFIG } from './monaco-config'\nimport { NgeMonacoThemeService } from './services/monaco-theme.service'\nimport { NgeMonacoPlaceholderComponent } from './components/monaco-placeholder/monaco-placeholder.component'\n\n@NgModule({\n  imports: [CommonModule],\n  exports: [NgeMonacoEditorComponent, NgeMonacoDiffEditorComponent, NgeMonacoViewerComponent],\n  declarations: [\n    NgeMonacoEditorComponent,\n    NgeMonacoDiffEditorComponent,\n    NgeMonacoViewerComponent,\n    NgeMonacoPlaceholderComponent,\n  ],\n})\nexport class NgeMonacoModule {\n  static forRoot(\n    config: NgeMonacoConfig | (() => NgeMonacoConfig)\n  ): ModuleWithProviders<NgeMonacoModule> {\n    const configProvider =\n      typeof config === \"function\"\n        ? { provide: NGE_MONACO_CONFIG, useFactory: config }\n        : { provide: NGE_MONACO_CONFIG, useValue: config }\n    return {\n      ngModule: NgeMonacoModule,\n      providers: [\n        configProvider,\n        {\n          provide: NGE_MONACO_CONTRIBUTION,\n          multi: true,\n          useExisting: NgeMonacoThemeService,\n        },\n        {\n          provide: NGE_MONACO_CONTRIBUTION,\n          multi: true,\n          useClass: PreventSymbolDuplication,\n        },\n      ],\n    }\n  }\n}\n","/// <reference types=\"monaco-editor/monaco\" />\n\nexport * from './src/components/monaco-diff-editor/monaco-diff-editor.component'\nexport * from './src/components/monaco-editor/monaco-editor.component'\nexport * from './src/components/monaco-viewer/monaco-viewer.component'\nexport * from './src/contributions/monaco-contribution'\nexport * from './src/monaco-constants'\nexport * from './src/monaco.module'\nexport * from './src/services/monaco-colorizer.service'\nexport * from './src/services/monaco-loader.service'\nexport * from './src/services/monaco-theme.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.NgeMonacoPlaceholderComponent","i1.NgeMonacoLoaderService","i2.NgeMonacoThemeService","i1","i2.NgeMonacoPlaceholderComponent"],"mappings":"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"}