{"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.providers.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     * Theme to apply when the color scheme is light.\n     *\n     * Setting both `light` and `dark` enables automatic switching: Monaco picks\n     * the matching theme and updates whenever the scheme changes. This lets any\n     * app (or nge-doc, without depending on it) drive Monaco's theme.\n     */\n    light?: string\n    /** Theme to apply when the color scheme is dark (see {@link light}). */\n    dark?: string\n    /**\n     * How dark mode is detected for automatic switching:\n     * - a class name (or an array of class names) that means \"dark\" when present\n     *   on the document root (e.g. `nge-doc-dark` or `dark`), observed live. Pass\n     *   an array to match any of several dark classes across a multi-page app.\n     * - omit to follow the `(prefers-color-scheme: dark)` media query\n     *\n     * Named to mirror `NgeMarkdownConfig.darkThemeClassName` so both libraries\n     * read the same class.\n     */\n    darkThemeClassName?: string | 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 { Injectable, OnDestroy, inject } 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// Guarded so importing the service does not crash under SSR; monaco only ever\n// loads in the browser, where every WINDOW usage below runs.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst WINDOW = (typeof window !== 'undefined' ? 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 config = inject<NgeMonacoConfig>(NGE_MONACO_CONFIG, { optional: true })\n  private readonly contributions: NgeMonacoContribution[] =\n    inject<NgeMonacoContribution[]>(NGE_MONACO_CONTRIBUTION, { optional: true }) ?? []\n  private readonly resourceLoader = inject(ResourceLoaderService)\n\n  private readonly monaco$ = new Subject<typeof monaco>()\n\n  private baseUrl = MONACO_CDNJS_URL\n  private loadPromise?: Promise<typeof monaco>\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  HostListener,\n  OnDestroy,\n  ChangeDetectionStrategy,\n  inject,\n  output,\n  viewChild,\n  input,\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  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeMonacoDiffEditorComponent implements AfterViewInit, AfterViewChecked, OnDestroy {\n  private readonly loader = inject(NgeMonacoLoaderService)\n  private readonly config = inject<NgeMonacoConfig>(NGE_MONACO_CONFIG, { optional: true })\n\n  readonly container = viewChild.required<ElementRef<HTMLElement>>('container')\n\n  readonly ready = output<monaco.editor.IEditor>()\n\n  readonly autoLayout = input(true)\n\n  readonly options = input<monaco.editor.IStandaloneDiffEditorConstructionOptions>()\n\n  private editor?: monaco.editor.IStandaloneDiffEditor\n  private width = 0\n  private height = 0\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  HostListener,\n  OnDestroy,\n  inject,\n  output,\n  viewChild,\n  input,\n} from '@angular/core'\nimport { NGE_MONACO_CONFIG, NgeMonacoConfig } from '../../monaco-config'\nimport { NgeMonacoLoaderService } from '../../services/monaco-loader.service'\nimport { NgeMonacoPlaceholderComponent } from '../monaco-placeholder/monaco-placeholder.component'\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  imports: [NgeMonacoPlaceholderComponent],\n})\nexport class NgeMonacoEditorComponent implements AfterViewInit, AfterViewChecked, OnDestroy {\n  private readonly loader = inject(NgeMonacoLoaderService)\n  private readonly config = inject<NgeMonacoConfig>(NGE_MONACO_CONFIG, { optional: true })\n\n  protected loading = true\n  protected readonly container = viewChild.required<ElementRef<HTMLElement>>('container')\n\n  readonly ready = output<monaco.editor.IEditor>()\n  readonly autoLayout = input(true)\n  readonly options = input<monaco.editor.IStandaloneEditorConstructionOptions>()\n\n  private editor?: monaco.editor.IStandaloneCodeEditor\n  private width = 0\n  private height = 0\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","@if (loading) {\n  <nge-monaco-placeholder />\n}\n<div class=\"nge-monaco-editor-container\" #container></div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpClient } from '@angular/common/http'\nimport { DOCUMENT, Injectable, inject } 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 http = inject(HttpClient, { optional: true })\n  private readonly config = inject<NgeMonacoConfig>(NGE_MONACO_CONFIG, { optional: true })\n  private readonly document = inject(DOCUMENT)\n\n  private readonly themes = new BehaviorSubject<string[]>([])\n  private readonly activeTheme = new BehaviorSubject<NgeMonacoTheme | undefined>(undefined)\n\n  private themeService: any\n  private colorSchemeObserver?: MutationObserver\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    const theming = this.config?.theming\n    if (theming?.light && theming?.dark) {\n      await this.startColorSchemeSync(theming.light, theming.dark, theming.darkThemeClassName)\n    } else {\n      await this.setTheme(theming?.default || 'vs')\n    }\n    node.remove()\n  }\n\n  /**\n   * Applies the light/dark theme according to the current color scheme and keeps\n   * it in sync. Detection is either a class on the document root or, when no\n   * class is given, the `(prefers-color-scheme: dark)` media query. This is how\n   * an app (or nge-doc) drives Monaco's theme without any coupling.\n   */\n  private async startColorSchemeSync(\n    light: string,\n    dark: string,\n    darkThemeClassName?: string | string[]\n  ): Promise<void> {\n    const doc = this.document\n    const media = doc.defaultView?.matchMedia?.('(prefers-color-scheme: dark)')\n    const classNames = darkThemeClassName\n      ? Array.isArray(darkThemeClassName)\n        ? darkThemeClassName\n        : [darkThemeClassName]\n      : []\n    // Apps put the dark class on <html> or <body>, so check both roots for any of the names.\n    const hasDarkClass = () =>\n      classNames.some((cls) => doc.documentElement.classList.contains(cls) || !!doc.body?.classList.contains(cls))\n    const isDark = () => (classNames.length ? hasDarkClass() : !!media?.matches)\n    const apply = () => this.setTheme(isDark() ? dark : light).catch(() => undefined)\n\n    await apply()\n\n    if (classNames.length) {\n      this.colorSchemeObserver?.disconnect()\n      this.colorSchemeObserver = new MutationObserver(() => apply())\n      const options: MutationObserverInit = { attributes: true, attributeFilter: ['class'] }\n      this.colorSchemeObserver.observe(doc.documentElement, options)\n      if (doc.body) {\n        this.colorSchemeObserver.observe(doc.body, options)\n      }\n    } else {\n      media?.addEventListener?.('change', () => apply())\n    }\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  'github-dark.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, inject } from '@angular/core'\nimport { NgeMonacoLoaderService } from './monaco-loader.service'\nimport { NgeMonacoThemeService } from './monaco-theme.service'\n\n@Injectable({ providedIn: 'root' })\nexport class NgeMonacoColorizerService {\n  private readonly loader = inject(NgeMonacoLoaderService)\n  private readonly theming = inject(NgeMonacoThemeService)\n\n  async colorizeElement(options: NgeMonacoColorizeOptions) {\n    const { element } = options\n\n    // Prepare the DOM synchronously (raw code, host classes and the file tab)\n    // before loading monaco and colorizing. Those steps are asynchronous, so\n    // reserving the final layout up front avoids the file tab being inserted\n    // only once colorization resolves, which lands after a visible delay and\n    // shifts the surrounding content down.\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    if (options.fileTab !== false) {\n      this.addFileTab(options)\n    }\n\n    await this.loader.loadAsync()\n    if (options.theme) {\n      await this.theming.defineTheme(options.theme)\n    }\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\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    // Drop the tab from a previous pass so re-colorizing the same element (for\n    // example when an input changes) does not stack duplicate tabs.\n    container?.querySelector(':scope > .nge-monaco-file-tab')?.remove()\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.className = 'nge-monaco-file-tab'\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 =\n      '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        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        }, 2000)\n      } catch (err) {\n        console.error('Failed to copy code:', err)\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        // 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        }, 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   * Optional filename to display in the tab header.\n   */\n  filename?: string\n\n  /**\n   * Set to `false` to skip the built-in file tab (filename and actions), when\n   * the caller renders its own chrome (nge-markdown does).\n   */\n  fileTab?: boolean\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  OnDestroy,\n  effect,\n  inject,\n  viewChild,\n  input,\n} from '@angular/core'\nimport { NgeMonacoColorizerService } from '../../services/monaco-colorizer.service'\nimport { Subscription } from 'rxjs'\nimport { NgeMonacoPlaceholderComponent } from '../monaco-placeholder/monaco-placeholder.component'\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  imports: [NgeMonacoPlaceholderComponent],\n})\nexport class NgeMonacoViewerComponent implements 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  readonly container = viewChild.required<ElementRef<HTMLElement>>('container')\n  readonly transclusion = viewChild.required<\n    ElementRef<HTMLElement>\n    /** code to highlight */\n  >('transclusion')\n\n  /** code to highlight */\n  readonly code = input<string>()\n  /** show line numbers? */\n\n  /** show line numbers? */\n  readonly lines = input<\n    string | number\n    /** theme to use for the syntax highlighting  */\n  >()\n\n  /** theme to use for the syntax highlighting  */\n  readonly theme = input<string>()\n  /** target language */\n\n  /** target language */\n  readonly language = input<string>()\n  /** space separated list of line numbers to highlight */\n\n  /** space separated list of line numbers to highlight */\n  readonly highlights = input<\n    string | number\n    /** filename to display in the header tab */\n  >()\n\n  /** filename to display in the header tab */\n  readonly filename = input<string>()\n\n  constructor() {\n    effect(() => {\n      const code = this.transclusion().nativeElement.textContent?.trim() || this.code() || ''\n      // track the inputs used during colorization so it re-runs when they change\n      this.theme()\n      this.lines()\n      this.language()\n      this.highlights()\n      this.filename()\n      this.colorize(code)\n    })\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","@if (loading) {\n  <nge-monaco-placeholder />\n}\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","// 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 { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\nimport { NGE_MONACO_CONTRIBUTION } from './contributions/monaco-contribution'\nimport { PreventSymbolDuplication } from './contributions/prevent-symbol-duplication'\nimport { NGE_MONACO_CONFIG, NgeMonacoConfig } from './monaco-config'\nimport { NgeMonacoThemeService } from './services/monaco-theme.service'\n\n/**\n * Configure the Monaco editors at the application root:\n *\n * ```ts\n * providers: [\n *   provideNgeMonaco({\n *     theming: { themes: NGE_MONACO_THEMES.map((t) => 'assets/nge/monaco/themes/' + t), default: 'github' },\n *   }),\n * ]\n * ```\n *\n * The editor components themselves are standalone; import them (or\n * `NgeMonacoModule`) where the templates use them.\n */\nexport function provideNgeMonaco(config: NgeMonacoConfig | (() => NgeMonacoConfig) = {}): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    typeof config === 'function'\n      ? { provide: NGE_MONACO_CONFIG, useFactory: config }\n      : { provide: NGE_MONACO_CONFIG, useValue: config },\n    { provide: NGE_MONACO_CONTRIBUTION, multi: true, useExisting: NgeMonacoThemeService },\n    { provide: NGE_MONACO_CONTRIBUTION, multi: true, useClass: PreventSymbolDuplication },\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 { NgeMonacoConfig } from './monaco-config'\nimport { provideNgeMonaco } from './monaco.providers'\nimport { NgeMonacoPlaceholderComponent } from './components/monaco-placeholder/monaco-placeholder.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    NgeMonacoEditorComponent,\n    NgeMonacoDiffEditorComponent,\n    NgeMonacoViewerComponent,\n    NgeMonacoPlaceholderComponent,\n  ],\n  exports: [NgeMonacoEditorComponent, NgeMonacoDiffEditorComponent, NgeMonacoViewerComponent],\n})\nexport class NgeMonacoModule {\n  /** @deprecated Use `provideNgeMonaco(config)` in the application providers instead; will be removed in the next major. */\n  static forRoot(config: NgeMonacoConfig | (() => NgeMonacoConfig)): ModuleWithProviders<NgeMonacoModule> {\n    return {\n      ngModule: NgeMonacoModule,\n      providers: [provideNgeMonaco(config)],\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-config'\nexport * from './src/monaco.module'\nexport * from './src/monaco.providers'\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":[],"mappings":"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"}