{"version":3,"file":"ngx-omniview.mjs","sources":["../../../projects/ngx-omniview/src/lib/renderers/html.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/json.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/latex.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/markdown.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/mathjax.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/text.renderer.ts","../../../projects/ngx-omniview/src/lib/renderers/renderer.registry.ts","../../../projects/ngx-omniview/src/lib/renderers/index.ts","../../../projects/ngx-omniview/src/lib/json-viewer/json-viewer.component.ts","../../../projects/ngx-omniview/src/lib/json-viewer/json-viewer.component.html","../../../projects/ngx-omniview/src/lib/ngx-omniview.component.ts","../../../projects/ngx-omniview/src/lib/ngx-omniview.component.html","../../../projects/ngx-omniview/src/lib/ngx-omniview.module.ts","../../../projects/ngx-omniview/src/public-api.ts","../../../projects/ngx-omniview/src/ngx-omniview.ts"],"sourcesContent":["import { inject } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * HTML Renderer\r\n * \r\n * Renders HTML content with sanitization to prevent XSS attacks.\r\n * Uses Angular's DomSanitizer to ensure safe HTML rendering.\r\n * \r\n * Security: Automatically sanitizes potentially dangerous content like:\r\n * - <script> tags\r\n * - javascript: URLs\r\n * - event handlers (onclick, onerror, etc.)\r\n * \r\n * @param data - Raw HTML string\r\n * @returns Sanitized HTML string safe for rendering\r\n * \r\n * @example\r\n * ```typescript\r\n * const input = '<h1>Title</h1><p>Paragraph</p>';\r\n * const output = renderHtml(input);\r\n * // Output: Sanitized HTML ready for [innerHTML] binding\r\n * ```\r\n */\r\nexport const renderHtml: RendererFunction = (data: string): string => {\r\n  // Note: DomSanitizer needs to be injected in the component context\r\n  // The actual sanitization happens in the component\r\n  // This renderer just returns the HTML as-is\r\n  // Sanitization is handled by Angular's [innerHTML] binding\r\n  return data;\r\n};\r\n\r\n","import { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * JSON Renderer\r\n * \r\n * Parses and pretty-prints JSON data for simple text display.\r\n * \r\n * Note: The interactive JSON viewer component handles JSON display in the UI.\r\n * This renderer is registered for consistency but the main component handles\r\n * JSON parsing directly to pass objects to the viewer component.\r\n * \r\n * @param data - Raw JSON string\r\n * @returns Pretty-printed JSON string or an error message\r\n * \r\n * @example\r\n * ```typescript\r\n * const json = renderJson('{\"a\":1}');\r\n * // Output:\r\n * // {\r\n * //   \"a\": 1\r\n * // }\r\n * ```\r\n */\r\nexport const renderJson: RendererFunction = (data: string): string => {\r\n  try {\r\n    const obj = JSON.parse(data);\r\n    return JSON.stringify(obj, null, 2);\r\n  } catch (error) {\r\n    return `Invalid JSON:\\n${data}`;\r\n  }\r\n};\r\n","import { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * Pre-process LaTeX to convert unsupported environments to supported ones\r\n * \r\n * Complete mapping based on LaTeX2e and AMSMath specifications:\r\n * - INLINE MATH: \\(...\\), \\begin{math}...\\end{math} → $...$\r\n * - DISPLAY MATH: \\[...\\], equation, align, gather, etc. → $$...$$\r\n * - SPECIAL: array, cases, split, matrices → left as-is (used inside math mode)\r\n * \r\n * @param latex - Raw LaTeX source\r\n * @returns Processed LaTeX compatible with latex.js\r\n */\r\nfunction preprocessLatex(latex: string): string {\r\n  let processed = latex;\r\n\r\n  // ========================================\r\n  // convert inline math to $...$\r\n  // ========================================\r\n  \r\n  // convert \\(...\\) to $...$\r\n  processed = processed.replace(\r\n    /\\\\\\(([\\s\\S]*?)\\\\\\)/g,\r\n    (match, content) => `$${content}$`\r\n  );\r\n\r\n  // convert \\begin{math}...\\end{math} to $...$\r\n  processed = processed.replace(\r\n    /\\\\begin\\{math\\}([\\s\\S]*?)\\\\end\\{math\\}/g,\r\n    (match, content) => `$${content.trim()}$`\r\n  );\r\n\r\n  // ========================================\r\n  // convert display math to $$...$$\r\n  // ========================================\r\n\r\n  // convert \\[...\\] to $$...$$\r\n  processed = processed.replace(\r\n    /\\\\\\[([\\s\\S]*?)\\\\\\]/g,\r\n    (match, content) => `$$${content.trim()}$$`\r\n  );\r\n\r\n  // convert \\begin{displaymath}...\\end{displaymath} to $$...$$\r\n  processed = processed.replace(\r\n    /\\\\begin\\{displaymath\\}([\\s\\S]*?)\\\\end\\{displaymath\\}/g,\r\n    (match, content) => `$$${content.trim()}$$`\r\n  );\r\n\r\n  // convert AMS and standard display math environments to $$...$$\r\n  const displayMathEnvs = [\r\n    'equation', 'equation*',\r\n    'align', 'align*',\r\n    'alignat', 'alignat*',\r\n    'gather', 'gather*',\r\n    'multline', 'multline*',\r\n    'flalign', 'flalign*',\r\n    'eqnarray', 'eqnarray*',\r\n    'IEEEeqnarray', 'IEEEeqnarray*'\r\n  ];\r\n\r\n  displayMathEnvs.forEach(env => {\r\n    const regex = new RegExp(\r\n      `\\\\\\\\begin\\\\{${env.replace(/\\*/g, '\\\\*')}\\\\}([\\\\s\\\\S]*?)\\\\\\\\end\\\\{${env.replace(/\\*/g, '\\\\*')}\\\\}`,\r\n      'g'\r\n    );\r\n    \r\n    processed = processed.replace(regex, (match, content) => {\r\n      // clean up the content\r\n      const cleanContent = content.trim();\r\n      return `$$${cleanContent}$$`;\r\n    });\r\n  });\r\n\r\n  return processed;\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n  const div = document.createElement('div');\r\n  div.textContent = text;\r\n  return div.innerHTML;\r\n}\r\n\r\n/**\r\n * Validate LaTeX - No validation possible without latexJsModule\r\n */\r\nfunction validateLatex(_latex: string): string | null {\r\n  return null;\r\n}\r\n\r\n/**\r\n * LaTeX Renderer\r\n * \r\n * Converts plain math or LaTeX expressions into display-safe LaTeX.\r\n * To render LaTeX documents to HTML using latex.js library.\r\n * Supports full LaTeX documents including \\documentclass, \\usepackage, sections, etc.\r\n * \r\n * Features:\r\n * - Full document support (not just math)\r\n * - Handles common LaTeX packages\r\n * - Graceful error handling for unsupported features (TikZ, etc.)\r\n * - Hyphenation support\r\n * \r\n * Limitations:\r\n * - Native LaTeX packages cannot be loaded directly\r\n * - Complex packages like TikZ require custom JavaScript implementations\r\n * - Some TeX constructs may not be fully supported\r\n * \r\n * Security:\r\n * - latex.js generates HTML from LaTeX source, which is considered safe\r\n * - The output is rendered via Angular's [innerHTML] binding which provides\r\n *   automatic XSS protection for untrusted content\r\n * - Error messages are explicitly escaped using escapeHtml() to prevent XSS\r\n * \r\n * @param data - Raw LaTeX source code (full document or fragment)\r\n * @returns HTML string ready for rendering with [innerHTML]\r\n * \r\n * @example\r\n * ```typescript\r\n * const latex = `\\\\documentclass{article}\\\\begin{document}Hello\\\\end{document}`;\r\n * const html = renderLatex(latex);\r\n * // Output: HTML string with rendered LaTeX\r\n * ```\r\n */\r\nexport const renderLatex: RendererFunction = (data: string): string => {\r\n  if (!data?.trim()) return '';\r\n\r\n  try {\r\n    // Pre-process LaTeX to convert unsupported environments to supported ones\r\n    const processed = preprocessLatex(data.trim());\r\n\r\n    // Validate the processed LaTeX if latex.js module is available\r\n    const validationError = validateLatex(processed);\r\n    if (validationError) {\r\n      // Return error HTML if validation fails\r\n      return `<div class=\"latex-error\">\r\n        <div class=\"latex-error-header\">\r\n          <strong>LaTeX Rendering Error</strong>\r\n        </div>\r\n        <div class=\"latex-error-message\">\r\n          <p>${escapeHtml(validationError)}</p>\r\n          <p><em>This may be due to unsupported LaTeX packages or features (e.g., TikZ, PGF).</em></p>\r\n        </div>\r\n        <details class=\"latex-error-details\">\r\n          <summary>Show raw LaTeX source</summary>\r\n          <pre class=\"latex-error-source\">${escapeHtml(data)}</pre>\r\n        </details>\r\n      </div>`;\r\n    }\r\n\r\n    return processed;\r\n  } catch (error) {\r\n    // Gracefully handle unsupported features or parse errors\r\n    const errorMessage = error instanceof Error ? error.message : String(error);\r\n    \r\n    return `<div class=\"latex-error\">\r\n      <div class=\"latex-error-header\">\r\n        <strong>LaTeX Rendering Error</strong>\r\n      </div>\r\n      <div class=\"latex-error-message\">\r\n        <p>${escapeHtml(errorMessage)}</p>\r\n        <p><em>This may be due to unsupported LaTeX packages or features (e.g., TikZ, PGF).</em></p>\r\n      </div>\r\n      <details class=\"latex-error-details\">\r\n        <summary>Show raw LaTeX source</summary>\r\n        <pre class=\"latex-error-source\">${escapeHtml(data)}</pre>\r\n      </details>\r\n    </div>`;\r\n  }\r\n};\r\n","import { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * Markdown Renderer\r\n * \r\n * The actual parsing and rendering of Markdown is handled by ngx-markdown\r\n * in the component template. This renderer simply returns the raw string.\r\n * \r\n * @param data - Raw Markdown content\r\n * @returns The unmodified Markdown string\r\n * \r\n * @example\r\n * ```typescript\r\n * const markdown = renderMarkdown('# Hello World');\r\n * // Output: \"# Hello World\"\r\n * ```\r\n */\r\nexport const renderMarkdown: RendererFunction = (data: string): string => {\r\n  return data;\r\n};\r\n","import { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * MathJax Renderer\r\n * \r\n * This renderer simply returns the raw string data containing MathJax/LaTeX syntax.\r\n * The actual rendering (typesetting) is handled in the component template\r\n * or by the MathJax directive.\r\n * \r\n * @param data - Raw MathJax/LaTeX content\r\n * @returns The unmodified MathJax string\r\n * \r\n * @example\r\n * ```typescript\r\n * const latex = renderMathjax('Euler’s Identity: $$e^{i\\\\pi} + 1 = 0$$');\r\n * // Output: \"Euler’s Identity: $$e^{i\\\\pi} + 1 = 0$$\"\r\n * ```\r\n */\r\nexport const renderMathjax: RendererFunction = (data: string): string => {\r\n  return data;\r\n};\r\n","import { RendererFunction } from './renderer.types';\r\n\r\n/**\r\n * Text Renderer\r\n * \r\n * Renders plain text content as-is with preserved whitespace and line breaks.\r\n * This is the simplest renderer with no transformations applied.\r\n * \r\n * @param data - Raw text content\r\n * @returns The same text content without modifications\r\n * \r\n * @example\r\n * ```typescript\r\n * const output = renderText('Hello\\nWorld');\r\n * // Output: \"Hello\\nWorld\"\r\n * ```\r\n */\r\nexport const renderText: RendererFunction = (data: string): string => {\r\n  return data;\r\n};\r\n\r\n","import { renderHtml } from './html.renderer';\r\nimport { renderJson } from './json.renderer';\r\nimport { renderLatex } from './latex.renderer';\r\nimport { renderMarkdown } from './markdown.renderer';\r\nimport { renderMathjax } from './mathjax.renderer';\r\nimport { RendererRegistry } from './renderer.types';\r\nimport { renderText } from './text.renderer';\r\n\r\n/**\r\n * Default placeholder renderer for formats not yet implemented\r\n * Shows \"coming soon\" message with the raw data\r\n */\r\nconst renderPlaceholder = (format: string) => (data: string): string => {\r\n  return `[${format} rendering - coming soon]\\n\\n${data}`;\r\n};\r\n\r\n/**\r\n * Renderer Registry\r\n * \r\n * Central registry mapping each format to its renderer function.\r\n * \r\n * To add a new renderer:\r\n * 1. Create a new file: `[format].renderer.ts`\r\n * 2. Implement the RendererFunction\r\n * 3. Import and register it here\r\n * \r\n * @example\r\n * ```typescript\r\n * // Adding a new renderer\r\n * import { renderMarkdown } from './markdown.renderer';\r\n * \r\n * export const rendererRegistry: RendererRegistry = {\r\n *   ...\r\n *   markdown: renderMarkdown,\r\n *   ...\r\n * };\r\n * ```\r\n */\r\nexport const rendererRegistry: RendererRegistry = {\r\n  text: renderText,\r\n  html: renderHtml,\r\n  markdown: renderMarkdown,\r\n  json: renderJson,\r\n  mathjax: renderMathjax,\r\n  latex: renderLatex,\r\n  \r\n  // Placeholders for future renderers\r\n  code: renderPlaceholder('code'),\r\n};\r\n\r\n","/**\r\n * Renderers module\r\n * \r\n * This module contains all content renderers for different formats.\r\n * Each renderer is implemented in its own file for maintainability.\r\n */\r\n\r\nexport * from './renderer.types';\r\nexport * from './renderer.registry';\r\nexport * from './text.renderer';\r\nexport * from './html.renderer';\r\nexport * from './markdown.renderer';\r\nexport * from './json.renderer';\r\nexport * from './mathjax.renderer';\r\nexport * from './latex.renderer';\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'json-viewer',\r\n  templateUrl: './json-viewer.component.html',\r\n  styleUrls: ['./json-viewer.component.css']\r\n})\r\nexport class JsonViewerComponent implements OnInit {\r\n  @Input() data: any = {};\r\n  @Input() level: number = 0;\r\n  @Input() showCounts: boolean = true;\r\n\r\n  collapsed: Record<string, boolean> = {};\r\n  private static readonly ROOT_KEY = '__root__';\r\n\r\n  ngOnInit() {\r\n    // Collapse all expandable items on initial load\r\n    this.keys.forEach(key => {\r\n      if (this.isObject(this.data[key])) {\r\n        this.collapsed[key] = true;\r\n      }\r\n    });\r\n    // Root starts collapsed\r\n    if (this.level === 0) {\r\n      this.collapsed[JsonViewerComponent.ROOT_KEY] = true;\r\n    }\r\n  }\r\n\r\n  get keys(): string[] {\r\n    return this.data && typeof this.data === 'object' ? Object.keys(this.data) : [];\r\n  }\r\n\r\n  get isArray(): boolean {\r\n    return Array.isArray(this.data);\r\n  }\r\n\r\n  // Keys used for rendering: for root, render a synthetic key\r\n  get renderKeys(): string[] {\r\n    if (this.level === 0) return [JsonViewerComponent.ROOT_KEY];\r\n    return this.keys;\r\n  }\r\n\r\n  getValueByKey(key: string): any {\r\n    if (key === JsonViewerComponent.ROOT_KEY) return this.data;\r\n    return this.data[key];\r\n  }\r\n\r\n  isObject(value: any): boolean {\r\n    return value !== null && typeof value === 'object';\r\n  }\r\n\r\n  toggle(key: string) {\r\n    this.collapsed[key] = !this.collapsed[key];\r\n  }\r\n\r\n  getSize(value: any): number {\r\n    if (Array.isArray(value)) return value.length;\r\n    if (typeof value === 'object' && value !== null) return Object.keys(value).length;\r\n    return 0;\r\n  }\r\n\r\n  formatValue(value: any): string {\r\n    if (value === null) return 'null';\r\n    if (value === undefined) return 'undefined';\r\n    if (typeof value === 'string') return `\"${value}\"`;\r\n    return String(value);\r\n  }\r\n\r\n  getValueClass(value: any): string {\r\n    if (value === null) return 'json-value-null';\r\n    if (value === undefined) return 'json-value-undefined';\r\n    if (typeof value === 'string') return 'json-value-string';\r\n    if (typeof value === 'number') return 'json-value-number';\r\n    if (typeof value === 'boolean') return 'json-value-boolean';\r\n    return '';\r\n  }\r\n\r\n  getBracket(value: any, opening: boolean): string {\r\n    const isArr = Array.isArray(value);\r\n    return opening ? (isArr ? '[' : '{') : (isArr ? ']' : '}');\r\n  }\r\n\r\n  isArrayValue(value: any): boolean {\r\n    return Array.isArray(value);\r\n  }\r\n\r\n  getCountLabel(value: any): string {\r\n    const count = this.getSize(value);\r\n    const base = this.isArrayValue(value) ? 'item' : 'prop';\r\n    return `${count} ${base}${count === 1 ? '' : 's'}`;\r\n  }\r\n}\r\n","<ul class=\"jv\">\r\n  <ng-container *ngFor=\"let key of renderKeys; let last = last; let i = index\">\r\n    <!-- Opening line -->\r\n    <li class=\"jv-line\">\r\n      <button *ngIf=\"isObject(getValueByKey(key))\"\r\n              class=\"jv-toggle\"\r\n              [class.collapsed]=\"collapsed[key]\"\r\n              (click)=\"toggle(key)\"\r\n              aria-label=\"Toggle\">\r\n        {{ collapsed[key] ? '▶' : '▼' }}\r\n      </button>\r\n      <span *ngIf=\"!isObject(getValueByKey(key))\" class=\"jv-spacer\"></span>\r\n\r\n      <ng-container *ngIf=\"key !== '__root__'\">\r\n        <span [class]=\"isArray ? 'jv-index' : 'jv-key'\">{{ isArray ? i : key }}</span>\r\n        <span class=\"jv-colon\">:</span>\r\n      </ng-container>\r\n\r\n      <!-- Object/array collapsed preview -->\r\n      <ng-container *ngIf=\"isObject(getValueByKey(key)) && collapsed[key]\">\r\n        <span class=\"jv-bracket\">{{ getBracket(getValueByKey(key), true) }}</span>\r\n        <span class=\"jv-ellipsis\">...</span>\r\n        <span class=\"jv-bracket\">{{ getBracket(getValueByKey(key), false) }}</span>\r\n        <span *ngIf=\"showCounts\" class=\"jv-count\">{{ getCountLabel(getValueByKey(key)) }}</span>\r\n        <span *ngIf=\"!last\" class=\"jv-comma\">,</span>\r\n      </ng-container>\r\n\r\n      <!-- Primitive value -->\r\n      <ng-container *ngIf=\"!isObject(getValueByKey(key))\">\r\n        <span [ngClass]=\"getValueClass(getValueByKey(key))\">{{ formatValue(getValueByKey(key)) }}</span>\r\n        <span *ngIf=\"!last\" class=\"jv-comma\">,</span>\r\n      </ng-container>\r\n\r\n      <!-- Opening bracket when expanded -->\r\n      <ng-container *ngIf=\"isObject(getValueByKey(key)) && !collapsed[key]\">\r\n        <span class=\"jv-bracket\">{{ getBracket(getValueByKey(key), true) }}</span>\r\n      </ng-container>\r\n    </li>\r\n\r\n    <!-- Nested content when expanded -->\r\n    <li *ngIf=\"isObject(getValueByKey(key)) && !collapsed[key]\" class=\"jv-children\">\r\n      <json-viewer [data]=\"getValueByKey(key)\" [level]=\"level + 1\" [showCounts]=\"showCounts\"></json-viewer>\r\n    </li>\r\n\r\n    <!-- Closing line when expanded -->\r\n    <li *ngIf=\"isObject(getValueByKey(key)) && !collapsed[key]\" class=\"jv-line\">\r\n      <span class=\"jv-spacer\"></span>\r\n      <span class=\"jv-bracket\">{{ getBracket(getValueByKey(key), false) }}</span>\r\n      <span *ngIf=\"!last\" class=\"jv-comma\">,</span>\r\n    </li>\r\n  </ng-container>\r\n</ul>\r\n","import { Component, Input, OnDestroy } from '@angular/core';\r\nimport { OmniviewFormat, rendererRegistry } from './renderers';\r\n\r\n/**\r\n * OmniviewComponent - Universal content renderer\r\n * \r\n * Renders raw string data in various formats including text, HTML, Markdown,\r\n * LaTeX, MathJax, JSON, and syntax-highlighted code.\r\n * \r\n * Each format has its own dedicated renderer implementation in the `renderers/` folder.\r\n * \r\n * Compatible with Angular 15-20.\r\n * \r\n * @example\r\n * ```html\r\n * <omniview [data]=\"content\" [format]=\"'markdown'\"></omniview>\r\n * ```\r\n */\r\n@Component({\r\n  selector: 'omniview',\r\n  templateUrl: './ngx-omniview.component.html',\r\n  styleUrls: ['./ngx-omniview.component.css']\r\n})\r\nexport class NgxOmniviewComponent implements OnDestroy {\r\n  /**\r\n   * The raw string content to be rendered (internal data storage)\r\n   * @private\r\n   */\r\n  private _data: string = '';\r\n\r\n  /**\r\n   * The format/type of the content (internal format storage)\r\n   * @default 'text'\r\n   */\r\n  private _format: OmniviewFormat = 'text';\r\n\r\n  /**\r\n   * Cached rendered content to avoid re-rendering on every change detection\r\n   * @private\r\n   */\r\n  private _cachedContent: string | any = '';\r\n\r\n  /**\r\n   * The raw string content to be rendered\r\n   * Using setter pattern for efficient change detection\r\n   */\r\n  @Input()\r\n  set data(value: string) {\r\n    if (this._data !== value) {\r\n      this._data = value;\r\n      this._invalidateCache();\r\n    }\r\n  }\r\n  get data(): string {\r\n    return this._data;\r\n  }\r\n\r\n  /**\r\n   * The format/type of the content\r\n   * @default 'text'\r\n   */\r\n  @Input()\r\n  set format(value: OmniviewFormat) {\r\n    if (this._format !== value) {\r\n      this._format = value;\r\n      this._invalidateCache();\r\n    }\r\n  }\r\n  get format(): OmniviewFormat {\r\n    return this._format;\r\n  }\r\n\r\n  /**\r\n   * Invalidate cache and trigger re-render\r\n   * @private\r\n   */\r\n  private _invalidateCache(): void {\r\n    this._cachedContent = this._renderContent();\r\n  }\r\n\r\n  /**\r\n   * Render content based on format\r\n   * @private\r\n   */\r\n  private _renderContent(): string | any {\r\n    if (!this._data) {\r\n      return '';\r\n    }\r\n\r\n    // For JSON, parse and return object (used by json-viewer component)\r\n    if (this._format === 'json') {\r\n      try {\r\n        return JSON.parse(this._data);\r\n      } catch {\r\n        return { error: 'Invalid JSON', raw: this._data };\r\n      }\r\n    }\r\n\r\n    // For all other formats, use the renderer registry\r\n    const renderer = rendererRegistry[this._format];\r\n    return renderer ? renderer(this._data) : this._data;\r\n  }\r\n\r\n  /**\r\n   * Get the rendered content\r\n   * \r\n   * For performance optimization, returns cached content, only re-renders when inputs change\r\n   */\r\n  get renderedContent(): string | any {\r\n    return this._cachedContent;\r\n  }\r\n\r\n  /**\r\n   * For LaTeX, check if the rendered content is an error HTML\r\n   */\r\n  get isLatexError(): boolean {\r\n    if (this.format !== 'latex') return false;\r\n    const content = this.renderedContent;\r\n    return typeof content === 'string' && content.trim().startsWith('<div class=\"latex-error\">');\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    // Clear cached content to free memory\r\n    this._cachedContent = '';\r\n    this._data = '';\r\n  }\r\n\r\n}\r\n","<div class=\"omniview-content\" [ngSwitch]=\"format\">\r\n\r\n  <!-- HTML format: render as HTML -->\r\n  <div *ngSwitchCase=\"'html'\"\r\n    [innerHTML]=\"renderedContent\"\r\n  ></div>\r\n\r\n  <!-- Markdown format: use ngx-markdown for rendering -->\r\n  <markdown *ngSwitchCase=\"'markdown'\"\r\n    katex\r\n    [data]=\"renderedContent\"\r\n  ></markdown>\r\n\r\n  <!-- JSON format: use interactive JSON viewer -->\r\n  <json-viewer *ngSwitchCase=\"'json'\"\r\n    [data]=\"renderedContent\"\r\n  ></json-viewer>\r\n\r\n  <!-- MathJax format -->  \r\n  <div *ngSwitchCase=\"'mathjax'\" \r\n    [mathjax]=\"renderedContent\"\r\n  ></div>\r\n\r\n  <!-- LaTex format -->\r\n  <div *ngSwitchCase=\"'latex'\">\r\n    <!-- show error HTML if validation failed -->\r\n    <div *ngIf=\"isLatexError\"\r\n      [innerHTML]=\"renderedContent\"\r\n    ></div>\r\n\r\n    <!-- otherwise use latex-js component -->\r\n    <latex-js\r\n      *ngIf=\"!isLatexError\"\r\n      #latexElement\r\n      baseURL=\"https://cdn.jsdelivr.net/npm/latex.js/dist/\" \r\n      [textContent]=\"renderedContent\">\r\n    </latex-js>\r\n  </div>\r\n\r\n  <!-- All other formats: text, code, latex -->\r\n  <pre *ngSwitchDefault class=\"preserve-whitespace\">{{ renderedContent }}</pre>\r\n\r\n</div>\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MarkdownModule } from 'ngx-markdown';\r\nimport { MathjaxModule } from 'mathjax-angular';\r\nimport { NgxOmniviewComponent } from './ngx-omniview.component';\r\nimport { JsonViewerComponent } from './json-viewer/json-viewer.component';\r\n\r\n@NgModule({\r\n  declarations: [NgxOmniviewComponent, JsonViewerComponent],\r\n  imports: [\r\n    CommonModule,\r\n    MarkdownModule,\r\n    MathjaxModule\r\n  ],\r\n  exports: [NgxOmniviewComponent, MarkdownModule, MathjaxModule],\r\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\r\n})\r\nexport class NgxOmniviewModule {}\r\n","/*\r\n * Public API Surface of ngx-omniview\r\n */\r\n\r\nexport * from './lib/ngx-omniview.component';\r\nexport * from './lib/ngx-omniview.module';\r\nexport type { OmniviewFormat } from './lib/renderers';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.JsonViewerComponent"],"mappings":";;;;;;;;;AAIA;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,UAAU,GAAqB,CAAC,IAAY,KAAY;;;;;AAKnE,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;;AC7BD;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,UAAU,GAAqB,CAAC,IAAY,KAAY;IACnE,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACrC,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;QACd,OAAO,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAE,CAAC;AACjC,KAAA;AACH,CAAC;;AC5BD;;;;;;;;;;AAUG;AACH,SAAS,eAAe,CAAC,KAAa,EAAA;IACpC,IAAI,SAAS,GAAG,KAAK,CAAC;;;;;AAOtB,IAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,qBAAqB,EACrB,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,OAAO,CAAA,CAAA,CAAG,CACnC,CAAC;;IAGF,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,yCAAyC,EACzC,CAAC,KAAK,EAAE,OAAO,KAAK,CAAI,CAAA,EAAA,OAAO,CAAC,IAAI,EAAE,CAAG,CAAA,CAAA,CAC1C,CAAC;;;;;IAOF,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,qBAAqB,EACrB,CAAC,KAAK,EAAE,OAAO,KAAK,CAAK,EAAA,EAAA,OAAO,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,CAC5C,CAAC;;IAGF,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,uDAAuD,EACvD,CAAC,KAAK,EAAE,OAAO,KAAK,CAAK,EAAA,EAAA,OAAO,CAAC,IAAI,EAAE,CAAI,EAAA,CAAA,CAC5C,CAAC;;AAGF,IAAA,MAAM,eAAe,GAAG;AACtB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,cAAc,EAAE,eAAe;KAChC,CAAC;AAEF,IAAA,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;QAC5B,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,CAAe,YAAA,EAAA,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA,yBAAA,EAA4B,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAK,GAAA,CAAA,EAClG,GAAG,CACJ,CAAC;AAEF,QAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAI;;AAEtD,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,CAAA,EAAA,EAAK,YAAY,CAAA,EAAA,CAAI,CAAC;AAC/B,SAAC,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;AAEG;AACH,SAAS,UAAU,CAAC,IAAY,EAAA;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1C,IAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IACvB,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC;AAED;;AAEG;AACH,SAAS,aAAa,CAAC,MAAc,EAAA;AACnC,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACI,MAAM,WAAW,GAAqB,CAAC,IAAY,KAAY;AACpE,IAAA,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAAE,QAAA,OAAO,EAAE,CAAC;IAE7B,IAAI;;QAEF,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;AAG/C,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,eAAe,EAAE;;YAEnB,OAAO,CAAA;;;;;eAKE,UAAU,CAAC,eAAe,CAAC,CAAA;;;;;4CAKE,UAAU,CAAC,IAAI,CAAC,CAAA;;aAE/C,CAAC;AACT,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;AAClB,KAAA;AAAC,IAAA,OAAO,KAAK,EAAE;;AAEd,QAAA,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5E,OAAO,CAAA;;;;;aAKE,UAAU,CAAC,YAAY,CAAC,CAAA;;;;;0CAKK,UAAU,CAAC,IAAI,CAAC,CAAA;;WAE/C,CAAC;AACT,KAAA;AACH,CAAC;;ACzKD;;;;;;;;;;;;;;AAcG;AACI,MAAM,cAAc,GAAqB,CAAC,IAAY,KAAY;AACvE,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;;ACjBD;;;;;;;;;;;;;;;AAeG;AACI,MAAM,aAAa,GAAqB,CAAC,IAAY,KAAY;AACtE,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;;AClBD;;;;;;;;;;;;;;AAcG;AACI,MAAM,UAAU,GAAqB,CAAC,IAAY,KAAY;AACnE,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;;ACXD;;;AAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,MAAc,KAAK,CAAC,IAAY,KAAY;AACrE,IAAA,OAAO,CAAI,CAAA,EAAA,MAAM,CAAgC,6BAAA,EAAA,IAAI,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,gBAAgB,GAAqB;AAChD,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,KAAK,EAAE,WAAW;;AAGlB,IAAA,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;CAChC;;AChDD;;;;;AAKG;;MCEU,mBAAmB,CAAA;AALhC,IAAA,WAAA,GAAA;QAMW,IAAI,CAAA,IAAA,GAAQ,EAAE,CAAC;QACf,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAClB,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAEpC,IAAS,CAAA,SAAA,GAA4B,EAAE,CAAC;AA+EzC,KAAA;IA5EC,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5B,aAAA;AACH,SAAC,CAAC,CAAC;;AAEH,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACrD,SAAA;KACF;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;KACjF;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;;AAGD,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AAED,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,GAAG,KAAK,mBAAmB,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACvB;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;QACjB,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;KACpD;AAED,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5C;AAED,IAAA,OAAO,CAAC,KAAU,EAAA;AAChB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAClF,QAAA,OAAO,CAAC,CAAC;KACV;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,MAAM,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,WAAW,CAAC;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC;AACnD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,iBAAiB,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,sBAAsB,CAAC;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,mBAAmB,CAAC;QAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,mBAAmB,CAAC;QAC1D,IAAI,OAAO,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,oBAAoB,CAAC;AAC5D,QAAA,OAAO,EAAE,CAAC;KACX;IAED,UAAU,CAAC,KAAU,EAAE,OAAgB,EAAA;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,OAAO,OAAO,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;KAC5D;AAED,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;AACxD,QAAA,OAAO,GAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;KACpD;;AA7EuB,mBAAQ,CAAA,QAAA,GAAG,UAAU,CAAC;iHANnC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAAnB,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECPhC,q9EAoDA,EAAA,MAAA,EAAA,CAAA,s2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7Ca,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,q9EAAA,EAAA,MAAA,EAAA,CAAA,s2BAAA,CAAA,EAAA,CAAA;8BAKd,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;AEPR;;;;;;;;;;;;;;AAcG;MAMU,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AAME;;;AAGG;QACK,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAE3B;;;AAGG;QACK,IAAO,CAAA,OAAA,GAAmB,MAAM,CAAC;AAEzC;;;AAGG;QACK,IAAc,CAAA,cAAA,GAAiB,EAAE,CAAC;AAuF3C,KAAA;AArFC;;;AAGG;IACH,IACI,IAAI,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;KACF;AACD,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED;;;AAGG;IACH,IACI,MAAM,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzB,SAAA;KACF;AACD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;AAGG;IACK,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;KAC7C;AAED;;;AAGG;IACK,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;YAC3B,IAAI;gBACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAA;YAAC,MAAM;gBACN,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACnD,aAAA;AACF,SAAA;;QAGD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;KACrD;AAED;;;;AAIG;AACH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED;;AAEG;AACH,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;AACrC,QAAA,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;KAC9F;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;;kHAtGU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,4FCvBjC,kwCA2CA,EAAA,MAAA,EAAA,CAAA,yRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,MAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDpBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,kwCAAA,EAAA,MAAA,EAAA,CAAA,yRAAA,CAAA,EAAA,CAAA;8BA4BhB,IAAI,EAAA,CAAA;sBADP,KAAK;gBAgBF,MAAM,EAAA,CAAA;sBADT,KAAK;;;ME5CK,iBAAiB,CAAA;;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EATb,YAAA,EAAA,CAAA,oBAAoB,EAAE,mBAAmB,aAEtD,YAAY;QACZ,cAAc;AACd,QAAA,aAAa,CAEL,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,cAAc,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;AAGlD,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAP1B,YAAY;QACZ,cAAc;QACd,aAAa,EAEiB,cAAc,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;4FAGlD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AACzD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,cAAc;wBACd,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,aAAa,CAAC;oBAC9D,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA,CAAA;;;AChBD;;AAEG;;ACFH;;AAEG;;;;"}