{"version":3,"file":"fsegurai-ngx-markdown.mjs","sources":["../../../lib/src/clipboard-button/clipboard-button.component.ts","../../../lib/src/clipboard-button/clipboard-options.ts","../../../lib/src/configuration/katex-options.ts","../../../lib/src/configuration/marked-extensions.ts","../../../lib/src/configuration/marked-options.ts","../../../lib/src/configuration/mermaid-options.ts","../../../lib/src/configuration/prism-plugin.ts","../../../lib/src/services/markdown.service.ts","../../../lib/src/configuration/provide-markdown.ts","../../../lib/src/services/markdown-link.service.ts","../../../lib/src/markdown/markdown.component.ts","../../../lib/src/pipes/language.pipe.ts","../../../lib/src/pipes/markdown.pipe.ts","../../../lib/src/markdown.module.ts","../../../lib/fsegurai-ngx-markdown.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  inject,\n  model,\n  ModelSignal,\n  signal,\n  WritableSignal,\n} from '@angular/core';\n\n@Component({\n  selector: 'markdown-clipboard',\n  template: `\n    <button\n      class=\"markdown-clipboard-button\"\n      [class.copied]=\"copied()\"\n      (click)=\"onCopyToClipboardClick()\">\n      {{ copiedText() }}\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClipboardButtonComponent {\n  // * == SERVICE INJECTIONS ==\n  private _destroyRef = inject(DestroyRef);\n\n  // * == INPUTS ==\n  buttonTextCopy: ModelSignal<string> = model('Copy');\n  buttonTextCopied: ModelSignal<string> = model('Copied!');\n  protected readonly copied: WritableSignal<boolean> = signal(false);\n  protected readonly copiedText = computed(() =>\n    this.copied() ? this.buttonTextCopied() : this.buttonTextCopy(),\n  );\n\n  // * == PRIVATE PROPERTIES ==\n  private timeoutId: ReturnType<typeof setTimeout> | undefined; // To store the setTimeout ID for clearing\n\n  constructor() {\n    this.registerDestroyCleanup();\n  }\n\n  /**\n   * Handles the click event to copy content to the clipboard.\n   * Sets a \"copied\" state to true, resets it to false after a timeout, and clears any existing timeouts if applicable.\n   *\n   * @protected - This method is intended for internal use within the component.\n   * @return {void} This method does not return a value.\n   */\n  protected onCopyToClipboardClick(): void {\n    this.copied.set(true);\n\n    if (this.timeoutId) clearTimeout(this.timeoutId);\n\n    this.timeoutId = setTimeout(() => {\n      this.copied.set(false);\n      this.timeoutId = undefined;\n    }, 3000);\n  }\n\n  /**\n   * Clears an existing timeout if it has been set. This method is typically used to clean up resources when the component is destroyed.\n   * The timeout ID is reset to `undefined` after clearing to prevent unintended reuse.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @return {void} This method does not return a value.\n   */\n  private registerDestroyCleanup(): void {\n    this._destroyRef.onDestroy(() => {\n      // This code will run when the component is destroyed\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = undefined; // Optional, but good practice\n      }\n    });\n  }\n}\n","import { InjectionToken, TemplateRef, Type } from '@angular/core';\n\nexport interface ClipboardOptions {\n  buttonComponent?: Type<unknown>;\n  buttonTextCopy?: string;\n  buttonTextCopied?: string;\n  languageButton?: boolean;\n}\n\nexport interface ClipboardRenderOptions extends ClipboardOptions {\n  buttonTemplate?: TemplateRef<unknown>;\n}\n\nexport const CLIPBOARD_OPTIONS = new InjectionToken<ClipboardOptions>(\n  'CLIPBOARD_OPTIONS',\n);\n","/* eslint-disable */\nexport class KatexSpecificOptions {\n  /**\n   * If `true`, math will be rendered in display mode\n   * (math in display style and center math on page)\n   *\n   * If `false`, math will be rendered in inline mode\n   * @default false\n   */\n  displayMode?: boolean;\n  /**\n   * If `true`, KaTeX will throw a `ParseError` when\n   * it encounters an unsupported command or invalid LaTex\n   *\n   * If `false`, KaTeX will render unsupported commands as\n   * text, and render invalid LaTeX as its source code with\n   * hover text giving the error, in color given by errorColor\n   * @default true\n   */\n  throwOnError?: boolean;\n  /**\n   * A Color string given in format `#XXX` or `#XXXXXX`\n   */\n  errorColor?: string;\n  /**\n   * A collection of custom macros.\n   *\n   * See `src/macros.js` for its usage\n   */\n  macros?: any;\n  /**\n   * If `true`, `\\color` will work like LaTeX's `\\textcolor`\n   * and takes 2 arguments\n   *\n   * If `false`, `\\color` will work like LaTeX's `\\color`\n   * and takes 1 argument\n   *\n   * In both cases, `\\textcolor` works as in LaTeX\n   *\n   * @default false\n   */\n  colorIsTextColor?: boolean;\n  /**\n   * All user-specified sizes will be caped to `maxSize` ems\n   *\n   * If set to Infinity, users can make elements and space\n   * arbitrarily large\n   *\n   * @default Infinity\n   */\n  maxSize?: number;\n  /**\n   * Limit the number of macro expansions to specified number\n   *\n   * If set to `Infinity`, marco expander will try to fully expand\n   * as in LaTex\n   *\n   * @default 1000\n   */\n  maxExpand?: number;\n  /**\n   * Allowed protocols in `\\href`\n   *\n   * Use `_relative` to allow relative urls\n   *\n   * Use `*` to allow all protocols\n   */\n  allowedProtocols?: string[];\n  /**\n   * If `false` or `\"ignore\"`, allow features that make\n   * writing in LaTex convenient but not supported by LaTex\n   *\n   * If `true` or `\"error\"`, throw an error for such transgressions\n   *\n   * If `\"warn\"`, warn about behavior via `console.warn`\n   *\n   * @default \"warn\"\n   */\n  strict?: boolean | string | Function;\n}\n\nexport interface RenderMathInElementSpecificOptionsDelimiters {\n  /**\n   * A string which starts the math expression (i.e. the left delimiter)\n   */\n  left: string;\n  /**\n   * A string which ends the math expression (i.e. the right delimiter)\n   */\n  right: string;\n  /**\n   * A boolean of whether the math in the expression should be rendered in display mode or not\n   */\n  display: boolean;\n}\n\nexport interface RenderMathInElementSpecificOptions {\n  /**\n   * A list of delimiters to look for math\n   *\n   * @default [\n   *   {left: \"$$\", right: \"$$\", display: true},\n   *   {left: \"\\\\(\", right: \"\\\\)\", display: false},\n   *   {left: \"\\\\[\", right: \"\\\\]\", display: true}\n   * ]\n   */\n  delimiters?:\n    | ReadonlyArray<RenderMathInElementSpecificOptionsDelimiters>\n    | undefined;\n  /**\n   * A list of DOM node types to ignore when recursing through\n   *\n   * @default [\"script\", \"noscript\", \"style\", \"textarea\", \"pre\", \"code\"]\n   */\n  ignoredTags?: ReadonlyArray<keyof HTMLElementTagNameMap> | undefined;\n  /**\n   * A list of DOM node class names to ignore when recursing through\n   *\n   * @default []\n   */\n  ignoredClasses?: string[] | undefined;\n\n  /**\n   * A callback method returning a message and an error stack in case of an critical error during rendering\n   * @param msg Message generated by KaTeX\n   * @param err Caught error\n   *\n   * @default console.error\n   */\n  errorCallback?(msg: string, err: Error): void;\n}\n\n/**\n * renderMathInElement options contain KaTeX render options and renderMathInElement specific options\n */\nexport type KatexOptions = KatexSpecificOptions &\n  RenderMathInElementSpecificOptions;\n","import { InjectionToken } from '@angular/core';\nimport { MarkedExtension } from 'marked';\n\nexport const MARKED_EXTENSIONS = new InjectionToken<MarkedExtension>('MARKED_EXTENSIONS');\n","import { InjectionToken } from '@angular/core';\nimport { MarkedOptions } from 'marked';\n\nexport type { MarkedOptions } from 'marked';\n\nexport const MARKED_OPTIONS = new InjectionToken<MarkedOptions>(\n  'MARKED_OPTIONS',\n);\n","import { InjectionToken } from '@angular/core';\n\nexport const MERMAID_OPTIONS = new InjectionToken<MermaidAPI.MermaidConfig>('MERMAID_OPTIONS');\n\n/* eslint-disable */\nexport namespace MermaidAPI {\n  /**\n   * JavaScript function that returns a `FontConfig`.\n   *\n   * By default, these return the appropriate `*FontSize`, `*FontFamily`, `*FontWeight`\n   * values.\n   *\n   * For example, the font calculator called `boundaryFont` might be defined as:\n   *\n   * ```javascript\n   * boundaryFont: function () {\n   *   return {\n   *     fontFamily: this.boundaryFontFamily,\n   *     fontSize: this.boundaryFontSize,\n   *     fontWeight: this.boundaryFontWeight,\n   *   };\n   * }\n   * ```\n   *\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"FontCalculator\".\n   */\n  export type FontCalculator = () => Partial<FontConfig>;\n  /**\n   * Picks the color of the sankey diagram links, using the colors of the source and/or target of the links.\n   *\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"SankeyLinkColor\".\n   */\n  export type SankeyLinkColor = 'source' | 'target' | 'gradient';\n  /**\n   * Controls the alignment of the Sankey diagrams.\n   *\n   * See <https://github.com/d3/d3-sankey#alignments>.\n   *\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"SankeyNodeAlignment\".\n   */\n  export type SankeyNodeAlignment = 'left' | 'right' | 'center' | 'justify';\n  /**\n   * The font size to use\n   */\n  export type CSSFontSize = string | number;\n\n  export interface MermaidConfig {\n    /**\n     * Theme, the CSS style sheet.\n     * You may also use `themeCSS` to override this value.\n     *\n     */\n    theme?: 'default' | 'base' | 'dark' | 'forest' | 'neutral' | 'null';\n    themeVariables?: any;\n    themeCSS?: string;\n    /**\n     * Defines which main look to use for the diagram.\n     *\n     */\n    look?: 'classic' | 'handDrawn';\n    /**\n     * Defines the seed to be used when using handDrawn look. This is important for the automated tests as they will always find differences without the seed. The default value is 0 which gives a random seed.\n     *\n     */\n    handDrawnSeed?: number;\n    /**\n     * Defines which layout algorithm to use for rendering the diagram.\n     *\n     */\n    layout?: string;\n    /**\n     * The maximum allowed size of the users text diagram\n     */\n    maxTextSize?: number;\n    /**\n     * Defines the maximum number of edges that can be drawn in a graph.\n     *\n     */\n    maxEdges?: number;\n    elk?: {\n      /**\n       * Elk specific option that allows edges to share path where it convenient. It can make for pretty diagrams but can also make it harder to read the diagram.\n       *\n       */\n      mergeEdges?: boolean;\n      /**\n       * Elk specific option affecting how nodes are placed.\n       *\n       */\n      nodePlacementStrategy?: 'SIMPLE' | 'NETWORK_SIMPLEX' | 'LINEAR_SEGMENTS' | 'BRANDES_KOEPF';\n      /**\n       * This strategy decides how to find cycles in the graph and deciding which edges need adjustment to break loops.\n       *\n       */\n      cycleBreakingStrategy?:\n        | 'GREEDY'\n        | 'DEPTH_FIRST'\n        | 'INTERACTIVE'\n        | 'MODEL_ORDER'\n        | 'GREEDY_MODEL_ORDER';\n    };\n    darkMode?: boolean;\n    htmlLabels?: boolean;\n    /**\n     * Specifies the font to be used in the rendered diagrams.\n     * Can be any possible CSS `font-family`.\n     * See https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n     *\n     */\n    fontFamily?: string;\n    altFontFamily?: string;\n    /**\n     * This option decides the amount of logging to be used by mermaid.\n     *\n     */\n    logLevel?: 'trace' | 0 | 'debug' | 1 | 'info' | 2 | 'warn' | 3 | 'error' | 4 | 'fatal' | 5;\n    /**\n     * Level of trust for parsed diagram\n     */\n    securityLevel?: 'strict' | 'loose' | 'antiscript' | 'sandbox';\n    /**\n     * Dictates whether mermaid starts on Page load\n     */\n    startOnLoad?: boolean;\n    /**\n     * Controls whether or arrow markers in html code are absolute paths or anchors.\n     * This matters if you are using base tag settings.\n     *\n     */\n    arrowMarkerAbsolute?: boolean;\n    /**\n     * This option controls which `currentConfig` keys are considered secure and\n     * can only be changed via call to `mermaid.initialize`.\n     * This prevents malicious graph directives from overriding a site's default security.\n     *\n     */\n    secure?: string[];\n    /**\n     * This option specifies if Mermaid can expect the dependent to include KaTeX stylesheets for browsers\n     * without their own MathML implementation. If this option is disabled and MathML is not supported, the math\n     * equations are replaced with a warning. If this option is enabled and MathML is not supported, Mermaid will\n     * fall back to legacy rendering for KaTeX.\n     *\n     */\n    legacyMathML?: boolean;\n    /**\n     * This option forces Mermaid to rely on KaTeX's own stylesheet for rendering MathML. Due to differences between OS\n     * fonts and browser's MathML implementation, this option is recommended if consistent rendering is important.\n     * If set to true, ignores legacyMathML.\n     *\n     */\n    forceLegacyMathML?: boolean;\n    /**\n     * This option controls if the generated ids of nodes in the SVG are\n     * generated randomly or based on a seed.\n     * If set to `false`, the IDs are generated based on the current date and\n     * thus are not deterministic. This is the default behavior.\n     *\n     * This matters if your files are checked into source control e.g. git and\n     * should not change unless content is changed.\n     *\n     */\n    deterministicIds?: boolean;\n    /**\n     * This option is the optional seed for deterministic ids.\n     * If set to `undefined` but deterministicIds is `true`, a simple number iterator is used.\n     * You can set this attribute to base the seed on a static string.\n     *\n     */\n    deterministicIDSeed?: string;\n    flowchart?: FlowchartDiagramConfig;\n    sequence?: SequenceDiagramConfig;\n    gantt?: GanttDiagramConfig;\n    journey?: JourneyDiagramConfig;\n    timeline?: TimelineDiagramConfig;\n    class?: ClassDiagramConfig;\n    state?: StateDiagramConfig;\n    er?: ErDiagramConfig;\n    pie?: PieDiagramConfig;\n    quadrantChart?: QuadrantChartConfig;\n    xyChart?: XYChartConfig;\n    requirement?: RequirementDiagramConfig;\n    architecture?: ArchitectureDiagramConfig;\n    mindmap?: MindmapDiagramConfig;\n    kanban?: KanbanDiagramConfig;\n    gitGraph?: GitGraphDiagramConfig;\n    c4?: C4DiagramConfig;\n    sankey?: SankeyDiagramConfig;\n    packet?: PacketDiagramConfig;\n    block?: BlockDiagramConfig;\n    zenUml?: ZenUmlDiagramConfig;\n    wrap?: boolean;\n    fontSize?: number;\n    markdownAutoWrap?: boolean;\n    /**\n     * Suppresses inserting 'Syntax error' diagram in the DOM.\n     * This is useful when you want to control how to handle syntax errors in your application.\n     *\n     */\n    suppressErrorRendering?: boolean;\n  }\n\n  /**\n   * The object containing configurations specific for flowcharts\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"FlowchartDiagramConfig\".\n   */\n  export interface FlowchartDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    /**\n     * Defines a top/bottom margin for subgraph titles\n     *\n     */\n    subGraphTitleMargin?: {\n      top?: number;\n      bottom?: number;\n    };\n    arrowMarkerAbsolute?: boolean;\n    /**\n     * The amount of padding around the diagram as a whole so that embedded\n     * diagrams have margins, expressed in pixels.\n     *\n     */\n    diagramPadding?: number;\n    /**\n     * Flag for setting whether or not a html tag should be used for rendering labels on the edges.\n     *\n     */\n    htmlLabels?: boolean;\n    /**\n     * Defines the spacing between nodes on the same level\n     *\n     * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs,\n     * and the vertical spacing for LR as well as RL graphs.\n     *\n     */\n    nodeSpacing?: number;\n    /**\n     * Defines the spacing between nodes on different levels\n     *\n     * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs,\n     * and the vertical spacing for LR as well as RL graphs.\n     *\n     */\n    rankSpacing?: number;\n    /**\n     * Defines how mermaid renders curves for flowcharts.\n     *\n     */\n    curve?: 'basis' | 'linear' | 'cardinal';\n    /**\n     * Represents the padding between the labels and the shape\n     *\n     * **Only used in new experimental rendering.**\n     *\n     */\n    padding?: number;\n    /**\n     * Decides which rendering engine that is to be used for the rendering.\n     *\n     */\n    defaultRenderer?: 'dagre-d3' | 'dagre-wrapper' | 'elk';\n    /**\n     * Width of nodes where text is wrapped.\n     *\n     * When using markdown strings the text ius wrapped automatically, this\n     * value sets the max width of a text before it continues on a new line.\n     *\n     */\n    wrappingWidth?: number;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"BaseDiagramConfig\".\n   */\n  export interface BaseDiagramConfig {\n    useWidth?: number;\n    /**\n     * When this flag is set to `true`, the height and width is set to 100%\n     * and is then scaled with the available space.\n     * If set to `false`, the absolute space required is used.\n     *\n     */\n    useMaxWidth?: boolean;\n  }\n\n  /**\n   * The object containing configurations specific for sequence diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"SequenceDiagramConfig\".\n   */\n  export interface SequenceDiagramConfig extends BaseDiagramConfig {\n    arrowMarkerAbsolute?: boolean;\n    hideUnusedParticipants?: boolean;\n    /**\n     * Width of the activation rect\n     */\n    activationWidth?: number;\n    /**\n     * Margin to the right and left of the sequence diagram\n     */\n    diagramMarginX?: number;\n    /**\n     * Margin to the over and under the sequence diagram\n     */\n    diagramMarginY?: number;\n    /**\n     * Margin between actors\n     */\n    actorMargin?: number;\n    /**\n     * Width of actor boxes\n     */\n    width?: number;\n    /**\n     * Height of actor boxes\n     */\n    height?: number;\n    /**\n     * Margin around loop boxes\n     */\n    boxMargin?: number;\n    /**\n     * Margin around the text in loop/alt/opt boxes\n     */\n    boxTextMargin?: number;\n    /**\n     * Margin around notes\n     */\n    noteMargin?: number;\n    /**\n     * Space between messages.\n     */\n    messageMargin?: number;\n    /**\n     * Multiline message alignment\n     */\n    messageAlign?: 'left' | 'center' | 'right';\n    /**\n     * Mirror actors under diagram\n     *\n     */\n    mirrorActors?: boolean;\n    /**\n     * forces actor popup menus to always be visible (to support E2E testing).\n     *\n     */\n    forceMenus?: boolean;\n    /**\n     * Prolongs the edge of the diagram downwards.\n     *\n     * Depending on css styling this might need adjustment.\n     *\n     */\n    bottomMarginAdj?: number;\n    /**\n     * Curved Arrows become Right Angles\n     *\n     * This will display arrows that start and begin at the same node as\n     * right angles, rather than as curves.\n     *\n     */\n    rightAngles?: boolean;\n    /**\n     * This will show the node numbers\n     */\n    showSequenceNumbers?: boolean;\n    /**\n     * This sets the font size of the actor's description\n     */\n    actorFontSize?: string | number;\n    /**\n     * This sets the font family of the actor's description\n     */\n    actorFontFamily?: string;\n    /**\n     * This sets the font weight of the actor's description\n     */\n    actorFontWeight?: string | number;\n    /**\n     * This sets the font size of actor-attached notes\n     */\n    noteFontSize?: string | number;\n    /**\n     * This sets the font family of actor-attached notes\n     */\n    noteFontFamily?: string;\n    /**\n     * This sets the font weight of actor-attached notes\n     */\n    noteFontWeight?: string | number;\n    /**\n     * This sets the text alignment of actor-attached notes\n     */\n    noteAlign?: 'left' | 'center' | 'right';\n    /**\n     * This sets the font size of actor messages\n     */\n    messageFontSize?: string | number;\n    /**\n     * This sets the font family of actor messages\n     */\n    messageFontFamily?: string;\n    /**\n     * This sets the font weight of actor messages\n     */\n    messageFontWeight?: string | number;\n    /**\n     * This sets the auto-wrap state for the diagram\n     */\n    wrap?: boolean;\n    /**\n     * This sets the auto-wrap padding for the diagram (sides only)\n     */\n    wrapPadding?: number;\n    /**\n     * This sets the width of the loop-box (loop, alt, opt, par)\n     */\n    labelBoxWidth?: number;\n    /**\n     * This sets the height of the loop-box (loop, alt, opt, par)\n     */\n    labelBoxHeight?: number;\n    messageFont?: FontCalculator;\n    noteFont?: FontCalculator;\n    actorFont?: FontCalculator;\n  }\n\n  /**\n   * The object containing configurations specific for gantt diagrams\n   *\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"GanttDiagramConfig\".\n   */\n  export interface GanttDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    /**\n     * The height of the bars in the graph\n     */\n    barHeight?: number;\n    /**\n     * The margin between the different activities in the gantt diagram\n     */\n    barGap?: number;\n    /**\n     * Margin between title and gantt diagram and between axis and gantt diagram.\n     *\n     */\n    topPadding?: number;\n    /**\n     * The space allocated for the section name to the right of the activities\n     *\n     */\n    rightPadding?: number;\n    /**\n     * The space allocated for the section name to the left of the activities\n     *\n     */\n    leftPadding?: number;\n    /**\n     * Vertical starting position of the grid lines\n     */\n    gridLineStartPadding?: number;\n    /**\n     * Font size\n     */\n    fontSize?: number;\n    /**\n     * Font size for sections\n     */\n    sectionFontSize?: string | number;\n    /**\n     * The number of alternating section styles\n     */\n    numberSectionStyles?: number;\n    /**\n     * Date/time format of the axis\n     *\n     * This might need adjustment to match your locale and preferences.\n     *\n     */\n    axisFormat?: string;\n    /**\n     * axis ticks\n     *\n     * Pattern is:\n     *\n     * ```javascript\n     * /^([1-9][0-9]*)(millisecond|second|minute|hour|day|week|month)$/\n     * ```\n     *\n     */\n    tickInterval?: string;\n    /**\n     * When this flag is set, date labels will be added to the top of the chart\n     *\n     */\n    topAxis?: boolean;\n    /**\n     * Controls the display mode.\n     *\n     */\n    displayMode?: '' | 'compact';\n    /**\n     * On which day a week-based interval should start\n     *\n     */\n    weekday?: 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';\n  }\n\n  /**\n   * The object containing configurations specific for journey diagrams\n   *\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"JourneyDiagramConfig\".\n   */\n  export interface JourneyDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin to the right and left of the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginX?: number;\n    /**\n     * Margin to the over and under the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginY?: number;\n    /**\n     * Margin between actors\n     */\n    leftMargin?: number;\n    /**\n     * Width of actor boxes\n     */\n    width?: number;\n    /**\n     * Height of actor boxes\n     */\n    height?: number;\n    /**\n     * Margin around loop boxes\n     */\n    boxMargin?: number;\n    /**\n     * Margin around the text in loop/alt/opt boxes\n     */\n    boxTextMargin?: number;\n    /**\n     * Margin around notes\n     */\n    noteMargin?: number;\n    /**\n     * Space between messages.\n     */\n    messageMargin?: number;\n    /**\n     * Multiline message alignment\n     */\n    messageAlign?: 'left' | 'center' | 'right';\n    /**\n     * Prolongs the edge of the diagram downwards.\n     *\n     * Depending on css styling this might need adjustment.\n     *\n     */\n    bottomMarginAdj?: number;\n    /**\n     * Curved Arrows become Right Angles\n     *\n     * This will display arrows that start and begin at the same node as\n     * right angles, rather than as curves.\n     *\n     */\n    rightAngles?: boolean;\n    taskFontSize?: string | number;\n    taskFontFamily?: string;\n    taskMargin?: number;\n    /**\n     * Width of activation box\n     */\n    activationWidth?: number;\n    /**\n     * text placement as: tspan | fo | old only text as before\n     *\n     */\n    textPlacement?: string;\n    actorColours?: string[];\n    sectionFills?: string[];\n    sectionColours?: string[];\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"TimelineDiagramConfig\".\n   */\n  export interface TimelineDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin to the right and left of the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginX?: number;\n    /**\n     * Margin to the over and under the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginY?: number;\n    /**\n     * Margin between actors\n     */\n    leftMargin?: number;\n    /**\n     * Width of actor boxes\n     */\n    width?: number;\n    /**\n     * Height of actor boxes\n     */\n    height?: number;\n    padding?: number;\n    /**\n     * Margin around loop boxes\n     */\n    boxMargin?: number;\n    /**\n     * Margin around the text in loop/alt/opt boxes\n     */\n    boxTextMargin?: number;\n    /**\n     * Margin around notes\n     */\n    noteMargin?: number;\n    /**\n     * Space between messages.\n     */\n    messageMargin?: number;\n    /**\n     * Multiline message alignment\n     */\n    messageAlign?: 'left' | 'center' | 'right';\n    /**\n     * Prolongs the edge of the diagram downwards.\n     *\n     * Depending on css styling this might need adjustment.\n     *\n     */\n    bottomMarginAdj?: number;\n    /**\n     * Curved Arrows become Right Angles\n     *\n     * This will display arrows that start and begin at the same node as\n     * right angles, rather than as curves.\n     *\n     */\n    rightAngles?: boolean;\n    taskFontSize?: string | number;\n    taskFontFamily?: string;\n    taskMargin?: number;\n    /**\n     * Width of activation box\n     */\n    activationWidth?: number;\n    /**\n     * text placement as: tspan | fo | old only text as before\n     *\n     */\n    textPlacement?: string;\n    actorColours?: string[];\n    sectionFills?: string[];\n    sectionColours?: string[];\n    disableMulticolor?: boolean;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"ClassDiagramConfig\".\n   */\n  export interface ClassDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    /**\n     * Controls whether or arrow markers in html code are absolute paths or anchors.\n     * This matters if you are using base tag settings.\n     *\n     */\n    arrowMarkerAbsolute?: boolean;\n    dividerMargin?: number;\n    padding?: number;\n    textHeight?: number;\n    /**\n     * Decides which rendering engine that is to be used for the rendering.\n     *\n     */\n    defaultRenderer?: 'dagre-d3' | 'dagre-wrapper' | 'elk';\n    nodeSpacing?: number;\n    rankSpacing?: number;\n    /**\n     * The amount of padding around the diagram as a whole so that embedded\n     * diagrams have margins, expressed in pixels.\n     *\n     */\n    diagramPadding?: number;\n    htmlLabels?: boolean;\n    hideEmptyMembersBox?: boolean;\n  }\n\n  /**\n   * The object containing configurations specific for entity relationship diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"StateDiagramConfig\".\n   */\n  export interface StateDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    arrowMarkerAbsolute?: boolean;\n    dividerMargin?: number;\n    sizeUnit?: number;\n    padding?: number;\n    textHeight?: number;\n    titleShift?: number;\n    noteMargin?: number;\n    nodeSpacing?: number;\n    rankSpacing?: number;\n    forkWidth?: number;\n    forkHeight?: number;\n    miniPadding?: number;\n    /**\n     * Font size factor, this is used to guess the width of the edges labels\n     * before rendering by dagre layout.\n     * This might need updating if/when switching font\n     *\n     */\n    fontSizeFactor?: number;\n    fontSize?: number;\n    labelHeight?: number;\n    edgeLengthFactor?: string;\n    compositTitleSize?: number;\n    radius?: number;\n    /**\n     * Decides which rendering engine that is to be used for the rendering.\n     *\n     */\n    defaultRenderer?: 'dagre-d3' | 'dagre-wrapper' | 'elk';\n  }\n\n  /**\n   * The object containing configurations specific for entity relationship diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"ErDiagramConfig\".\n   */\n  export interface ErDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    /**\n     * The amount of padding around the diagram as a whole so that embedded\n     * diagrams have margins, expressed in pixels.\n     *\n     */\n    diagramPadding?: number;\n    /**\n     * Directional bias for layout of entities\n     */\n    layoutDirection?: 'TB' | 'BT' | 'LR' | 'RL';\n    /**\n     * The minimum width of an entity box. Expressed in pixels.\n     */\n    minEntityWidth?: number;\n    /**\n     * The minimum height of an entity box. Expressed in pixels.\n     */\n    minEntityHeight?: number;\n    /**\n     * The minimum internal padding between text in an entity box and the enclosing box borders.\n     * Expressed in pixels.\n     *\n     */\n    entityPadding?: number;\n    /**\n     * Stroke color of box edges and lines.\n     */\n    stroke?: string;\n    /**\n     * Fill color of entity boxes\n     */\n    fill?: string;\n    /**\n     * Font size (expressed as an integer representing a number of pixels)\n     */\n    fontSize?: number;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"PieDiagramConfig\".\n   */\n  export interface PieDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Axial position of slice's label from zero at the center to 1 at the outside edges.\n     *\n     */\n    textPosition?: number;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"QuadrantChartConfig\".\n   */\n  export interface QuadrantChartConfig extends BaseDiagramConfig {\n    /**\n     * Width of the chart\n     */\n    chartWidth?: number;\n    /**\n     * Height of the chart\n     */\n    chartHeight?: number;\n    /**\n     * Chart title top and bottom padding\n     */\n    titleFontSize?: number;\n    /**\n     * Padding around the quadrant square\n     */\n    titlePadding?: number;\n    /**\n     * quadrant title padding from top if the quadrant is rendered on top\n     */\n    quadrantPadding?: number;\n    /**\n     * Padding around x-axis labels\n     */\n    xAxisLabelPadding?: number;\n    /**\n     * Padding around y-axis labels\n     */\n    yAxisLabelPadding?: number;\n    /**\n     * x-axis label font size\n     */\n    xAxisLabelFontSize?: number;\n    /**\n     * y-axis label font size\n     */\n    yAxisLabelFontSize?: number;\n    /**\n     * quadrant title font size\n     */\n    quadrantLabelFontSize?: number;\n    /**\n     * quadrant title padding from top if the quadrant is rendered on top\n     */\n    quadrantTextTopPadding?: number;\n    /**\n     * padding between point and point label\n     */\n    pointTextPadding?: number;\n    /**\n     * point title font size\n     */\n    pointLabelFontSize?: number;\n    /**\n     * radius of the point to be drawn\n     */\n    pointRadius?: number;\n    /**\n     * position of x-axis labels\n     */\n    xAxisPosition?: 'top' | 'bottom';\n    /**\n     * position of y-axis labels\n     */\n    yAxisPosition?: 'left' | 'right';\n    /**\n     * stroke width of edges of the box that are inside the quadrant\n     */\n    quadrantInternalBorderStrokeWidth?: number;\n    /**\n     * stroke width of edges of the box that are outside the quadrant\n     */\n    quadrantExternalBorderStrokeWidth?: number;\n  }\n\n  /**\n   * This object contains configuration specific to XYCharts\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"XYChartConfig\".\n   */\n  export interface XYChartConfig extends BaseDiagramConfig {\n    /**\n     * width of the chart\n     */\n    width?: number;\n    /**\n     * height of the chart\n     */\n    height?: number;\n    /**\n     * Font size of the chart title\n     */\n    titleFontSize?: number;\n    /**\n     * Top and bottom space from the chart title\n     */\n    titlePadding?: number;\n    /**\n     * Should show the chart title\n     */\n    showTitle?: boolean;\n    xAxis?: XYChartAxisConfig;\n    yAxis?: XYChartAxisConfig;\n    /**\n     * How to plot will be drawn horizontal or vertical\n     */\n    chartOrientation?: 'vertical' | 'horizontal';\n    /**\n     * Minimum percent of space plots of the chart will take\n     */\n    plotReservedSpacePercent?: number;\n  }\n\n  /**\n   * This object contains configuration for XYChart axis config\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"XYChartAxisConfig\".\n   */\n  export interface XYChartAxisConfig {\n    /**\n     * Should show the axis labels (tick text)\n     */\n    showLabel?: boolean;\n    /**\n     * font size of the axis labels (tick text)\n     */\n    labelFontSize?: number;\n    /**\n     * top and bottom space from axis label (tick text)\n     */\n    labelPadding?: number;\n    /**\n     * Should show the axis title\n     */\n    showTitle?: boolean;\n    /**\n     * font size of the axis title\n     */\n    titleFontSize?: number;\n    /**\n     * top and bottom space from axis title\n     */\n    titlePadding?: number;\n    /**\n     * Should show the axis tick lines\n     */\n    showTick?: boolean;\n    /**\n     * length of the axis tick lines\n     */\n    tickLength?: number;\n    /**\n     * width of the axis tick lines\n     */\n    tickWidth?: number;\n    /**\n     * Show line across the axis\n     */\n    showAxisLine?: boolean;\n    /**\n     * Width of the axis line\n     */\n    axisLineWidth?: number;\n  }\n\n  /**\n   * The object containing configurations specific for req diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"RequirementDiagramConfig\".\n   */\n  export interface RequirementDiagramConfig extends BaseDiagramConfig {\n    rect_fill?: string;\n    text_color?: string;\n    rect_border_size?: string;\n    rect_border_color?: string;\n    rect_min_width?: number;\n    rect_min_height?: number;\n    fontSize?: number;\n    rect_padding?: number;\n    line_height?: number;\n  }\n\n  /**\n   * The object containing configurations specific for architecture diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"ArchitectureDiagramConfig\".\n   */\n  export interface ArchitectureDiagramConfig extends BaseDiagramConfig {\n    padding?: number;\n    iconSize?: number;\n    fontSize?: number;\n  }\n\n  /**\n   * The object containing configurations specific for mindmap diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"MindmapDiagramConfig\".\n   */\n  export interface MindmapDiagramConfig extends BaseDiagramConfig {\n    padding?: number;\n    maxNodeWidth?: number;\n  }\n\n  /**\n   * The object containing configurations specific for kanban diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"KanbanDiagramConfig\".\n   */\n  export interface KanbanDiagramConfig extends BaseDiagramConfig {\n    padding?: number;\n    sectionWidth?: number;\n    ticketBaseUrl?: string;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"GitGraphDiagramConfig\".\n   */\n  export interface GitGraphDiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin top for the text over the diagram\n     */\n    titleTopMargin?: number;\n    diagramPadding?: number;\n    nodeLabel?: NodeLabel;\n    mainBranchName?: string;\n    mainBranchOrder?: number;\n    showCommitLabel?: boolean;\n    showBranches?: boolean;\n    rotateCommitLabel?: boolean;\n    parallelCommits?: boolean;\n    /**\n     * Controls whether or arrow markers in html code are absolute paths or anchors.\n     * This matters if you are using base tag settings.\n     *\n     */\n    arrowMarkerAbsolute?: boolean;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"NodeLabel\".\n   */\n  export interface NodeLabel {\n    width?: number;\n    height?: number;\n    x?: number;\n    y?: number;\n  }\n\n  /**\n   * The object containing configurations specific for c4 diagrams\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"C4DiagramConfig\".\n   */\n  export interface C4DiagramConfig extends BaseDiagramConfig {\n    /**\n     * Margin to the right and left of the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginX?: number;\n    /**\n     * Margin to the over and under the c4 diagram, must be a positive value.\n     *\n     */\n    diagramMarginY?: number;\n    /**\n     * Margin between shapes\n     */\n    c4ShapeMargin?: number;\n    /**\n     * Padding between shapes\n     */\n    c4ShapePadding?: number;\n    /**\n     * Width of person boxes\n     */\n    width?: number;\n    /**\n     * Height of person boxes\n     */\n    height?: number;\n    /**\n     * Margin around boxes\n     */\n    boxMargin?: number;\n    /**\n     * How many shapes to place in each row.\n     */\n    c4ShapeInRow?: number;\n    nextLinePaddingX?: number;\n    /**\n     * How many boundaries to place in each row.\n     */\n    c4BoundaryInRow?: number;\n    /**\n     * This sets the font size of Person shape for the diagram\n     */\n    personFontSize?: string | number;\n    /**\n     * This sets the font weight of Person shape for the diagram\n     */\n    personFontFamily?: string;\n    /**\n     * This sets the font weight of Person shape for the diagram\n     */\n    personFontWeight?: string | number;\n    /**\n     * This sets the font size of External Person shape for the diagram\n     */\n    external_personFontSize?: string | number;\n    /**\n     * This sets the font family of External Person shape for the diagram\n     */\n    external_personFontFamily?: string;\n    /**\n     * This sets the font weight of External Person shape for the diagram\n     */\n    external_personFontWeight?: string | number;\n    /**\n     * This sets the font size of System shape for the diagram\n     */\n    systemFontSize?: string | number;\n    /**\n     * This sets the font family of System shape for the diagram\n     */\n    systemFontFamily?: string;\n    /**\n     * This sets the font weight of System shape for the diagram\n     */\n    systemFontWeight?: string | number;\n    /**\n     * This sets the font size of External System shape for the diagram\n     */\n    external_systemFontSize?: string | number;\n    /**\n     * This sets the font family of External System shape for the diagram\n     */\n    external_systemFontFamily?: string;\n    /**\n     * This sets the font weight of External System shape for the diagram\n     */\n    external_systemFontWeight?: string | number;\n    /**\n     * This sets the font size of System DB shape for the diagram\n     */\n    system_dbFontSize?: string | number;\n    /**\n     * This sets the font family of System DB shape for the diagram\n     */\n    system_dbFontFamily?: string;\n    /**\n     * This sets the font weight of System DB shape for the diagram\n     */\n    system_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of External System DB shape for the diagram\n     */\n    external_system_dbFontSize?: string | number;\n    /**\n     * This sets the font family of External System DB shape for the diagram\n     */\n    external_system_dbFontFamily?: string;\n    /**\n     * This sets the font weight of External System DB shape for the diagram\n     */\n    external_system_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of System Queue shape for the diagram\n     */\n    system_queueFontSize?: string | number;\n    /**\n     * This sets the font family of System Queue shape for the diagram\n     */\n    system_queueFontFamily?: string;\n    /**\n     * This sets the font weight of System Queue shape for the diagram\n     */\n    system_queueFontWeight?: string | number;\n    /**\n     * This sets the font size of External System Queue shape for the diagram\n     */\n    external_system_queueFontSize?: string | number;\n    /**\n     * This sets the font family of External System Queue shape for the diagram\n     */\n    external_system_queueFontFamily?: string;\n    /**\n     * This sets the font weight of External System Queue shape for the diagram\n     */\n    external_system_queueFontWeight?: string | number;\n    /**\n     * This sets the font size of Boundary shape for the diagram\n     */\n    boundaryFontSize?: string | number;\n    /**\n     * This sets the font family of Boundary shape for the diagram\n     */\n    boundaryFontFamily?: string;\n    /**\n     * This sets the font weight of Boundary shape for the diagram\n     */\n    boundaryFontWeight?: string | number;\n    /**\n     * This sets the font size of Message shape for the diagram\n     */\n    messageFontSize?: string | number;\n    /**\n     * This sets the font family of Message shape for the diagram\n     */\n    messageFontFamily?: string;\n    /**\n     * This sets the font weight of Message shape for the diagram\n     */\n    messageFontWeight?: string | number;\n    /**\n     * This sets the font size of Container shape for the diagram\n     */\n    containerFontSize?: string | number;\n    /**\n     * This sets the font family of Container shape for the diagram\n     */\n    containerFontFamily?: string;\n    /**\n     * This sets the font weight of Container shape for the diagram\n     */\n    containerFontWeight?: string | number;\n    /**\n     * This sets the font size of External Container shape for the diagram\n     */\n    external_containerFontSize?: string | number;\n    /**\n     * This sets the font family of External Container shape for the diagram\n     */\n    external_containerFontFamily?: string;\n    /**\n     * This sets the font weight of External Container shape for the diagram\n     */\n    external_containerFontWeight?: string | number;\n    /**\n     * This sets the font size of Container DB shape for the diagram\n     */\n    container_dbFontSize?: string | number;\n    /**\n     * This sets the font family of Container DB shape for the diagram\n     */\n    container_dbFontFamily?: string;\n    /**\n     * This sets the font weight of Container DB shape for the diagram\n     */\n    container_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of External Container DB shape for the diagram\n     */\n    external_container_dbFontSize?: string | number;\n    /**\n     * This sets the font family of External Container DB shape for the diagram\n     */\n    external_container_dbFontFamily?: string;\n    /**\n     * This sets the font weight of External Container DB shape for the diagram\n     */\n    external_container_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of Container Queue shape for the diagram\n     */\n    container_queueFontSize?: string | number;\n    /**\n     * This sets the font family of Container Queue shape for the diagram\n     */\n    container_queueFontFamily?: string;\n    /**\n     * This sets the font weight of Container Queue shape for the diagram\n     */\n    container_queueFontWeight?: string | number;\n    /**\n     * This sets the font size of External Container Queue shape for the diagram\n     */\n    external_container_queueFontSize?: string | number;\n    /**\n     * This sets the font family of External Container Queue shape for the diagram\n     */\n    external_container_queueFontFamily?: string;\n    /**\n     * This sets the font weight of External Container Queue shape for the diagram\n     */\n    external_container_queueFontWeight?: string | number;\n    /**\n     * This sets the font size of Component shape for the diagram\n     */\n    componentFontSize?: string | number;\n    /**\n     * This sets the font family of Component shape for the diagram\n     */\n    componentFontFamily?: string;\n    /**\n     * This sets the font weight of Component shape for the diagram\n     */\n    componentFontWeight?: string | number;\n    /**\n     * This sets the font size of External Component shape for the diagram\n     */\n    external_componentFontSize?: string | number;\n    /**\n     * This sets the font family of External Component shape for the diagram\n     */\n    external_componentFontFamily?: string;\n    /**\n     * This sets the font weight of External Component shape for the diagram\n     */\n    external_componentFontWeight?: string | number;\n    /**\n     * This sets the font size of Component DB shape for the diagram\n     */\n    component_dbFontSize?: string | number;\n    /**\n     * This sets the font family of Component DB shape for the diagram\n     */\n    component_dbFontFamily?: string;\n    /**\n     * This sets the font weight of Component DB shape for the diagram\n     */\n    component_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of External Component DB shape for the diagram\n     */\n    external_component_dbFontSize?: string | number;\n    /**\n     * This sets the font family of External Component DB shape for the diagram\n     */\n    external_component_dbFontFamily?: string;\n    /**\n     * This sets the font weight of External Component DB shape for the diagram\n     */\n    external_component_dbFontWeight?: string | number;\n    /**\n     * This sets the font size of Component Queue shape for the diagram\n     */\n    component_queueFontSize?: string | number;\n    /**\n     * This sets the font family of Component Queue shape for the diagram\n     */\n    component_queueFontFamily?: string;\n    /**\n     * This sets the font weight of Component Queue shape for the diagram\n     */\n    component_queueFontWeight?: string | number;\n    /**\n     * This sets the font size of External Component Queue shape for the diagram\n     */\n    external_component_queueFontSize?: string | number;\n    /**\n     * This sets the font family of External Component Queue shape for the diagram\n     */\n    external_component_queueFontFamily?: string;\n    /**\n     * This sets the font weight of External Component Queue shape for the diagram\n     */\n    external_component_queueFontWeight?: string | number;\n    /**\n     * This sets the auto-wrap state for the diagram\n     */\n    wrap?: boolean;\n    /**\n     * This sets the auto-wrap padding for the diagram (sides only)\n     */\n    wrapPadding?: number;\n    person_bg_color?: string;\n    person_border_color?: string;\n    external_person_bg_color?: string;\n    external_person_border_color?: string;\n    system_bg_color?: string;\n    system_border_color?: string;\n    system_db_bg_color?: string;\n    system_db_border_color?: string;\n    system_queue_bg_color?: string;\n    system_queue_border_color?: string;\n    external_system_bg_color?: string;\n    external_system_border_color?: string;\n    external_system_db_bg_color?: string;\n    external_system_db_border_color?: string;\n    external_system_queue_bg_color?: string;\n    external_system_queue_border_color?: string;\n    container_bg_color?: string;\n    container_border_color?: string;\n    container_db_bg_color?: string;\n    container_db_border_color?: string;\n    container_queue_bg_color?: string;\n    container_queue_border_color?: string;\n    external_container_bg_color?: string;\n    external_container_border_color?: string;\n    external_container_db_bg_color?: string;\n    external_container_db_border_color?: string;\n    external_container_queue_bg_color?: string;\n    external_container_queue_border_color?: string;\n    component_bg_color?: string;\n    component_border_color?: string;\n    component_db_bg_color?: string;\n    component_db_border_color?: string;\n    component_queue_bg_color?: string;\n    component_queue_border_color?: string;\n    external_component_bg_color?: string;\n    external_component_border_color?: string;\n    external_component_db_bg_color?: string;\n    external_component_db_border_color?: string;\n    external_component_queue_bg_color?: string;\n    external_component_queue_border_color?: string;\n    personFont?: FontCalculator;\n    external_personFont?: FontCalculator;\n    systemFont?: FontCalculator;\n    external_systemFont?: FontCalculator;\n    system_dbFont?: FontCalculator;\n    external_system_dbFont?: FontCalculator;\n    system_queueFont?: FontCalculator;\n    external_system_queueFont?: FontCalculator;\n    containerFont?: FontCalculator;\n    external_containerFont?: FontCalculator;\n    container_dbFont?: FontCalculator;\n    external_container_dbFont?: FontCalculator;\n    container_queueFont?: FontCalculator;\n    external_container_queueFont?: FontCalculator;\n    componentFont?: FontCalculator;\n    external_componentFont?: FontCalculator;\n    component_dbFont?: FontCalculator;\n    external_component_dbFont?: FontCalculator;\n    component_queueFont?: FontCalculator;\n    external_component_queueFont?: FontCalculator;\n    boundaryFont?: FontCalculator;\n    messageFont?: FontCalculator;\n  }\n\n  /**\n   * The object containing configurations specific for sankey diagrams.\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"SankeyDiagramConfig\".\n   */\n  export interface SankeyDiagramConfig extends BaseDiagramConfig {\n    width?: number;\n    height?: number;\n    /**\n     * The color of the links in the sankey diagram.\n     *\n     */\n    linkColor?: SankeyLinkColor | string;\n    nodeAlignment?: SankeyNodeAlignment;\n    useMaxWidth?: boolean;\n    /**\n     * Toggle to display or hide values along with title.\n     *\n     */\n    showValues?: boolean;\n    /**\n     * The prefix to use for values\n     *\n     */\n    prefix?: string;\n    /**\n     * The suffix to use for values\n     *\n     */\n    suffix?: string;\n  }\n\n  /**\n   * The object containing configurations specific for packet diagrams.\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"PacketDiagramConfig\".\n   */\n  export interface PacketDiagramConfig extends BaseDiagramConfig {\n    /**\n     * The height of each row in the packet diagram.\n     */\n    rowHeight?: number;\n    /**\n     * The width of each bit in the packet diagram.\n     */\n    bitWidth?: number;\n    /**\n     * The number of bits to display per row.\n     */\n    bitsPerRow?: number;\n    /**\n     * Toggle to display or hide bit numbers.\n     */\n    showBits?: boolean;\n    /**\n     * The horizontal padding between the blocks in a row.\n     */\n    paddingX?: number;\n    /**\n     * The vertical padding between the rows.\n     */\n    paddingY?: number;\n  }\n\n  /**\n   * The object containing configurations specific for block diagrams.\n   *\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"BlockDiagramConfig\".\n   */\n  export interface BlockDiagramConfig extends BaseDiagramConfig {\n    padding?: number;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"FontConfig\".\n   */\n  export interface FontConfig {\n    fontSize?: CSSFontSize;\n    /**\n     * The CSS [`font-family`](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) to use.\n     */\n    fontFamily?: string;\n    /**\n     * The font weight to use.\n     */\n    fontWeight?: string | number;\n  }\n\n  /**\n   * Optional runtime configs.\n   */\n  export interface RunOptions {\n    /**\n     * The query selector to use when finding elements to render. Default: `\".mermaid\"`.\n     */\n    querySelector?: string;\n    /**\n     * The nodes to render. If this is set, `querySelector` will be ignored.\n     */\n    nodes?: ArrayLike<HTMLElement>;\n    /**\n     * A callback to call after each diagram is rendered.\n     */\n    postRenderCallback?: (id: string) => unknown;\n    /**\n     * If `true`, errors will be logged to the console, but not thrown. Default: `false`\n     */\n    suppressErrors?: boolean;\n  }\n\n  /**\n   * This interface was referenced by `MermaidConfig`'s JSON-Schema\n   * via the `definition` \"ZenUMLConfig\".\n   */\n  export interface ZenUmlDiagramConfig extends BaseDiagramConfig {\n    padding?: number;\n    fontSize?: number;\n    font?: FontCalculator;\n  }\n}\n","export enum PrismPlugin {\n  CommandLine = 'command-line',\n  LineHighlight = 'line-highlight',\n  LineNumbers = 'line-numbers',\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  EmbeddedViewRef,\n  inject,\n  Injectable,\n  InjectionToken,\n  PLATFORM_ID,\n  SecurityContext,\n  TemplateRef,\n  Type,\n  ViewContainerRef,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { marked, MarkedExtension, Renderer } from 'marked';\nimport { Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ClipboardButtonComponent } from '../clipboard-button/clipboard-button.component';\nimport { CLIPBOARD_OPTIONS, ClipboardOptions, ClipboardRenderOptions } from '../clipboard-button/clipboard-options';\nimport { KatexOptions } from '../configuration/katex-options';\nimport { MARKED_EXTENSIONS } from '../configuration/marked-extensions';\nimport { MARKED_OPTIONS, MarkedOptions } from '../configuration/marked-options';\nimport { MarkedRenderer, MarkedToken } from '../configuration/marked-renderer';\nimport { MERMAID_OPTIONS, MermaidAPI } from '../configuration/mermaid-options';\n\n//  * clipboard\ndeclare let ClipboardJS: {\n  new(selector: string | Element | NodeListOf<Element>, options?: {\n    text?: (elem: Element) => string\n  }): typeof ClipboardJS;\n  destroy(): void;\n};\n\n// * emoji\ndeclare let joypixels: {\n  shortnameToUnicode(input: string): string;\n};\n\n// * katex\ndeclare let katex: unknown;\n\ndeclare function renderMathInElement(elem: HTMLElement, options?: KatexOptions): void;\n\n// * mermaid\ndeclare let mermaid: {\n  initialize: (options: MermaidAPI.MermaidConfig) => void;\n  run: (runOptions: MermaidAPI.RunOptions) => void;\n};\n\n// * prism\ndeclare let Prism: {\n  highlightAllUnder: (element: Element | Document) => void;\n};\n\nexport const ERROR_JOYPIXELS_NOT_LOADED = '[ngx-markdown] Emoji-Toolkit files required. See README for more information';\nexport const ERROR_KATEX_NOT_LOADED = '[ngx-markdown] KaTeX files required. See README for more information';\nexport const ERROR_MERMAID_NOT_LOADED = '[ngx-markdown] Mermaid files required. See README for more information';\nexport const ERROR_CLIPBOARD_NOT_LOADED = '[ngx-markdown] Clipboard files required. See README for more information';\nexport const ERROR_CLIPBOARD_VIEW_CONTAINER_REQUIRED = '[ngx-markdown] viewContainerRef parameter required for clipboard';\nexport const ERROR_SRC_WITHOUT_HTTP_CLIENT = '[ngx-markdown] HttpClient required for src attribute. See README for more information';\n\nexport const SECURITY_CONTEXT = new InjectionToken<SecurityContext>('SECURITY_CONTEXT');\n\nexport interface ParseOptions {\n  decodeHtml?: boolean;\n  inline?: boolean;\n  emoji?: boolean;\n  mermaid?: boolean;\n  markedOptions?: MarkedOptions;\n  disableSanitizer?: boolean;\n}\n\nexport interface RenderOptions {\n  clipboard?: boolean;\n  clipboardOptions?: ClipboardRenderOptions;\n  katex?: boolean;\n  katexOptions?: KatexOptions;\n  mermaid?: boolean;\n  mermaidOptions?: MermaidAPI.MermaidConfig;\n}\n\nexport class ExtendedRenderer extends Renderer {\n  ɵNgxMarkdownRendererExtendedForExtensions = false;\n  ɵNgxMarkdownRendererExtendedForMermaid = false;\n}\n\n@Injectable({\n  providedIn: 'root', // Make the service a singleton and tree-shakable\n})\nexport class MarkdownService {\n  // * == SERVICE INJECTIONS ==\n  private readonly _clipboardOptions = inject<ClipboardOptions>(CLIPBOARD_OPTIONS, { optional: true });\n  private readonly _extensions = inject(MARKED_EXTENSIONS, { optional: true }) as MarkedExtension[];\n  private readonly _mermaidOptions = inject<MermaidAPI.MermaidConfig>(MERMAID_OPTIONS, { optional: true });\n  private readonly _platform = inject(PLATFORM_ID);\n  private readonly _securityContext = inject<SecurityContext>(SECURITY_CONTEXT);\n  private readonly _http = inject(HttpClient, { optional: true });\n  private readonly _sanitizer = inject(DomSanitizer);\n  private readonly _userMarkedOptions: MarkedOptions | null = inject<MarkedOptions>(MARKED_OPTIONS, { optional: true });\n\n  // * == DEFAULT OPTIONS ==\n  private readonly DEFAULT_MARKED_OPTIONS: MarkedOptions = { renderer: new MarkedRenderer() };\n  private readonly DEFAULT_KATEX_OPTIONS: KatexOptions = {\n    delimiters: [\n      { left: '$$', right: '$$', display: true },\n      { left: '$', right: '$', display: false },\n      { left: '\\\\(', right: '\\\\)', display: false },\n      { left: '\\\\[', right: '\\\\]', display: true },\n      { left: '\\\\begin{align}', right: '\\\\end{align}', display: true },\n      { left: '\\\\begin{align*}', right: '\\\\end{align*}', display: true },\n      { left: '\\\\begin{aligned}', right: '\\\\end{aligned}', display: true },\n      { left: '\\\\begin{alignat}', right: '\\\\end{alignat}', display: true },\n      { left: '\\\\begin{alignat*}', right: '\\\\end{alignat*}', display: true },\n      { left: '\\\\begin{alignedat}', right: '\\\\end{alignedat}', display: true },\n      { left: '\\\\begin{array}', right: '\\\\end{array}', display: true },\n      { left: '\\\\begin{bmatrix}', right: '\\\\end{bmatrix}', display: true },\n      { left: '\\\\begin{cases}', right: '\\\\end{cases}', display: true },\n      { left: '\\\\begin{CD}', right: '\\\\end{CD}', display: true },\n      { left: '\\\\begin{equation}', right: '\\\\end{equation}', display: true },\n      { left: '\\\\begin{gather}', right: '\\\\end{gather}', display: true },\n      { left: '\\\\begin{matrix}', right: '\\\\end{matrix}', display: true },\n      { left: '\\\\begin{pmatrix}', right: '\\\\end{pmatrix}', display: true },\n      { left: '\\\\begin{rcases}', right: '\\\\end{rcases}', display: true },\n      { left: '\\\\begin{smallmatrix}', right: '\\\\end{smallmatrix}', display: true },\n      { left: '\\\\begin{vmatrix}', right: '\\\\end{vmatrix}', display: true },\n      { left: '\\\\begin{Vmatrix}', right: '\\\\end{Vmatrix}', display: true },\n    ],\n  };\n  private readonly DEFAULT_MERMAID_OPTIONS: MermaidAPI.MermaidConfig = { startOnLoad: false };\n  private readonly DEFAULT_CLIPBOARD_OPTIONS: ClipboardOptions = { buttonComponent: undefined };\n  private readonly DEFAULT_PARSE_OPTIONS: ParseOptions = {\n    decodeHtml: false,\n    inline: false,\n    emoji: false,\n    mermaid: false,\n    markedOptions: undefined,\n    disableSanitizer: false,\n  };\n  private readonly DEFAULT_RENDER_OPTIONS: RenderOptions = {\n    clipboard: false,\n    clipboardOptions: undefined,\n    katex: false,\n    katexOptions: undefined,\n    mermaid: false,\n    mermaidOptions: undefined,\n  };\n\n  private _options: MarkedOptions;\n  private readonly _reload$ = new Subject<void>();\n  readonly reload$ = this._reload$.asObservable();\n\n  get options(): MarkedOptions {\n    return this._options;\n  }\n\n  set options(value: MarkedOptions) {\n    this._options = { ...this.DEFAULT_MARKED_OPTIONS, ...value };\n  }\n\n  get renderer(): MarkedRenderer {\n    // Ensure the renderer always exists, falling back to a new instance if needed\n    if (!this.options.renderer) this.options.renderer = new MarkedRenderer();\n    return this.options.renderer;\n  }\n\n  set renderer(value: MarkedRenderer) {\n    this.options.renderer = value;\n  }\n\n  constructor() {\n    this._options = { ...this.DEFAULT_MARKED_OPTIONS, ...this._userMarkedOptions };\n  }\n\n  /**\n   * Parses a Markdown string into HTML.\n   * @param markdown The Markdown string to parse.\n   * @param parseOptions Optional configuration for the parsing process.\n   * @returns The parsed HTML string or a Promise of a string if extensions are asynchronous.\n   */\n  parse(markdown: string, parseOptions: ParseOptions = this.DEFAULT_PARSE_OPTIONS): string | Promise<string> {\n    const {\n      decodeHtml,\n      inline,\n      emoji,\n      mermaid,\n      disableSanitizer,\n      markedOptions: userMarkedOptions,\n    } = parseOptions;\n\n    const markedOptions = { ...this.options, ...userMarkedOptions };\n    const renderer = markedOptions.renderer || this.renderer;\n\n    if (this._extensions) this.renderer = this.extendRenderer(renderer, 'extensions');\n    if (mermaid) this.renderer = this.extendRenderer(renderer, 'mermaid');\n\n    const trimmed = this.trimIndentation(markdown);\n    const decoded = decodeHtml ? this.decodeHtml(trimmed) : trimmed;\n    const emojified = emoji ? this.parseEmoji(decoded) : decoded;\n\n    const markedOutput = this.parseMarked(emojified, markedOptions, inline);\n\n    if (markedOutput instanceof Promise) {\n      return markedOutput.then(output => this.sanitizeOutput(output, disableSanitizer));\n    }\n\n    return this.sanitizeOutput(markedOutput, disableSanitizer);\n  }\n\n  /**\n   * Parses an inline Markdown string into HTML.\n   * @param markdown The inline Markdown string to parse.\n   * @param options Optional Marked options.\n   * @returns The parsed inline HTML string or a Promise of a string.\n   */\n  parseInline(markdown: string, options?: MarkedOptions | null): string | Promise<string> {\n    return marked.parseInline(markdown, options);\n  }\n\n  /**\n   * Renders additional features (clipboard, KaTeX, Mermaid) within an HTML element.\n   * @param element The HTML element where features should be rendered.\n   * @param options Optional rendering options.\n   * @param viewContainerRef Optional `ViewContainerRef` for dynamic component creation (required for clipboard button).\n   */\n  render(element: HTMLElement, options: RenderOptions = this.DEFAULT_RENDER_OPTIONS, viewContainerRef?: ViewContainerRef): void {\n    const {\n      clipboard,\n      clipboardOptions,\n      katex,\n      katexOptions,\n      mermaid,\n      mermaidOptions,\n    } = options;\n\n    if (katex) this.renderKatex(element, { ...this.DEFAULT_KATEX_OPTIONS, ...katexOptions });\n    if (mermaid) this.renderMermaid(element, { ...this.DEFAULT_MERMAID_OPTIONS, ...this._mermaidOptions, ...mermaidOptions });\n    if (clipboard) this.renderClipboard(element, viewContainerRef, { ...this.DEFAULT_CLIPBOARD_OPTIONS, ...this._clipboardOptions, ...clipboardOptions });\n\n    this.highlight(element);\n  }\n\n  /**\n   * Triggers a reload of Markdown content in components using this service.\n   */\n  reload(): void {\n    this._reload$.next();\n  }\n\n  /**\n   * Fetches Markdown content from a given URL or file path.\n   * Automatically adds a language fence if the extension is not `.md`.\n   * @param src The URL or file path to the Markdown source.\n   * @returns An `Observable` of the Markdown content as a string.\n   * @throws Error if `HttpClient` is not available.\n   */\n  getSource(src: string): Observable<string> {\n    if (!this._http) throw new Error(ERROR_SRC_WITHOUT_HTTP_CLIENT);\n\n    return this._http.get(src, { responseType: 'text' }).pipe(map(markdown => this.handleExtension(src, markdown)));\n  }\n\n  /**\n   * Highlights code blocks within a specified HTML element using Prism.js.\n   * @param element The HTML element containing the code blocks to highlight. Defaults to `document`.\n   */\n  highlight(element?: Element | Document): void {\n    if (!isPlatformBrowser(this._platform)) return;\n    if (typeof Prism === 'undefined' || typeof Prism.highlightAllUnder === 'undefined') {\n      console.warn('Prism.js not loaded. Code highlighting will not be applied.');\n      return;\n    }\n\n    const targetElement = element || document;\n\n    const noLanguageElements = targetElement.querySelectorAll('pre code:not([class*=\"language-\"])');\n    noLanguageElements.forEach(x => x.classList.add('language-none'));\n    Prism.highlightAllUnder(targetElement);\n  }\n\n  /**\n   * Decodes HTML entities in a given HTML string.\n   * @param html The HTML string to decode.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The HTML string with decoded entities.\n   */\n  private decodeHtml(html: string): string {\n    if (!isPlatformBrowser(this._platform)) return html;\n\n    const textarea = document.createElement('textarea');\n    textarea.innerHTML = html;\n    return textarea.value;\n  }\n\n  /**\n   * Extends the Marked.js renderer with custom functionalities like extensions or Mermaid handling.\n   * Prevents re-extension by checking internal flags on the renderer instance.\n   * @param renderer The Marked.js renderer instance to extend.\n   * @param type The type of extension ('extensions' or 'mermaid').\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The extended renderer instance.\n   */\n  private extendRenderer(renderer: Renderer, type: 'extensions' | 'mermaid'): Renderer {\n    const extendedRenderer = renderer as ExtendedRenderer;\n    const flag = type === 'extensions' ? 'ɵNgxMarkdownRendererExtendedForExtensions' : 'ɵNgxMarkdownRendererExtendedForMermaid';\n\n    if (extendedRenderer[flag]) return renderer;\n\n    if (type === 'extensions' && this._extensions?.length > 0) marked.use(...this._extensions);\n\n    if (type === 'mermaid') {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const defaultCode = renderer.code;\n\n      renderer.code = (codeToken: MarkedToken.Code) => {\n        if (codeToken.lang === 'mermaid') {\n          return `<div class=\"mermaid\">${ codeToken.text }</div>`;\n        } else if (defaultCode) {\n          return defaultCode.call(renderer, codeToken);\n        }\n        return '';\n      };\n    }\n\n    extendedRenderer[flag] = true;\n    return renderer;\n  }\n\n  /**\n   * Adds a language fence to Markdown content if the source URL's extension is not `.md`.\n   * Useful for displaying code snippets from files with other extensions.\n   * @param src The source URL or file path.\n   * @param markdown The raw Markdown content.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The Markdown content, possibly with a language fence.\n   */\n  private handleExtension(src: string, markdown: string): string {\n    const extensionMatch = src.match(/\\.([a-zA-Z0-9]+)(?:[?#].*)?$/);\n    const extension = extensionMatch ? extensionMatch[1] : '';\n\n    return extension && extension !== 'md'\n      ? `\\`\\`\\`${ extension }\\n${ markdown }\\n\\`\\`\\``\n      : markdown;\n  }\n\n  /**\n   * Parses emoji shortcodes (e.g., `:smile:`) into Unicode emoji characters.\n   * Requires `joypixels` (Emoji-Toolkit) to be loaded.\n   * @param markdown The Markdown string to parse for emojis.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The Markdown string with emojis replaced.\n   * @throws Error if `joypixels` is not loaded.\n   */\n  private parseEmoji(markdown: string): string {\n    if (!isPlatformBrowser(this._platform)) return markdown;\n\n    if (typeof joypixels === 'undefined' || typeof joypixels.shortnameToUnicode === 'undefined') {\n      throw new Error(ERROR_JOYPIXELS_NOT_LOADED);\n    }\n\n    return joypixels.shortnameToUnicode(markdown);\n  }\n\n  /**\n   * Parses a Markdown string using Marked.js with the specified options.\n   * Handles both inline and block parsing.\n   * @param markdown The Markdown string to parse.\n   * @param options The Marked.js options to use for parsing.\n   * @param inline Whether to parse as inline Markdown.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The parsed HTML string or a Promise of a string.\n   */\n  private parseMarked(markdown: string, options: MarkedOptions, inline = false): string | Promise<string> {\n    if (options.renderer) {\n      // Clone renderer and remove extended flags to prevent Marked.js errors\n      const renderer = { ...options.renderer } as Partial<ExtendedRenderer>;\n      delete renderer.ɵNgxMarkdownRendererExtendedForExtensions;\n      delete renderer.ɵNgxMarkdownRendererExtendedForMermaid;\n\n      marked.use({ renderer });\n    }\n\n    return inline ? this.parseInline(markdown, options) : marked(markdown, options);\n  }\n\n  /**\n   * Sanitizes the given HTML output using Angular's `DomSanitizer`.\n   * @param html The HTML string to sanitize.\n   * @param disableSanitizer If `true`, sanitation is skipped.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The sanitized HTML string.\n   */\n  private sanitizeOutput(html: string, disableSanitizer: boolean | undefined): string {\n    return disableSanitizer ? html : this._sanitizer.sanitize(this._securityContext, html) || '';\n  }\n\n  /**\n   * Renders clipboard copy buttons for code blocks within the given HTML element.\n   * Requires `ClipboardJS` to be loaded and a `ViewContainerRef` for component creation.\n   * @param element The HTML element containing code blocks.\n   * @param viewContainerRef The `ViewContainerRef` to attach the clipboard button component/template.\n   * @param options Clipboard rendering options.\n   * @private - This method is private and should not be accessed outside of this class\n   * @throws Error if `ClipboardJS` is not loaded or `viewContainerRef` is missing.\n   */\n  private renderClipboard(element: HTMLElement, viewContainerRef: ViewContainerRef | undefined, options: ClipboardRenderOptions): void {\n    if (!isPlatformBrowser(this._platform)) return;\n    if (typeof ClipboardJS === 'undefined') throw new Error(ERROR_CLIPBOARD_NOT_LOADED);\n    if (!viewContainerRef) throw new Error(ERROR_CLIPBOARD_VIEW_CONTAINER_REQUIRED);\n\n    const {\n      buttonComponent,\n      buttonTemplate,\n      buttonTextCopy,\n      buttonTextCopied,\n      languageButton,\n    } = options;\n\n    const preElements = element.querySelectorAll('pre');\n\n    preElements.forEach(preElement => {\n      const preWrapperElement = this.createPreWrapper(preElement);\n      const toolbarWrapperElement = this.createToolbar(preWrapperElement);\n\n      // Register mouse enter/leave listeners\n      this.addToolbarHoverListeners(preWrapperElement, toolbarWrapperElement);\n\n      // Create a button component or template\n      const embeddedViewRef = this.createClipboardButton(\n        viewContainerRef,\n        buttonComponent,\n        buttonTemplate,\n        preElement,\n        languageButton,\n        buttonTextCopy,\n        buttonTextCopied,\n      );\n\n      // Attach clipboard.js to the root node\n      this.attachClipboardJS(embeddedViewRef, toolbarWrapperElement, preElement);\n    });\n  }\n\n  /**\n   * Creates a wrapper `div` around a `<pre>` element for styling and positioning.\n   * @param preElement The `<pre>` element to wrap.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The newly created wrapper `div`.\n   */\n  private createPreWrapper(preElement: HTMLElement): HTMLElement {\n    const preWrapperElement = document.createElement('div');\n    preWrapperElement.style.position = 'relative';\n    preElement.parentNode!.insertBefore(preWrapperElement, preElement);\n    preWrapperElement.appendChild(preElement);\n    return preWrapperElement;\n  }\n\n  /**\n   * Creates a toolbar `div` within the pre-wrapper for housing the clipboard button.\n   * @param preWrapperElement The wrapper `div` for the `<pre>` element.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The newly created toolbar `div`.\n   */\n  private createToolbar(preWrapperElement: HTMLElement): HTMLElement {\n    const toolbarWrapperElement = document.createElement('div');\n    toolbarWrapperElement.classList.add('markdown-clipboard-toolbar');\n    toolbarWrapperElement.style.position = 'absolute';\n    toolbarWrapperElement.style.top = '.5em';\n    toolbarWrapperElement.style.right = '.5em';\n    toolbarWrapperElement.style.zIndex = '1';\n    preWrapperElement.appendChild(toolbarWrapperElement);\n    return toolbarWrapperElement;\n  }\n\n  /**\n   * Adds mouse enter/leave listeners to the pre-wrapper to control toolbar visibility.\n   * @param preWrapperElement The wrapper `div` for the `<pre>` element.\n   * @param toolbarWrapperElement The toolbar `div`.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private addToolbarHoverListeners(preWrapperElement: HTMLElement, toolbarWrapperElement: HTMLElement): void {\n    preWrapperElement.addEventListener('mouseenter', () => toolbarWrapperElement.classList.add('hover'));\n    preWrapperElement.addEventListener('mouseleave', () => toolbarWrapperElement.classList.remove('hover'));\n  }\n\n  /**\n   * Creates and returns an `EmbeddedViewRef` for the clipboard button, using either a\n   * provided component, template, or the default `ClipboardButtonComponent`.\n   * @param viewContainerRef The `ViewContainerRef` to create the component/template in.\n   * @param buttonComponent Optional custom button component type.\n   * @param buttonTemplate Optional custom button template.\n   * @param preElement The `<pre>` element associated with the button.\n   * @param languageButton Whether to display the detected language on the button.\n   * @param buttonTextCopy Custom text for the \"copy\" state.\n   * @param buttonTextCopied Custom text for the \"copied\" state.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns An `EmbeddedViewRef` representing the created button.\n   */\n  private createClipboardButton<T>(\n    viewContainerRef: ViewContainerRef,\n    buttonComponent: Type<T> | undefined,\n    buttonTemplate: TemplateRef<T> | undefined,\n    preElement: HTMLElement,\n    languageButton?: boolean,\n    buttonTextCopy?: string,\n    buttonTextCopied?: string,\n  ): EmbeddedViewRef<T> {\n    // declare embeddedViewRef holding variable\n    let embeddedViewRef: EmbeddedViewRef<T>;\n\n    if (buttonComponent) {     // ? use the provided component via input property or provided via ClipboardOptions provider\n      const componentRef = viewContainerRef.createComponent(buttonComponent);\n      embeddedViewRef = componentRef.hostView as EmbeddedViewRef<T>;\n      componentRef.changeDetectorRef.markForCheck();\n    } else if (buttonTemplate) { // ? use the provided template via input property\n      embeddedViewRef = viewContainerRef.createEmbeddedView(buttonTemplate);\n    } else { // ? use default component\n      const componentRef = viewContainerRef.createComponent(ClipboardButtonComponent);\n      this.setClipboardButtonText(componentRef.instance, preElement, languageButton, buttonTextCopy, buttonTextCopied);\n      embeddedViewRef = componentRef.hostView as EmbeddedViewRef<T>;\n      componentRef.changeDetectorRef.markForCheck();\n    }\n\n    return embeddedViewRef;\n  }\n\n  /**\n   * Sets the `buttonTextCopy` and `buttonTextCopied` signals on a `ClipboardButtonComponent` instance.\n   * @param instance The `ClipboardButtonComponent` instance.\n   * @param preElement The associated `<pre>` element.\n   * @param languageButton Whether to derive the \"copy\" text from the code language.\n   * @param buttonTextCopy Custom text for the \"copy\" state.\n   * @param buttonTextCopied Custom text for the \"copied\" state.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private setClipboardButtonText(\n    instance: ClipboardButtonComponent,\n    preElement: HTMLElement,\n    languageButton?: boolean,\n    buttonTextCopy?: string,\n    buttonTextCopied?: string,\n  ): void {\n    if (!instance) {\n      console.error('ClipboardButtonComponent instance is undefined. Cannot set button text.');\n      return;\n    }\n\n    const detectedLanguage = languageButton ? preElement.querySelector('code')?.className.replace('language-', '') || 'Copy' : 'Copy';\n    instance.buttonTextCopy.set(buttonTextCopy || detectedLanguage);\n    instance.buttonTextCopied.set(buttonTextCopied || 'Copied!');\n  }\n\n  /**\n   * Attaches Clipboard.js functionality to the clipboard button's root node.\n   * Destroys the Clipboard.js instance when the `embeddedViewRef` is destroyed.\n   * @param embeddedViewRef The `EmbeddedViewRef` of the clipboard button.\n   * @param toolbarWrapperElement The toolbar `div` where the button is appended.\n   * @param preElement The `<pre>` element whose content will be copied.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private attachClipboardJS(embeddedViewRef: EmbeddedViewRef<unknown>, toolbarWrapperElement: HTMLElement, preElement: HTMLElement): void {\n    let clipboardInstance: typeof ClipboardJS;\n\n    embeddedViewRef.rootNodes.forEach((node: HTMLElement) => {\n      toolbarWrapperElement.appendChild(node);\n      clipboardInstance = new ClipboardJS(node, { text: () => preElement.innerText });\n    });\n\n    embeddedViewRef.onDestroy(() => {\n      if (clipboardInstance) clipboardInstance.destroy();\n    });\n  }\n\n  /**\n   * Renders mathematical expressions using KaTeX within the given HTML element.\n   * Requires `katex` and `renderMathInElement` to be loaded.\n   * @param element The HTML element where KaTeX expressions should be rendered.\n   * @param options Optional KaTeX options.\n   * @private - This method is private and should not be accessed outside of this class\n   * @throws Error if KaTeX files are not loaded.\n   */\n  private renderKatex(element: HTMLElement, options?: KatexOptions): void {\n    if (!isPlatformBrowser(this._platform)) return;\n\n    if (typeof katex === 'undefined' || typeof renderMathInElement === 'undefined') {\n      throw new Error(ERROR_KATEX_NOT_LOADED);\n    }\n\n    renderMathInElement(element, options);\n  }\n\n  /**\n   * Renders Mermaid diagrams within the given HTML element.\n   * Requires `mermaid` to be loaded.\n   * @param element The HTML element containing Mermaid diagrams.\n   * @param options Optional Mermaid configuration.\n   * @private - This method is private and should not be accessed outside of this class\n   * @throws Error if Mermaid files are not loaded.\n   */\n  private renderMermaid(element: HTMLElement, options: MermaidAPI.MermaidConfig = this.DEFAULT_MERMAID_OPTIONS): void {\n    if (!isPlatformBrowser(this._platform)) return;\n\n    if (typeof mermaid === 'undefined' || typeof mermaid.initialize === 'undefined') {\n      throw new Error(ERROR_MERMAID_NOT_LOADED);\n    }\n\n    const mermaidElements = element.querySelectorAll('.mermaid');\n    if (mermaidElements.length > 0) {\n      mermaid.initialize(options);\n      mermaid.run({ nodes: mermaidElements as NodeListOf<HTMLElement> });\n    }\n  }\n\n  /**\n   * Trims common leading indentation from each line of a Markdown string.\n   * This prevents unintended code block rendering in some Markdown processors.\n   * @param markdown The Markdown string to trim.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @returns The Markdown string with common indentation removed.\n   */\n  private trimIndentation(markdown: string): string {\n    if (!markdown) return '';\n\n    const lines = markdown.split('\\n');\n    if (lines.length === 0) return '';\n\n    let minIndent = Number.POSITIVE_INFINITY;\n\n    // Find the minimum indentation of non-empty lines\n    for (const line of lines) {\n      if (line.trim().length > 0) {\n        const indentMatch = line.match(/^\\s*/);\n        if (indentMatch) minIndent = Math.min(minIndent, indentMatch[0].length);\n      }\n    }\n\n    if (minIndent === Number.POSITIVE_INFINITY || minIndent === 0) {\n      return markdown; // No common indentation or only empty lines\n    }\n\n    // Remove the common indentation from each line\n    return lines.map(line => line.substring(minIndent)).join('\\n');\n  }\n}\n","import { Provider, SecurityContext } from '@angular/core';\nimport { MarkdownModuleConfig } from '../markdown.module';\nimport { MarkdownService, SECURITY_CONTEXT } from '../services/markdown.service';\n\nexport function provideMarkdown(markdownModuleConfig?: MarkdownModuleConfig): Provider[] {\n  return [\n    MarkdownService,\n    markdownModuleConfig?.loader ?? [],\n    markdownModuleConfig?.clipboardOptions ?? [],\n    markdownModuleConfig?.markedOptions ?? [],\n    markdownModuleConfig?.mermaidOptions ?? [],\n    markdownModuleConfig?.markedExtensions ?? [],\n    {\n      provide: SECURITY_CONTEXT,\n      useValue: markdownModuleConfig?.sanitize ?? SecurityContext.HTML,\n    },\n  ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { MarkdownRouterLinkOptions } from '../markdown/markdown.component';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MarkdownLinkService {\n  // * == SERVICE INJECTIONS ==\n  private _router = inject(Router);\n\n  /**\n   * Defines a set of known external URL patterns that should always be opened outside the Angular application.\n   * This includes common web protocols, mailto, tel, SMS, geo, file, and data URIs.\n   */\n  private readonly EXTERNAL_URL_PATTERNS = [\n    /^https?:\\/\\//, // http:// or https://\n    /^www\\./,      // common web prefix (e.g., www.example.com)\n    /^ftp:\\/\\//,\n    /^ftps:\\/\\//,\n    /^mailto:/,\n    /^tel:/,\n    /^sms:/,\n    /^geo:/,\n    /^file:\\/\\//, // Explicitly file:/// to avoid `/localFile:` confusion\n    /^data:/,\n  ];\n\n  /**\n   * Defines a set of known internal URL patterns that should be handled by the Angular router\n   * or specific internal application logic (like scrolling or local file access).\n   * This includes fragment identifiers, custom routerLink flags, relative paths,\n   * absolute paths within the app, and the custom '/localFile:' directive.\n   */\n  private readonly INTERNAL_URL_PATTERNS = [\n    /^#/,              // Fragment identifiers (e.g., #section)\n    /^\\/routerLink:/,  // Custom Angular router link flag (e.g., /routerLink:/path/to/route)\n    /^\\.\\.\\//,         // Relative parent directory (e.g., ../some-page)\n    /^\\.\\//,           // Relative current directory (e.g., ./some-page)\n    /^\\//,             // Absolute path within the application (e.g., /dashboard, /users/profile)\n    /^\\/localFile:/,   // Custom flag for local file access (e.g., /localFile:assets/doc.pdf)\n  ];\n\n  /**\n   * Checks if a given URL is an external link.\n   * External URLs typically start with a protocol (http, https, ftp, mailto, tel, sms, geo, file, data)\n   * or a known external domain prefix (www.).\n   * @param href The URL string to check.\n   *\n   * @private - This method is private and should not be accessed outside this class\n   * @returns True if the URL is external, false otherwise.\n   */\n  private isExternalUrl(href: string): boolean {\n    if (!href) return false;\n\n    return this.EXTERNAL_URL_PATTERNS.some(pattern => pattern.test(href));\n  }\n\n  /**\n   * Handles external URLs by opening them in a new tab.\n   * Removes any custom internal flags like '/localFile': before opening.\n   * @param target The HTMLAnchorElement that triggered the action.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private externalUrlHandler(target: HTMLElement): void {\n    const hyperlink = target.getAttribute('href')!;\n\n    if (!hyperlink) {\n      console.warn('Attempted to handle external URL without href attribute.');\n      return;\n    }\n\n    target.setAttribute('target', '_blank');\n    window.open(hyperlink, '_blank');\n  }\n\n  /**\n   * Checks if a given URL is an internal link.\n   * Internal URLs are considered those starting with '#' (fragments),\n   * '/routerLink:' (custom Angular routing flag), or '.. /' (relative paths).\n   * It also includes paths that don't match external URL patterns.\n   * @param href The URL string to check.\n   *\n   * @private - This method is private and should not be accessed outside this class\n   * @returns True if the URL is internal, false otherwise.\n   */\n  private isInternalUrl(href: string): boolean {\n    if (!href) return false;\n\n    // If it's explicitly an external URL, it's not internal.\n    if (this.isExternalUrl(href)) return false;\n\n    // Otherwise, check if it matches any of the internal patterns.\n    return this.INTERNAL_URL_PATTERNS.some(pattern => pattern.test(href));\n  }\n\n  /**\n   * Navigates using the Angular Router with optional fragment and NavigationExtras.\n   * This helper function centralizes the routing logic.\n   * @param commands The path segments for Angular Router.\n   * @param fragment The URL fragment to scroll to (optional).\n   * @param routerLinkOptions Options containing global or path-specific NavigationExtras.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private handleRouterNavigation(\n    commands: string,\n    fragment: string | undefined,\n    routerLinkOptions?: MarkdownRouterLinkOptions,\n  ): void {\n    let extras: NavigationExtras = {};\n\n    if (routerLinkOptions?.paths?.[commands]) {\n      extras = { ...routerLinkOptions.paths[commands] }; // Clone to avoid modifying the original\n    } else if (routerLinkOptions?.global) {\n      extras = { ...routerLinkOptions.global }; // Clone to avoid modifying the original\n    }\n\n    if (fragment) {\n      extras.fragment = fragment;\n    }\n\n    void this._router.navigate([commands], extras);\n  }\n\n  /**\n   * Handles navigation for internal URLs using the Angular Router.\n   * Supports hash fragments, custom routerLink paths, and general internal paths.\n   * Applies global or path-specific `NavigationExtras` if provided.\n   * @param target The HTMLAnchorElement that triggered the action.\n   * @param routerLinkOptions Optional options for router link behavior.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private internalUrlHandler(target: HTMLAnchorElement, routerLinkOptions?: MarkdownRouterLinkOptions): void {\n    const path = target.getAttribute('href');\n\n    if (!path) {\n      console.warn('Attempted to handle internal URL without href attribute.');\n      return;\n    }\n\n    if (routerLinkOptions?.internalBrowserHandler) {\n      // --- Special handling for /localFile: URLs ---\n      if (path.startsWith('/localFile:')) {\n        const localFilePath = path.replace('/localFile:', '');\n        target.setAttribute('target', '_blank'); // Ensure it opens in a new tab\n        window.open(localFilePath, '_blank'); // Open local file paths externally\n        return;\n      }\n      // --- End special handling ---\n\n      if (path.startsWith('#')) {\n        void this._router.navigate([], { fragment: path.slice(1) });\n        return;\n      }\n\n      if (path.startsWith('/routerLink:')) {\n        const routerLinkPath = path.replace('/routerLink:', '');\n        const [commands, fragment] = routerLinkPath.split('#');\n        this.handleRouterNavigation(commands, fragment);\n        return;\n      }\n\n      // Default handling for other internal paths (e.g., relative paths, absolute paths)\n      const [commands, fragment] = path.split('#');\n      this.handleRouterNavigation(commands, fragment);\n      return;\n    } else {\n      // Assuming internalDesktopHandler implies scrolling to ID without Angular Router\n      try {\n        const elementId = path.startsWith('#') ? path.slice(1) : path;\n        const targetElement = document.getElementById(elementId);\n\n        if (targetElement) {\n          targetElement.scrollIntoView({ behavior: 'smooth' });\n        } else {\n          // If not an ID, and it's a localFile: path, the desktop app would handle opening the file\n          // This part would typically interface with Electron, Capacitor, etc., not directly with window.open\n          console.warn(`MarkdownLinkService: Element with ID \"${ elementId }\" not found for scrolling. For desktop, consider implementing native file open for \"${ path }\".`);\n        }\n      } catch (error) {\n        console.error('MarkdownLinkService: Error attempting to scroll to element or handle desktop link:', error);\n      }\n    }\n  }\n\n  /**\n   * Intercepts click events on anchor elements within Markdown content to handle navigation.\n   * Differentiates between internal and external links based on provided options and URL structure.\n   * @param event The click event object.\n   * @param routerLinkOptions Optional options to configure link handling behavior.\n   */\n  interceptClick(event: Event, routerLinkOptions?: MarkdownRouterLinkOptions): void {\n    const element = event.target as HTMLAnchorElement; // Cast directly for better type inference\n\n    // Ensure the clicked element is an anchor or within one\n    const anchor = element.nodeName.toLowerCase() === 'a' ? element : element.closest('a');\n\n    if (!anchor || !anchor.href) return;\n\n    const href = anchor.getAttribute('href');\n    if (!href) return;\n\n    const isExternalCandidate = this.isExternalUrl(href);\n    const isInternalCandidate = this.isInternalUrl(href);\n\n    const shouldHandleInternal = routerLinkOptions?.internalBrowserHandler || routerLinkOptions?.internalDesktopHandler;\n    const shouldHandleExternal = routerLinkOptions?.externalBrowserHandler;\n\n    // Prioritize handling if specific options are enabled and the link matches the type\n    if (shouldHandleExternal && isExternalCandidate) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.externalUrlHandler(anchor);\n    } else if (shouldHandleInternal && isInternalCandidate) {\n      event.preventDefault();\n      event.stopPropagation();\n      this.internalUrlHandler(anchor, routerLinkOptions);\n    }\n    // If no specific handler applies, let the default browser behavior occur.\n    // This allows for normal behavior for non-intercepted links (e.g., direct asset downloads).\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  Component,\n  DestroyRef,\n  effect,\n  ElementRef,\n  HostListener,\n  inject,\n  input,\n  InputSignal,\n  InputSignalWithTransform,\n  model,\n  ModelSignal,\n  output,\n  OutputEmitterRef,\n  TemplateRef,\n  Type,\n  ViewContainerRef,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationExtras } from '@angular/router';\nimport { KatexOptions } from '../configuration/katex-options';\nimport { MermaidAPI } from '../configuration/mermaid-options';\nimport { PrismPlugin } from '../configuration/prism-plugin';\nimport { MarkdownLinkService } from '../services/markdown-link.service';\nimport { MarkdownService, ParseOptions, RenderOptions } from '../services/markdown.service';\n\nexport interface MarkdownRouterLinkOptions {\n  global?: NavigationExtras;\n  paths?: Record<string, NavigationExtras | undefined>;\n  internalBrowserHandler?: boolean; // Angular SPA navigation\n  internalDesktopHandler?: boolean; // Electron desktop navigation\n  externalBrowserHandler?: boolean; // External browser navigation\n}\n\n@Component({\n  selector: 'ngx-markdown, markdown, [markdown]',\n  template: `\n    <ng-content />\n  `,\n  imports: [CommonModule],\n})\nexport class MarkdownComponent implements AfterViewInit {\n  // * == SERVICE INJECTIONS ==\n  private readonly _markdownService: MarkdownService = inject(MarkdownService);\n  private readonly _markdownLinkService: MarkdownLinkService = inject(MarkdownLinkService);\n  private readonly _element: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly _viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n  private readonly _destroyRef = inject(DestroyRef);\n\n  // * == INPUTS ==\n  readonly data: ModelSignal<string | null | undefined> = model<string | null>();\n  readonly src: ModelSignal<string | null | undefined> = model<string | null>();\n  // ? Router link options for internal and external links\n  readonly routerLinkOptions: InputSignal<MarkdownRouterLinkOptions | undefined> = input<MarkdownRouterLinkOptions>();\n  // ? Disable the sanitizer for the Markdown content\n  readonly disableSanitizer: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly disableRouterLinkHandler: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  // ? Whether to render the Markdown inline or not\n  readonly inline: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  // ? Whether to enable the clipboard functionality\n  readonly clipboard: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly clipboardButtonComponent: InputSignal<Type<unknown> | undefined> = input<Type<unknown>>();\n  readonly clipboardButtonTemplate: InputSignal<TemplateRef<unknown> | undefined> = input<TemplateRef<unknown>>();\n  readonly clipboardButtonTextCopy: InputSignal<string | undefined> = input<string>();\n  readonly clipboardButtonTextCopied: InputSignal<string | undefined> = input<string>();\n  readonly clipboardLanguageButton: InputSignal<boolean | undefined> = input<boolean>();\n  // ? Whether to enable the emoji rendering\n  readonly emoji: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  // ? Options for KaTeX rendering\n  readonly katex: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly katexOptions: InputSignal<KatexOptions | undefined> = input<KatexOptions>();\n  // ? Whether to enable the Mermaid rendering\n  readonly mermaid: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly mermaidOptions: InputSignal<MermaidAPI.MermaidConfig | undefined> = input<MermaidAPI.MermaidConfig>();\n  // ? Whether to enable the line highlighting\n  readonly lineHighlight: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly line: InputSignal<string | string[] | undefined> = input<string | string[]>();\n  readonly lineOffset: InputSignal<number | undefined> = input<number>();\n  // ? Whether to enable the line numbers\n  readonly lineNumbers: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly start: InputSignal<number | undefined> = input<number>();\n  // ? Whether to enable the command line rendering\n  readonly commandLine: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n  readonly filterOutput: InputSignal<string | undefined> = input<string>();\n  readonly host: InputSignal<string | undefined> = input<string>();\n  readonly prompt: InputSignal<string | undefined> = input<string>();\n  readonly output: InputSignal<string | undefined> = input<string>();\n  readonly user: InputSignal<string | undefined> = input<string>();\n\n  // * == OUTPUTS ==\n  readonly error: OutputEmitterRef<string | Error> = output<string | Error>();\n  readonly load: OutputEmitterRef<string> = output<string>();\n  readonly ready: OutputEmitterRef<void> = output<void>();\n\n  constructor() {\n    this.setupContentLoadingEffect();\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.data() && !this.src()) this.handleTransclusion();\n  }\n\n  /**\n   * Handles document click events and processes them based on application logic.\n   *\n   * @param {MouseEvent} event - The mouse click event triggered within the document.\n   * @return {void}\n   */\n  @HostListener('click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    if (this.disableRouterLinkHandler()) return;\n    this._markdownLinkService.interceptClick(event, this.routerLinkOptions());\n  }\n\n  /**\n   * Sets up the content loading effect to handle changes to data and src inputs,\n   * replacing traditional change detection methods like ngOnChanges for these inputs.\n   * The method uses reactive programming to monitor changes and trigger respective\n   * content handling processes. It also listens for a reload signal from the markdownService,\n   * ensuring the content is reloaded when necessary, with the appropriate cleanup upon\n   * component destruction.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @return {void} This method does not return a value.\n   */\n  private setupContentLoadingEffect(): void {\n    // ? Effect for reacting to data() and src() input changes (replaces ngOnChanges for these)\n    effect(() => {\n      this.loadContent(); // This will call handleData or handleSrc based on the inputs\n      // ! Note: We avoid an `else` that triggers `handleTransclusion` here\n      // ! because transclusion content is only available in ngAfterViewInit.\n      // ! The initial transclusion is handled in ngAfterViewInit.\n    });\n\n    // Subscribe to markdownService.reload$ and automatically unsubscribe on component destruction\n    this._markdownService.reload$\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe(() => {\n        this.loadContent(); // This call is sufficient. render() will trigger contentRenderedTrigger.update()\n      });\n  }\n\n  /**\n   * Renders the Markdown content.\n   * @param markdown The markdown content to render.\n   * @param decodeHtml Whether to decode HTML entities.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private async render(markdown: string, decodeHtml = false): Promise<void> {\n    const parsedOptions: ParseOptions = {\n      decodeHtml,\n      inline: this.inline(),\n      emoji: this.emoji(),\n      mermaid: this.mermaid(),\n      disableSanitizer: this.disableSanitizer(),\n    };\n\n    const renderOptions: RenderOptions = {\n      clipboard: this.clipboard(),\n      clipboardOptions: {\n        buttonComponent: this.clipboardButtonComponent(),\n        buttonTemplate: this.clipboardButtonTemplate(),\n        buttonTextCopy: this.clipboardButtonTextCopy(),\n        buttonTextCopied: this.clipboardButtonTextCopied(),\n        languageButton: this.clipboardLanguageButton(),\n      },\n      katex: this.katex(),\n      katexOptions: this.katexOptions(),\n      mermaid: this.mermaid(),\n      mermaidOptions: this.mermaidOptions(),\n    };\n\n    this._element.nativeElement.innerHTML = await this._markdownService.parse(markdown, parsedOptions);\n\n    this.handlePlugins();\n    this._markdownService.render(this._element.nativeElement, renderOptions, this._viewContainerRef);\n\n    this.processInternalLinks(); // Process internal links after rendering\n\n    this.ready.emit();\n  }\n\n  /**\n   * Processes all internal links within a native HTML element and converts them\n   * if they contain a specific routerLink attribute.\n   *\n   * This method queries all anchor elements within the associated native element,\n   * checks for the presence of the `href` attribute containing `/routerLink:`,\n   * and applies the `internalLinksConverter` method to each qualifying link.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @return {void} This method does not return a value.\n   */\n  private processInternalLinks(): void {\n    const links = this._element.nativeElement.querySelectorAll('a');\n    links.forEach(link => {\n      if (link.getAttribute('href')?.includes('/routerLink:') === true) {\n        this.internalLinksConverter(link);\n      }\n    });\n  }\n\n  /**\n   * A handler function for processing anchor elements within an internal browser.\n   * This function modifies the attributes of the provided anchor element to work with a custom routing mechanism.\n   *\n   * @param {HTMLAnchorElement} link - The anchor element whose attributes will be modified.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private internalLinksConverter = (link: HTMLAnchorElement): void => {\n    const href = link.getAttribute('href')!;\n    const [path, fragment] = href.split('#');\n    link.setAttribute('data-routerLink', path);\n    link.setAttribute('href', `${ path }${ fragment ? `#${ fragment }` : '' }`);\n    link.setAttribute('routerLink', `${ path }${ fragment ? `#${ fragment }` : '' }`);\n    if (fragment) link.setAttribute('fragment', fragment);\n  };\n\n  /**\n   * Fetches a Markdown source using the `src` value, processes it, and emits the result or an error.\n   *\n   * The method subscribes to the Markdown source provided by the `markdownService`. On successful retrieval,\n   * it processes the Markdown using the `render` method and emits the result via the `load` event. In case of\n   * an error, it emits the error through the `error` event.\n   *\n   * @private - This method is private and should not be accessed outside of this class\n   * @return {void} This method does not return a value.\n   */\n  private handleSrc(): void {\n    this._markdownService\n      .getSource(this.src()!)\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe({\n        next: markdown => {\n          this.render(markdown).then(() => {\n            this.load.emit(markdown);\n          });\n        },\n        error: (error: string | Error) => this.error.emit(error),\n      });\n  }\n\n  /**\n   * Handles the transclusion of content by rendering the innerHTML of the associated element.\n   * @private - This method is private and should not be accessed outside of this class\n   * @return {void} This method does not return a value.\n   */\n  private handleTransclusion(): void {\n    void this.render(this._element.nativeElement.innerHTML, true);\n  }\n\n  /**\n   * Handles the initialization of the plugins.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private handlePlugins(): void {\n    if (this.commandLine()) {\n      this.setPluginClass(this._element.nativeElement, PrismPlugin.CommandLine);\n      this.setPluginOptions(this._element.nativeElement, {\n        dataFilterOutput: this.filterOutput(),\n        dataHost: this.host(),\n        dataPrompt: this.prompt(),\n        dataOutput: this.output(),\n        dataUser: this.user(),\n      });\n    }\n\n    if (this.lineHighlight()) {\n      this.setPluginOptions(this._element.nativeElement, { dataLine: this.line(), dataLineOffset: this.lineOffset() });\n    }\n\n    if (this.lineNumbers()) {\n      this.setPluginClass(this._element.nativeElement, PrismPlugin.LineNumbers);\n      this.setPluginOptions(this._element.nativeElement, { dataStart: this.start() });\n    }\n  }\n\n  /**\n   * Sets the plugin class to the element with the specified plugin.\n   * @param element The element to set the plugin class to.\n   * @param plugin The plugin to set.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private setPluginClass(element: HTMLElement, plugin: string | string[]): void {\n    const preElements = element.querySelectorAll('pre');\n    preElements.forEach(preElement => {\n      const classes = Array.isArray(plugin) ? plugin : [plugin];\n      preElement.classList.add(...classes);\n    });\n  }\n\n  /**\n   * Sets the plugin options to the element with the specified options.\n   * @param element The element to set the plugin options to.\n   * @param options The options to set.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private setPluginOptions(element: HTMLElement, options: Record<string, number | string | string[] | undefined>): void {\n    const preElements = element.querySelectorAll('pre');\n    preElements.forEach(preElement => {\n      Object.keys(options).forEach(option => {\n        const attributeValue = options[option];\n        if (attributeValue) {\n          const attributeName = this.toLispCase(option);\n          preElement.setAttribute(attributeName, attributeValue.toString());\n        }\n      });\n    });\n  }\n\n  /**\n   * Converts the value to a lisp-case for the plugin options.\n   * @param value The value to convert to lisp-case.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private toLispCase(value: string): string {\n    return value.replace(/([A-Z])/g, '-$1').toLowerCase();\n  }\n\n  /**\n   * Loads the content from the data or the src.\n   * @private - This method is private and should not be accessed outside of this class\n   */\n  private loadContent(): void {\n    const dataValue = this.data();\n    const srcValue = this.src();\n\n    if (dataValue) {\n      void this.render(dataValue);\n    } else if (srcValue) {\n      this.handleSrc();\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'language',\n})\nexport class LanguagePipe implements PipeTransform {\n  /**\n   * Transforms a string value by wrapping it in a Markdown code block for a specified language.\n   *\n   * @param value The string contents to be wrapped in a code block.\n   * If null or undefined, it defaults to an empty string.\n   * @param language The programming language for the code block (e.g., 'typescript', 'html', 'css').\n   * If null or undefined, it defaults to an empty string.\n   * @returns A string formatted as a Markdown code block\n   * Returns an empty string if the input 'value' is not a string after null check,\n   * or if 'language' is not a string after null check.\n   */\n  transform(value: string | null | undefined, language: string | null | undefined): string {\n    const safeValue = value ?? '';\n    const safeLanguage = language ?? '';\n\n    if (typeof safeValue !== 'string') {\n      console.error(\n        `LanguagePipe: 'value' must be a string. Received type: [${typeof value}]. Returning empty string.`,\n      );\n      return '';\n    }\n\n    if (typeof safeLanguage !== 'string') {\n      console.error(\n        `LanguagePipe: 'language' must be a string. Received type: [${typeof language}]. Returning value without code block.`,\n      );\n      return safeValue;\n    }\n\n    return `\\`\\`\\`${safeLanguage}\\n${safeValue}\\n\\`\\`\\``;\n  }\n}","import { ElementRef, inject, NgZone, Pipe, PipeTransform, ViewContainerRef } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { first } from 'rxjs/operators';\nimport { MarkdownService, ParseOptions, RenderOptions } from '../services/markdown.service';\n\nexport type MarkdownPipeOptions = ParseOptions & RenderOptions;\n\n@Pipe({\n  name: 'markdown',\n})\nexport class MarkdownPipe implements PipeTransform {\n  // * == SERVICE INJECTIONS ==\n  private _markdownService = inject(MarkdownService);\n  private _domSanitizer = inject(DomSanitizer);\n  private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _viewContainerRef = inject(ViewContainerRef);\n  private _ngZone = inject(NgZone);\n\n  /**\n   * Transforms a Markdown string into SafeHtml and triggers a post-rendering process\n   * on the host element when the DOM is stable.\n   *\n   * @param value The Markdown string to transform. Can be null or undefined.\n   * @param options Optional configuration for parsing and rendering Markdown.\n   * @returns A Promise that resolves to SafeHtml ready for binding to [innerHTML].\n   * Returns an empty string if the input value is null, undefined, or not a string.\n   */\n  async transform(value: string | null | undefined, options?: MarkdownPipeOptions): Promise<SafeHtml> {\n    if (value == null) return '';\n\n    if (typeof value !== 'string') {\n      console.error(`MarkdownPipe has been invoked with an invalid value type [${ typeof value }]`);\n      return value;\n    }\n\n    const parsedMarkdown = await this._markdownService.parse(value, options);\n\n    if (this._ngZone) {\n      this._ngZone.onStable\n        .pipe(first())\n        .subscribe(() => this._markdownService.render(this._elementRef.nativeElement, options, this._viewContainerRef));\n    } else {\n      this._markdownService.render(this._elementRef.nativeElement, options, this._viewContainerRef);\n    }\n\n    return this._domSanitizer.bypassSecurityTrustHtml(parsedMarkdown);\n  }\n}\n","import { InjectionToken, ModuleWithProviders, NgModule, Provider, SecurityContext } from '@angular/core';\nimport { ClipboardButtonComponent } from './clipboard-button/clipboard-button.component';\nimport { CLIPBOARD_OPTIONS } from './clipboard-button/clipboard-options';\nimport { MARKED_EXTENSIONS } from './configuration/marked-extensions';\nimport { MARKED_OPTIONS } from './configuration/marked-options';\nimport { MERMAID_OPTIONS } from './configuration/mermaid-options';\nimport { provideMarkdown } from './configuration/provide-markdown';\nimport { MarkdownComponent } from './markdown/markdown.component';\nimport { LanguagePipe } from './pipes/language.pipe';\nimport { MarkdownPipe } from './pipes/markdown.pipe';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InjectionTokenType<T extends InjectionToken<any>> = T extends InjectionToken<infer R> ? R : unknown;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TypedProvider<T extends InjectionToken<any>> = TypedValueProvider<T> | TypedFactoryProvider<T>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MultiTypedProvider<T extends InjectionToken<any>> = TypedProvider<T> & { multi: true };\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface TypedValueProvider<T extends InjectionToken<any>> {\n  provide: T;\n  useValue: InjectionTokenType<T>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface TypedFactoryProvider<T extends InjectionToken<any>> {\n  provide: T;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  useFactory: (...args: any[]) => InjectionTokenType<T>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  deps?: any[];\n}\n\n// having a dependency on `HttpClientModule` within a library\n// breaks all the interceptors from the app consuming the library\n// here, we explicitly ask the user to pass a provider with\n// their own instance of `HttpClientModule`\nexport interface MarkdownModuleConfig {\n  loader?: Provider;\n  clipboardOptions?: TypedProvider<typeof CLIPBOARD_OPTIONS>;\n  markedOptions?: TypedProvider<typeof MARKED_OPTIONS>;\n  markedExtensions?: MultiTypedProvider<typeof MARKED_EXTENSIONS>[];\n  mermaidOptions?: TypedProvider<typeof MERMAID_OPTIONS>;\n  sanitize?: SecurityContext;\n}\n\nconst sharedDeclarations = [\n  ClipboardButtonComponent,\n  LanguagePipe,\n  MarkdownComponent,\n  MarkdownPipe,\n];\n\n@NgModule({\n  imports: sharedDeclarations,\n  exports: sharedDeclarations,\n})\nexport class MarkdownModule {\n  static forRoot(markdownModuleConfig?: MarkdownModuleConfig): ModuleWithProviders<MarkdownModule> {\n    return {\n      ngModule: MarkdownModule,\n      providers: [\n        provideMarkdown(markdownModuleConfig),\n      ],\n    };\n  }\n\n  static forChild(): ModuleWithProviders<MarkdownModule> {\n    return {\n      ngModule: MarkdownModule,\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["MarkedRenderer"],"mappings":"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"}