{"version":3,"file":"tableau-ui-angular-monaco.mjs","sources":["../../../projects/component-library/monaco/src/monaco-editor.component.ts","../../../projects/component-library/monaco/src/tableau-ui-monaco.module.ts","../../../projects/component-library/monaco/src/tableau-ui-angular-monaco.ts"],"sourcesContent":["import type { AfterViewInit, OnDestroy } from '@angular/core';\nimport { ElementRef } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, effect, forwardRef, inject, input, model, output, untracked } from '@angular/core';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ICodeEditor, MonacoConstructionOptions } from './types';\nimport type MonacoNamespace from 'monaco-editor';\nimport { ThemeService } from 'tableau-ui-angular/theme';\ntype Monaco = typeof MonacoNamespace;\ndeclare let monaco: Monaco;\n\nlet monacoLoadPromise: Promise<void> | undefined = undefined;\n\n@Component({\n  selector: 'tab-monaco-editor',\n  standalone: false,\n  template: '',\n  styles: `\n    :host {\n      display: block;\n    }\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => MonacoEditorComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonacoEditorComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  private _editor: ICodeEditor | undefined;\n  private readonly themeService = inject(ThemeService);\n\n  // #region Inputs and Outputs\n  /**\n   * Sets the options for the monaco editor, such scrollbars, minimap, etc\n   * @default {}\n   */\n  readonly $options = input<MonacoConstructionOptions>(\n    {},\n    {\n      alias: 'options',\n    },\n  );\n  /**\n   * The URI of the current document.\n   * This is used to identify the model in monaco.\n   */\n  readonly $uri = input.required<string>({\n    alias: 'uri',\n  });\n  /**\n   * The language of the current document.\n   * This is used to set the language of the model in monaco.\n   * For example, 'javascript', 'typescript', 'html', etc.\n   */\n  readonly $language = input.required<string>({\n    alias: 'language',\n  });\n\n  /**\n   * The value of the current document.\n   * This can do two-way binding with the editor.\n   */\n  readonly $value = model<string>('', {\n    alias: 'value',\n  });\n\n  /**\n   * The theme of the monaco editor.\n   * Can be 'auto', 'vs', 'vs-dark', 'hc-black', or 'hc-light'.\n   * 'auto' will use the current library palette theme.\n   * @default 'auto'\n   */\n  readonly $theme = input<'auto' | 'vs' | 'vs-dark' | 'hc-black' | 'hc-light'>('auto', {\n    alias: 'theme',\n  });\n\n  /**\n   * Only settable once.\n   * Defines a function that is called when monaco is ready and before component init.\n   * Use this to set language diagnostics, etc.\n   */\n  readonly $onMonacoLoad = input<(monaco: Monaco) => void>(undefined, {\n    alias: 'onMonacoLoad',\n  });\n\n  /**\n   * If true, the model will be disposed when the component is destroyed.\n   * This is useful to avoid memory leaks when the editor is not used anymore.\n   * @default true\n   */\n  readonly $disposeModelOnDestroy = input<boolean>(true, {\n    alias: 'disposeModelOnDestroy',\n  });\n\n  /**\n   * Output event that is emitted when the editor is loaded.\n   */\n  readonly editorLoaded = output<ICodeEditor>();\n\n  // #endregion Inputs and Outputs\n  readonly editorContainer = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  // #region Effects\n  // When the option changes, re-initialize the entire editor\n  readonly optionsChanged = effect(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const options = this.$options(); // need this for the effect to trigger\n    if (this._editor) {\n      this._editor.dispose();\n      this._editor = undefined;\n      this.initEditor();\n    }\n  });\n  // When the URI changes, update the editor to use the new URI if it's initialized\n  readonly uriChanged = effect(() => {\n    const uri = this.$uri();\n    const language = untracked(() => this.$language());\n    const value = untracked(() => this.$value());\n    if (this._editor) {\n      // update or create the model with the new URI\n      const editorModel = this.updateOrCreateModel(monaco.Uri.parse(uri), language, value);\n      this._editor.setModel(editorModel);\n    }\n  });\n  // When the language changes, update the editor to use the new language if it's initialized\n  readonly languageChanged = effect(() => {\n    const language = this.$language();\n    const uri = untracked(() => this.$uri());\n    if (this._editor) {\n      // update or create the model with the new language\n      const editorModel = monaco.editor.getModel(monaco.Uri.parse(uri));\n      if (!editorModel) {\n        console.warn('Can not update language. Monaco editor model not found for URI:', uri);\n      } else {\n        monaco.editor.setModelLanguage(editorModel, language);\n      }\n      this._editor.setModel(editorModel);\n    }\n  });\n  // When the value changes, update the editor to use the new value if it's initialized\n  readonly valueChanged = effect(() => {\n    const value = this.$value();\n    const uri = untracked(() => this.$uri());\n    if (this._editor) {\n      // update or create the model with the new value\n      const editorModel = monaco.editor.getModel(monaco.Uri.parse(uri));\n      if (!editorModel) {\n        console.warn('Can not update value. Monaco editor model not found for URI:', uri);\n      } else {\n        editorModel.setValue(value);\n      }\n    }\n  });\n  // When the theme changes, update the editor to use the new theme if it's initialized\n  readonly themeChanged = effect(() => {\n    const themeInput = this.$theme();\n    const systemTheme = this.themeService.$appliedThemeMode();\n    if (this._editor) {\n      const theme = this.getMonacoTheme(themeInput, systemTheme);\n      monaco.editor.setTheme(theme);\n    }\n  });\n\n  // #endregion Effects\n  ngAfterViewInit(): void {\n    // if monaco already started loading, init the editor when it is loaded\n    if (monacoLoadPromise) {\n      void monacoLoadPromise.then(() => {\n        this.initEditor();\n      });\n      return;\n    }\n    monacoLoadPromise = new Promise<void>(resolve => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      if (typeof (window as any).monaco === 'object') {\n        this.initEditor();\n        resolve();\n        return;\n      }\n      const baseUrl = (document.head.getElementsByTagName('base').item(0)?.href ?? window.location.origin + '/') + 'monaco-edit/vs';\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const onGotAmdLoader = (require?: any) => {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n        const usedRequire = require ?? (window as any).require;\n\n        const requireConfig = { paths: { vs: baseUrl } };\n\n        // Load monaco\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n        usedRequire.config(requireConfig);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        usedRequire([`vs/editor/editor.main`], () => {\n          this.initEditor();\n          resolve();\n        });\n      };\n\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      if (!(window as any).require) {\n        const loaderScript: HTMLScriptElement = document.createElement('script');\n        loaderScript.type = 'text/javascript';\n        loaderScript.src = `${baseUrl}/loader.js`;\n        loaderScript.addEventListener('load', () => {\n          onGotAmdLoader();\n        });\n        document.body.appendChild(loaderScript);\n        // Load AMD loader without over-riding node's require\n        // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      } else if (!(window as any).require.config) {\n        const src = `${baseUrl}/loader.js`;\n\n        const loaderRequest = new XMLHttpRequest();\n        loaderRequest.addEventListener('load', () => {\n          const scriptElem = document.createElement('script');\n          scriptElem.type = 'text/javascript';\n          scriptElem.text = [\n            // Monaco uses a custom amd loader that over-rides node's require.\n            // Keep a reference to node's require so we can restore it after executing the amd loader file.\n            'var nodeRequire = require;',\n            loaderRequest.responseText.replace('\"use strict\";', ''),\n            // Save Monaco's amd require and restore Node's require\n            'var monacoAmdRequire = require;',\n            'require = nodeRequire;',\n            'require.nodeRequire = require;',\n          ].join('\\n');\n          document.body.appendChild(scriptElem);\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n          onGotAmdLoader((window as any).monacoAmdRequire);\n        });\n        loaderRequest.open('GET', src);\n        loaderRequest.send();\n      } else {\n        onGotAmdLoader();\n      }\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onPropagateChange: (val: string) => void = () => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onPropagateTouched: () => void = () => {};\n  // #region ControlValueAccessor\n\n  writeValue(val: string): void {\n    this.$value.set(val);\n  }\n  registerOnChange(fn: (val: string) => void): void {\n    this.onPropagateChange = fn;\n  }\n  registerOnTouched(fn: () => void): void {\n    this.onPropagateTouched = fn;\n  }\n  // #endregion ControlValueAccessor\n\n  private resizeObserver: ResizeObserver | undefined;\n  protected initEditor() {\n    this.destroyResizeObserver();\n    const onLoad = this.$onMonacoLoad();\n    if (onLoad) {\n      onLoad(monaco);\n    }\n\n    // update or create the model\n    const editorModel = this.updateOrCreateModel(monaco.Uri.parse(this.$uri()), this.$language(), this.$value());\n    this._editor = monaco.editor.create(this.editorContainer.nativeElement, { ...this.$options(), model: editorModel });\n    monaco.editor.setTheme(this.getMonacoTheme(this.$theme(), this.themeService.$appliedThemeMode()));\n    // this._editor.setValue(this._value);\n\n    this._editor.onDidChangeModelContent(() => {\n      if (!this._editor) {\n        return;\n      }\n      const value = this._editor.getValue() ?? '';\n      this.$value.set(value);\n      this.onPropagateChange(value);\n    });\n\n    this._editor.onDidBlurEditorText(() => {\n      this.onPropagateTouched();\n      if (this._editor) {\n        this._editor.setSelection(new monaco.Selection(1, 1, 1, 1));\n      }\n    });\n\n    this.resizeObserver = new ResizeObserver(() => {\n      if (this._editor) {\n        this._editor.layout();\n      }\n    });\n    this.resizeObserver.observe(this.editorContainer.nativeElement);\n    this.editorLoaded.emit(this._editor);\n  }\n\n  private updateOrCreateModel(uri: MonacoNamespace.Uri, language: string, value: string) {\n    let editorModel = monaco.editor.getModel(uri);\n    if (editorModel) {\n      editorModel.setValue(value);\n      if (editorModel.getLanguageId() !== language) {\n        monaco.editor.setModelLanguage(editorModel, language);\n      }\n    } else {\n      editorModel = monaco.editor.createModel(value, language, uri);\n    }\n    return editorModel;\n  }\n\n  private getMonacoTheme(themeInput: 'auto' | 'vs' | 'vs-dark' | 'hc-black' | 'hc-light', systemTheme: 'light' | 'dark') {\n    if (themeInput === 'auto') {\n      return systemTheme === 'dark' ? 'vs-dark' : 'vs';\n    }\n    return themeInput;\n  }\n\n  private destroyResizeObserver() {\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n      this.resizeObserver = undefined;\n    }\n  }\n  ngOnDestroy(): void {\n    this.destroyResizeObserver();\n    if (this._editor) {\n      const editorModel = this._editor.getModel();\n      if (editorModel != null && this.$disposeModelOnDestroy()) {\n        // Dispose the model to avoid memory leaks\n        editorModel.dispose();\n      }\n      this._editor.dispose();\n      this._editor = undefined;\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MonacoEditorComponent } from './monaco-editor.component';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [MonacoEditorComponent],\n  exports: [MonacoEditorComponent],\n})\nexport class TableauUiMonacoModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAWA,IAAI,iBAAiB,GAA8B,SAAS;MAoB/C,qBAAqB,CAAA;AACxB,IAAA,OAAO;AACE,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;;AAGpD;;;AAGG;AACM,IAAA,QAAQ,GAAG,KAAK,CACvB,EAAE,EACF;AACE,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA,CACF;AACD;;;AAGG;AACM,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAS;AACrC,QAAA,KAAK,EAAE,KAAK;AACb,KAAA,CAAC;AACF;;;;AAIG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAS;AAC1C,QAAA,KAAK,EAAE,UAAU;AAClB,KAAA,CAAC;AAEF;;;AAGG;AACM,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,EAAE;AAClC,QAAA,KAAK,EAAE,OAAO;AACf,KAAA,CAAC;AAEF;;;;;AAKG;AACM,IAAA,MAAM,GAAG,KAAK,CAAsD,MAAM,EAAE;AACnF,QAAA,KAAK,EAAE,OAAO;AACf,KAAA,CAAC;AAEF;;;;AAIG;AACM,IAAA,aAAa,GAAG,KAAK,CAA2B,SAAS,EAAE;AAClE,QAAA,KAAK,EAAE,cAAc;AACtB,KAAA,CAAC;AAEF;;;;AAIG;AACM,IAAA,sBAAsB,GAAG,KAAK,CAAU,IAAI,EAAE;AACrD,QAAA,KAAK,EAAE,uBAAuB;AAC/B,KAAA,CAAC;AAEF;;AAEG;IACM,YAAY,GAAG,MAAM,EAAe;;AAGpC,IAAA,eAAe,GAAG,MAAM,CAA0B,UAAU,CAAC;;;AAI7D,IAAA,cAAc,GAAG,MAAM,CAAC,MAAK;;QAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;YACxB,IAAI,CAAC,UAAU,EAAE;;AAErB,KAAC,CAAC;;AAEO,IAAA,UAAU,GAAG,MAAM,CAAC,MAAK;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEhB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;AACpF,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;;AAEtC,KAAC,CAAC;;AAEO,IAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AACrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEhB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,CAAC,IAAI,CAAC,iEAAiE,EAAE,GAAG,CAAC;;iBAC/E;gBACL,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC;;AAEvD,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;;AAEtC,KAAC,CAAC;;AAEO,IAAA,YAAY,GAAG,MAAM,CAAC,MAAK;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEhB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,CAAC,IAAI,CAAC,8DAA8D,EAAE,GAAG,CAAC;;iBAC5E;AACL,gBAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAGjC,KAAC,CAAC;;AAEO,IAAA,YAAY,GAAG,MAAM,CAAC,MAAK;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;AACzD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC;AAC1D,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEjC,KAAC,CAAC;;IAGF,eAAe,GAAA;;QAEb,IAAI,iBAAiB,EAAE;AACrB,YAAA,KAAK,iBAAiB,CAAC,IAAI,CAAC,MAAK;gBAC/B,IAAI,CAAC,UAAU,EAAE;AACnB,aAAC,CAAC;YACF;;AAEF,QAAA,iBAAiB,GAAG,IAAI,OAAO,CAAO,OAAO,IAAG;;AAE9C,YAAA,IAAI,OAAQ,MAAc,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC9C,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,OAAO,EAAE;gBACT;;AAEF,YAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,gBAAgB;;AAE7H,YAAA,MAAM,cAAc,GAAG,CAAC,OAAa,KAAI;;AAEvC,gBAAA,MAAM,WAAW,GAAG,OAAO,IAAK,MAAc,CAAC,OAAO;gBAEtD,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;;;AAIhD,gBAAA,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC;;AAEjC,gBAAA,WAAW,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAC,EAAE,MAAK;oBAC1C,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,OAAO,EAAE;AACX,iBAAC,CAAC;AACJ,aAAC;;AAGD,YAAA,IAAI,CAAE,MAAc,CAAC,OAAO,EAAE;gBAC5B,MAAM,YAAY,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACxE,gBAAA,YAAY,CAAC,IAAI,GAAG,iBAAiB;AACrC,gBAAA,YAAY,CAAC,GAAG,GAAG,CAAG,EAAA,OAAO,YAAY;AACzC,gBAAA,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAK;AACzC,oBAAA,cAAc,EAAE;AAClB,iBAAC,CAAC;AACF,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;;;AAGlC,iBAAA,IAAI,CAAE,MAAc,CAAC,OAAO,CAAC,MAAM,EAAE;AAC1C,gBAAA,MAAM,GAAG,GAAG,CAAG,EAAA,OAAO,YAAY;AAElC,gBAAA,MAAM,aAAa,GAAG,IAAI,cAAc,EAAE;AAC1C,gBAAA,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAK;oBAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnD,oBAAA,UAAU,CAAC,IAAI,GAAG,iBAAiB;oBACnC,UAAU,CAAC,IAAI,GAAG;;;wBAGhB,4BAA4B;wBAC5B,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;;wBAEvD,iCAAiC;wBACjC,wBAAwB;wBACxB,gCAAgC;AACjC,qBAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;AAErC,oBAAA,cAAc,CAAE,MAAc,CAAC,gBAAgB,CAAC;AAClD,iBAAC,CAAC;AACF,gBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC9B,aAAa,CAAC,IAAI,EAAE;;iBACf;AACL,gBAAA,cAAc,EAAE;;AAEpB,SAAC,CAAC;;;AAII,IAAA,iBAAiB,GAA0B,MAAK,GAAG;;AAEnD,IAAA,kBAAkB,GAAe,MAAK,GAAG;;AAGjD,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;;AAEtB,IAAA,gBAAgB,CAAC,EAAyB,EAAA;AACxC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;;AAE7B,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;;;AAItB,IAAA,cAAc;IACZ,UAAU,GAAA;QAClB,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QACnC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,MAAM,CAAC;;;AAIhB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5G,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACnH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,CAAC;;AAGjG,QAAA,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB;;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAK;YACpC,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE/D,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC5C,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAEzB,SAAC,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG9B,IAAA,mBAAmB,CAAC,GAAwB,EAAE,QAAgB,EAAE,KAAa,EAAA;QACnF,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC7C,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,WAAW,CAAC,aAAa,EAAE,KAAK,QAAQ,EAAE;gBAC5C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC;;;aAElD;AACL,YAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;;AAE/D,QAAA,OAAO,WAAW;;IAGZ,cAAc,CAAC,UAA+D,EAAE,WAA6B,EAAA;AACnH,QAAA,IAAI,UAAU,KAAK,MAAM,EAAE;YACzB,OAAO,WAAW,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI;;AAElD,QAAA,OAAO,UAAU;;IAGX,qBAAqB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS;;;IAGnC,WAAW,GAAA;QACT,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC3C,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;;gBAExD,WAAW,CAAC,OAAO,EAAE;;AAEvB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;;;uGA7SjB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EATrB,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZS,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAeD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EACjB,UAAA,EAAA,KAAK,EACP,QAAA,EAAA,EAAE,EAMD,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;MCpBpC,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAHjB,YAAA,EAAA,CAAA,qBAAqB,CAD1B,EAAA,OAAA,EAAA,CAAA,YAAY,aAEZ,qBAAqB,CAAA,EAAA,CAAA;AAEpB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAJtB,YAAY,CAAA,EAAA,CAAA;;2FAIX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,OAAO,EAAE,CAAC,qBAAqB,CAAC;AACjC,iBAAA;;;ACRD;;AAEG;;;;"}