{"version":3,"sources":["node_modules/@angular/core/fesm2022/rxjs-interop.mjs","node_modules/marked/lib/marked.esm.js","node_modules/ngx-markdown/fesm2022/ngx-markdown.mjs"],"sourcesContent":["/**\n * @license Angular v20.3.25\n * (c) 2010-2025 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { assertInInjectionContext, inject, DestroyRef, RuntimeError, Injector, assertNotInReactiveContext, signal, PendingTasks } from './root_effect_scheduler.mjs';\nimport { getOutputDestroyRef, effect, untracked, computed, resource, encapsulateResourceError } from './resource.mjs';\nimport './not_found.mjs';\nimport './signal.mjs';\nimport '@angular/core/primitives/signals';\nimport '@angular/core/primitives/di';\nimport './effect.mjs';\n\n/**\n * Operator which completes the Observable when the calling context (component, directive, service,\n * etc) is destroyed.\n *\n * @param destroyRef optionally, the `DestroyRef` representing the current context. This can be\n *     passed explicitly to use `takeUntilDestroyed` outside of an [injection\n * context](guide/di/dependency-injection-context). Otherwise, the current `DestroyRef` is injected.\n *\n * @see [Unsubscribing with takeUntilDestroyed](ecosystem/rxjs-interop/take-until-destroyed)\n *\n * @publicApi 19.0\n */\nfunction takeUntilDestroyed(destroyRef) {\n  if (!destroyRef) {\n    ngDevMode && assertInInjectionContext(takeUntilDestroyed);\n    destroyRef = inject(DestroyRef);\n  }\n  const destroyed$ = new Observable(subscriber => {\n    if (destroyRef.destroyed) {\n      subscriber.next();\n      return;\n    }\n    const unregisterFn = destroyRef.onDestroy(subscriber.next.bind(subscriber));\n    return unregisterFn;\n  });\n  return source => {\n    return source.pipe(takeUntil(destroyed$));\n  };\n}\n\n/**\n * Implementation of `OutputRef` that emits values from\n * an RxJS observable source.\n *\n * @internal\n */\nclass OutputFromObservableRef {\n  source;\n  destroyed = false;\n  destroyRef = /*#__PURE__*/inject(DestroyRef);\n  constructor(source) {\n    this.source = source;\n    this.destroyRef.onDestroy(() => {\n      this.destroyed = true;\n    });\n  }\n  subscribe(callbackFn) {\n    if (this.destroyed) {\n      throw new RuntimeError(953 /* ɵRuntimeErrorCode.OUTPUT_REF_DESTROYED */, ngDevMode && 'Unexpected subscription to destroyed `OutputRef`. ' + 'The owning directive/component is destroyed.');\n    }\n    // Stop yielding more values when the directive/component is already destroyed.\n    const subscription = this.source.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n      next: value => callbackFn(value)\n    });\n    return {\n      unsubscribe: () => subscription.unsubscribe()\n    };\n  }\n}\n/**\n * Declares an Angular output that is using an RxJS observable as a source\n * for events dispatched to parent subscribers.\n *\n * The behavior for an observable as source is defined as followed:\n *    1. New values are forwarded to the Angular output (next notifications).\n *    2. Errors notifications are not handled by Angular. You need to handle these manually.\n *       For example by using `catchError`.\n *    3. Completion notifications stop the output from emitting new values.\n *\n * @usageNotes\n * Initialize an output in your directive by declaring a\n * class field and initializing it with the `outputFromObservable()` function.\n *\n * ```ts\n * @Directive({..})\n * export class MyDir {\n *   nameChange$ = <some-observable>;\n *   nameChange = outputFromObservable(this.nameChange$);\n * }\n * ```\n * @see [RxJS interop with component and directive outputs](ecosystem/rxjs-interop/output-interop)\n *\n * @publicApi 19.0\n */\nfunction outputFromObservable(observable, opts) {\n  ngDevMode && assertInInjectionContext(outputFromObservable);\n  return new OutputFromObservableRef(observable);\n}\n\n/**\n * Converts an Angular output declared via `output()` or `outputFromObservable()`\n * to an observable.\n * It creates an observable that represents the stream of \"events firing\" in an output.\n *\n * You can subscribe to the output via `Observable.subscribe` then.\n *\n * @see [RxJS interop with component and directive outputs](ecosystem/rxjs-interop/output-interop)\n *\n * @publicApi 19.0\n */\nfunction outputToObservable(ref) {\n  const destroyRef = getOutputDestroyRef(ref);\n  return new Observable(observer => {\n    // Complete the observable upon directive/component destroy.\n    // Note: May be `undefined` if an `EventEmitter` is declared outside\n    // of an injection context.\n    const unregisterOnDestroy = destroyRef?.onDestroy(() => observer.complete());\n    const subscription = ref.subscribe(v => observer.next(v));\n    return () => {\n      subscription.unsubscribe();\n      unregisterOnDestroy?.();\n    };\n  });\n}\n\n/**\n * Exposes the value of an Angular `Signal` as an RxJS `Observable`.\n * As it reflects a state, the observable will always emit the latest value upon subscription.\n *\n * The signal's value will be propagated into the `Observable`'s subscribers using an `effect`.\n *\n * `toObservable` must be called in an injection context unless an injector is provided via options.\n *\n * @see [RxJS interop with Angular signals](ecosystem/rxjs-interop)\n * @see [Create an RxJS Observable from a signal with toObservable](ecosystem/rxjs-interop#create-an-rxjs-observable-from-a-signal-with-toobservable)\n *\n * @publicApi 20.0\n */\nfunction toObservable(source, options) {\n  if (ngDevMode && !options?.injector) {\n    assertInInjectionContext(toObservable);\n  }\n  const injector = options?.injector ?? inject(Injector);\n  const subject = new ReplaySubject(1);\n  const watcher = effect(() => {\n    let value;\n    try {\n      value = source();\n    } catch (err) {\n      untracked(() => subject.error(err));\n      return;\n    }\n    untracked(() => subject.next(value));\n  }, {\n    injector,\n    manualCleanup: true\n  });\n  injector.get(DestroyRef).onDestroy(() => {\n    watcher.destroy();\n    subject.complete();\n  });\n  return subject.asObservable();\n}\n\n/**\n * Get the current value of an `Observable` as a reactive `Signal`.\n *\n * `toSignal` returns a `Signal` which provides synchronous reactive access to values produced\n * by the given `Observable`, by subscribing to that `Observable`. The returned `Signal` will always\n * have the most recent value emitted by the subscription, and will throw an error if the\n * `Observable` errors.\n *\n * With `requireSync` set to `true`, `toSignal` will assert that the `Observable` produces a value\n * immediately upon subscription. No `initialValue` is needed in this case, and the returned signal\n * does not include an `undefined` type.\n *\n * By default, the subscription will be automatically cleaned up when the current [injection\n * context](guide/di/dependency-injection-context) is destroyed. For example, when `toSignal` is\n * called during the construction of a component, the subscription will be cleaned up when the\n * component is destroyed. If an injection context is not available, an explicit `Injector` can be\n * passed instead.\n *\n * If the subscription should persist until the `Observable` itself completes, the `manualCleanup`\n * option can be specified instead, which disables the automatic subscription teardown. No injection\n * context is needed in this configuration as well.\n *\n * @see [RxJS interop with Angular signals](ecosystem/rxjs-interop)\n */\nfunction toSignal(source, options) {\n  typeof ngDevMode !== 'undefined' && ngDevMode && assertNotInReactiveContext(toSignal, 'Invoking `toSignal` causes new subscriptions every time. ' + 'Consider moving `toSignal` outside of the reactive context and read the signal value where needed.');\n  const requiresCleanup = !options?.manualCleanup;\n  if (ngDevMode && requiresCleanup && !options?.injector) {\n    assertInInjectionContext(toSignal);\n  }\n  const cleanupRef = requiresCleanup ? options?.injector?.get(DestroyRef) ?? inject(DestroyRef) : null;\n  const equal = makeToSignalEqual(options?.equal);\n  // Note: T is the Observable value type, and U is the initial value type. They don't have to be\n  // the same - the returned signal gives values of type `T`.\n  let state;\n  if (options?.requireSync) {\n    // Initially the signal is in a `NoValue` state.\n    state = signal({\n      kind: 0 /* StateKind.NoValue */\n    }, {\n      equal\n    });\n  } else {\n    // If an initial value was passed, use it. Otherwise, use `undefined` as the initial value.\n    state = signal({\n      kind: 1 /* StateKind.Value */,\n      value: options?.initialValue\n    }, {\n      equal\n    });\n  }\n  let destroyUnregisterFn;\n  // Note: This code cannot run inside a reactive context (see assertion above). If we'd support\n  // this, we would subscribe to the observable outside of the current reactive context, avoiding\n  // that side-effect signal reads/writes are attribute to the current consumer. The current\n  // consumer only needs to be notified when the `state` signal changes through the observable\n  // subscription. Additional context (related to async pipe):\n  // https://github.com/angular/angular/pull/50522.\n  const sub = source.subscribe({\n    next: value => state.set({\n      kind: 1 /* StateKind.Value */,\n      value\n    }),\n    error: error => {\n      state.set({\n        kind: 2 /* StateKind.Error */,\n        error\n      });\n      destroyUnregisterFn?.();\n    },\n    complete: () => {\n      destroyUnregisterFn?.();\n    }\n    // Completion of the Observable is meaningless to the signal. Signals don't have a concept of\n    // \"complete\".\n  });\n  if (options?.requireSync && state().kind === 0 /* StateKind.NoValue */) {\n    throw new RuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n  }\n  // Unsubscribe when the current context is destroyed, if requested.\n  destroyUnregisterFn = cleanupRef?.onDestroy(sub.unsubscribe.bind(sub));\n  // The actual returned signal is a `computed` of the `State` signal, which maps the various states\n  // to either values or errors.\n  return computed(() => {\n    const current = state();\n    switch (current.kind) {\n      case 1 /* StateKind.Value */:\n        return current.value;\n      case 2 /* StateKind.Error */:\n        throw current.error;\n      case 0 /* StateKind.NoValue */:\n        // This shouldn't really happen because the error is thrown on creation.\n        throw new RuntimeError(601 /* ɵRuntimeErrorCode.REQUIRE_SYNC_WITHOUT_SYNC_EMIT */, (typeof ngDevMode === 'undefined' || ngDevMode) && '`toSignal()` called with `requireSync` but `Observable` did not emit synchronously.');\n    }\n  }, {\n    equal: options?.equal\n  });\n}\nfunction makeToSignalEqual(userEquality = Object.is) {\n  return (a, b) => a.kind === 1 /* StateKind.Value */ && b.kind === 1 /* StateKind.Value */ && userEquality(a.value, b.value);\n}\n\n/**\n * Operator which makes the application unstable until the observable emits, completes, errors, or is unsubscribed.\n *\n * Use this operator in observables whose subscriptions are important for rendering and should be included in SSR serialization.\n *\n * @param injector The `Injector` to use during creation. If this is not provided, the current injection context will be used instead (via `inject`).\n *\n * @developerPreview 20.0\n */\nfunction pendingUntilEvent(injector) {\n  if (injector === undefined) {\n    ngDevMode && assertInInjectionContext(pendingUntilEvent);\n    injector = inject(Injector);\n  }\n  const taskService = injector.get(PendingTasks);\n  return sourceObservable => {\n    return new Observable(originalSubscriber => {\n      // create a new task on subscription\n      const removeTask = taskService.add();\n      let cleanedUp = false;\n      function cleanupTask() {\n        if (cleanedUp) {\n          return;\n        }\n        removeTask();\n        cleanedUp = true;\n      }\n      const innerSubscription = sourceObservable.subscribe({\n        next: v => {\n          originalSubscriber.next(v);\n          cleanupTask();\n        },\n        complete: () => {\n          originalSubscriber.complete();\n          cleanupTask();\n        },\n        error: e => {\n          originalSubscriber.error(e);\n          cleanupTask();\n        }\n      });\n      innerSubscription.add(() => {\n        originalSubscriber.unsubscribe();\n        cleanupTask();\n      });\n      return innerSubscription;\n    });\n  };\n}\nfunction rxResource(opts) {\n  if (ngDevMode && !opts?.injector) {\n    assertInInjectionContext(rxResource);\n  }\n  return resource({\n    ...opts,\n    loader: undefined,\n    stream: params => {\n      let sub;\n      // Track the abort listener so it can be removed if the Observable completes (as a memory\n      // optimization).\n      const onAbort = () => sub?.unsubscribe();\n      params.abortSignal.addEventListener('abort', onAbort);\n      // Start off stream as undefined.\n      const stream = signal({\n        value: undefined\n      });\n      let resolve;\n      const promise = new Promise(r => resolve = r);\n      function send(value) {\n        stream.set(value);\n        resolve?.(stream);\n        resolve = undefined;\n      }\n      // TODO(alxhub): remove after g3 updated to rename loader -> stream\n      const streamFn = opts.stream ?? opts.loader;\n      if (streamFn === undefined) {\n        throw new RuntimeError(990 /* ɵRuntimeErrorCode.MUST_PROVIDE_STREAM_OPTION */, ngDevMode && `Must provide \\`stream\\` option.`);\n      }\n      sub = streamFn(params).subscribe({\n        next: value => send({\n          value\n        }),\n        error: error => {\n          send({\n            error: encapsulateResourceError(error)\n          });\n          params.abortSignal.removeEventListener('abort', onAbort);\n        },\n        complete: () => {\n          if (resolve) {\n            send({\n              error: new RuntimeError(991 /* ɵRuntimeErrorCode.RESOURCE_COMPLETED_BEFORE_PRODUCING_VALUE */, ngDevMode && 'Resource completed before producing a value')\n            });\n          }\n          params.abortSignal.removeEventListener('abort', onAbort);\n        }\n      });\n      return promise;\n    }\n  });\n}\nexport { outputFromObservable, outputToObservable, pendingUntilEvent, rxResource, takeUntilDestroyed, toObservable, toSignal };\n","/**\n * marked v15.0.12 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n// src/defaults.ts\nfunction _getDefaults() {\n  return {\n    async: false,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    hooks: null,\n    pedantic: false,\n    renderer: null,\n    silent: false,\n    tokenizer: null,\n    walkTokens: null\n  };\n}\nvar _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n  _defaults = newDefaults;\n}\n\n// src/rules.ts\nvar noopTest = {\n  exec: () => null\n};\nfunction edit(regex, opt = \"\") {\n  let source = typeof regex === \"string\" ? regex : regex.source;\n  const obj = {\n    replace: (name, val) => {\n      let valSource = typeof val === \"string\" ? val : val.source;\n      valSource = valSource.replace(other.caret, \"$1\");\n      source = source.replace(name, valSource);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(source, opt);\n    }\n  };\n  return obj;\n}\nvar other = {\n  codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n  outputLinkReplace: /\\\\([\\[\\]])/g,\n  indentCodeCompensation: /^(\\s+)(?:```)/,\n  beginningSpace: /^\\s+/,\n  endingHash: /#$/,\n  startingSpaceChar: /^ /,\n  endingSpaceChar: / $/,\n  nonSpaceChar: /[^ ]/,\n  newLineCharGlobal: /\\n/g,\n  tabCharGlobal: /\\t/g,\n  multipleSpaceGlobal: /\\s+/g,\n  blankLine: /^[ \\t]*$/,\n  doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n  blockquoteStart: /^ {0,3}>/,\n  blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n  blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n  listReplaceTabs: /^\\t+/,\n  listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n  listIsTask: /^\\[[ xX]\\] /,\n  listReplaceTask: /^\\[[ xX]\\] +/,\n  anyLine: /\\n.*\\n/,\n  hrefBrackets: /^<(.*)>$/,\n  tableDelimiter: /[:|]/,\n  tableAlignChars: /^\\||\\| *$/g,\n  tableRowBlankLine: /\\n[ \\t]*$/,\n  tableAlignRight: /^ *-+: *$/,\n  tableAlignCenter: /^ *:-+: *$/,\n  tableAlignLeft: /^ *:-+ *$/,\n  startATag: /^<a /i,\n  endATag: /^<\\/a>/i,\n  startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n  endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n  startAngleBracket: /^</,\n  endAngleBracket: />$/,\n  pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n  unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n  escapeTest: /[&<>\"']/,\n  escapeReplace: /[&<>\"']/g,\n  escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n  escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n  unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n  caret: /(^|[^\\[])\\^/g,\n  percentDecode: /%25/g,\n  findPipe: /\\|/g,\n  splitPipe: / \\|/,\n  slashPipe: /\\\\\\|/g,\n  carriageReturn: /\\r\\n|\\r/g,\n  spaceLine: /^ +$/gm,\n  notSpaceStart: /^\\S*/,\n  endingNewline: /\\n$/,\n  listItemRegex: bull => new RegExp(`^( {0,3}${bull})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),\n  nextBulletRegex: indent => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),\n  hrRegex: indent => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n  fencesBeginRegex: indent => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n  headingBeginRegex: indent => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n  htmlBeginRegex: indent => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, \"i\")\n};\nvar newline = /^(?:[ \\t]*(?:\\n|$))+/;\nvar blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nvar fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nvar hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nvar heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nvar bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nvar lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nvar lheading = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g, \"\").getRegex();\nvar lheadingGfm = edit(lheadingCore).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\\n>]+>\\n/).replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex();\nvar _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nvar blockText = /^[^\\n]+/;\nvar _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nvar def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\", _blockLabel).replace(\"title\", /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex();\nvar list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g, bullet).getRegex();\nvar _tag = \"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\";\nvar _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nvar html = edit(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\", \"i\").replace(\"comment\", _comment).replace(\"tag\", _tag).replace(\"attribute\", / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\nvar paragraph = edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\", paragraph).getRegex();\nvar blockNormal = {\n  blockquote,\n  code: blockCode,\n  def,\n  fences,\n  heading,\n  hr,\n  html,\n  lheading,\n  list,\n  newline,\n  paragraph,\n  table: noopTest,\n  text: blockText\n};\nvar gfmTable = edit(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\", \" {0,3}>\").replace(\"code\", \"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex();\nvar blockGfm = {\n  ...blockNormal,\n  lheading: lheadingGfm,\n  table: gfmTable,\n  paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\", \"\").replace(\"table\", gfmTable).replace(\"blockquote\", \" {0,3}>\").replace(\"fences\", \" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\", \" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\", \"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\", _tag).getRegex()\n};\nvar blockPedantic = {\n  ...blockNormal,\n  html: edit(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\", _comment).replace(/tag/g, \"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest,\n  // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(_paragraph).replace(\"hr\", hr).replace(\"heading\", \" *#{1,6} *[^\\n]\").replace(\"lheading\", lheading).replace(\"|table\", \"\").replace(\"blockquote\", \" {0,3}>\").replace(\"|fences\", \"\").replace(\"|list\", \"\").replace(\"|html\", \"\").replace(\"|tag\", \"\").getRegex()\n};\nvar escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nvar inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nvar br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nvar inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\nvar _punctuation = /[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nvar punctuation = edit(/^((?![*_])punctSpace)/, \"u\").replace(/punctSpace/g, _punctuationOrSpace).getRegex();\nvar _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nvar _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nvar _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\nvar blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nvar emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\nvar emStrongLDelim = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuation).getRegex();\nvar emStrongLDelimGfm = edit(emStrongLDelimCore, \"u\").replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimAstCore = \"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\";\nvar emStrongRDelimAst = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();\nvar emStrongRDelimUnd = edit(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\", \"gu\").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();\nvar anyPunctuation = edit(/\\\\(punct)/, \"gu\").replace(/punct/g, _punctuation).getRegex();\nvar autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();\nvar _inlineComment = edit(_comment).replace(\"(?:-->|$)\", \"-->\").getRegex();\nvar tag = edit(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\", _inlineComment).replace(\"attribute\", /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex();\nvar _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nvar link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\", _inlineLabel).replace(\"href\", /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\", /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex();\nvar reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\", _inlineLabel).replace(\"ref\", _blockLabel).getRegex();\nvar nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\", _blockLabel).getRegex();\nvar reflinkSearch = edit(\"reflink|nolink(?!\\\\()\", \"g\").replace(\"reflink\", reflink).replace(\"nolink\", nolink).getRegex();\nvar inlineNormal = {\n  _backpedal: noopTest,\n  // only used for GFM url\n  anyPunctuation,\n  autolink,\n  blockSkip,\n  br,\n  code: inlineCode,\n  del: noopTest,\n  emStrongLDelim,\n  emStrongRDelimAst,\n  emStrongRDelimUnd,\n  escape,\n  link,\n  nolink,\n  punctuation,\n  reflink,\n  reflinkSearch,\n  tag,\n  text: inlineText,\n  url: noopTest\n};\nvar inlinePedantic = {\n  ...inlineNormal,\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\", _inlineLabel).getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\", _inlineLabel).getRegex()\n};\nvar inlineGfm = {\n  ...inlineNormal,\n  emStrongRDelimAst: emStrongRDelimAstGfm,\n  emStrongLDelim: emStrongLDelimGfm,\n  url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, \"i\").replace(\"email\", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n  text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\nvar inlineBreaks = {\n  ...inlineGfm,\n  br: edit(br).replace(\"{2,}\", \"*\").getRegex(),\n  text: edit(inlineGfm.text).replace(\"\\\\b_\", \"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g, \"*\").getRegex()\n};\nvar block = {\n  normal: blockNormal,\n  gfm: blockGfm,\n  pedantic: blockPedantic\n};\nvar inline = {\n  normal: inlineNormal,\n  gfm: inlineGfm,\n  breaks: inlineBreaks,\n  pedantic: inlinePedantic\n};\n\n// src/helpers.ts\nvar escapeReplacements = {\n  \"&\": \"&amp;\",\n  \"<\": \"&lt;\",\n  \">\": \"&gt;\",\n  '\"': \"&quot;\",\n  \"'\": \"&#39;\"\n};\nvar getEscapeReplacement = ch => escapeReplacements[ch];\nfunction escape2(html2, encode) {\n  if (encode) {\n    if (other.escapeTest.test(html2)) {\n      return html2.replace(other.escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (other.escapeTestNoEncode.test(html2)) {\n      return html2.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n  return html2;\n}\nfunction cleanUrl(href) {\n  try {\n    href = encodeURI(href).replace(other.percentDecode, \"%\");\n  } catch {\n    return null;\n  }\n  return href;\n}\nfunction splitCells(tableRow, count) {\n  const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n      let escaped = false;\n      let curr = offset;\n      while (--curr >= 0 && str[curr] === \"\\\\\") escaped = !escaped;\n      if (escaped) {\n        return \"|\";\n      } else {\n        return \" |\";\n      }\n    }),\n    cells = row.split(other.splitPipe);\n  let i = 0;\n  if (!cells[0].trim()) {\n    cells.shift();\n  }\n  if (cells.length > 0 && !cells.at(-1)?.trim()) {\n    cells.pop();\n  }\n  if (count) {\n    if (cells.length > count) {\n      cells.splice(count);\n    } else {\n      while (cells.length < count) cells.push(\"\");\n    }\n  }\n  for (; i < cells.length; i++) {\n    cells[i] = cells[i].trim().replace(other.slashPipe, \"|\");\n  }\n  return cells;\n}\nfunction rtrim(str, c, invert) {\n  const l = str.length;\n  if (l === 0) {\n    return \"\";\n  }\n  let suffLen = 0;\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n  return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n  if (str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n  let level = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === \"\\\\\") {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  if (level > 0) {\n    return -2;\n  }\n  return -1;\n}\n\n// src/Tokenizer.ts\nfunction outputLink(cap, link2, raw, lexer2, rules) {\n  const href = link2.href;\n  const title = link2.title || null;\n  const text = cap[1].replace(rules.other.outputLinkReplace, \"$1\");\n  lexer2.state.inLink = true;\n  const token = {\n    type: cap[0].charAt(0) === \"!\" ? \"image\" : \"link\",\n    raw,\n    href,\n    title,\n    text,\n    tokens: lexer2.inlineTokens(text)\n  };\n  lexer2.state.inLink = false;\n  return token;\n}\nfunction indentCodeCompensation(raw, text, rules) {\n  const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n  if (matchIndentToCode === null) {\n    return text;\n  }\n  const indentToCode = matchIndentToCode[1];\n  return text.split(\"\\n\").map(node => {\n    const matchIndentInNode = node.match(rules.other.beginningSpace);\n    if (matchIndentInNode === null) {\n      return node;\n    }\n    const [indentInNode] = matchIndentInNode;\n    if (indentInNode.length >= indentToCode.length) {\n      return node.slice(indentToCode.length);\n    }\n    return node;\n  }).join(\"\\n\");\n}\nvar _Tokenizer = class {\n  options;\n  rules;\n  // set by the lexer\n  lexer;\n  // set by the lexer\n  constructor(options2) {\n    this.options = options2 || _defaults;\n  }\n  space(src) {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: \"space\",\n        raw: cap[0]\n      };\n    }\n  }\n  code(src) {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const text = cap[0].replace(this.rules.other.codeRemoveIndent, \"\");\n      return {\n        type: \"code\",\n        raw: cap[0],\n        codeBlockStyle: \"indented\",\n        text: !this.options.pedantic ? rtrim(text, \"\\n\") : text\n      };\n    }\n  }\n  fences(src) {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || \"\", this.rules);\n      return {\n        type: \"code\",\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, \"$1\") : cap[2],\n        text\n      };\n    }\n  }\n  heading(src) {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n      if (this.rules.other.endingHash.test(text)) {\n        const trimmed = rtrim(text, \"#\");\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n          text = trimmed.trim();\n        }\n      }\n      return {\n        type: \"heading\",\n        raw: cap[0],\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n  hr(src) {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: \"hr\",\n        raw: rtrim(cap[0], \"\\n\")\n      };\n    }\n  }\n  blockquote(src) {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      let lines = rtrim(cap[0], \"\\n\").split(\"\\n\");\n      let raw = \"\";\n      let text = \"\";\n      const tokens = [];\n      while (lines.length > 0) {\n        let inBlockquote = false;\n        const currentLines = [];\n        let i;\n        for (i = 0; i < lines.length; i++) {\n          if (this.rules.other.blockquoteStart.test(lines[i])) {\n            currentLines.push(lines[i]);\n            inBlockquote = true;\n          } else if (!inBlockquote) {\n            currentLines.push(lines[i]);\n          } else {\n            break;\n          }\n        }\n        lines = lines.slice(i);\n        const currentRaw = currentLines.join(\"\\n\");\n        const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, \"\\n    $1\").replace(this.rules.other.blockquoteSetextReplace2, \"\");\n        raw = raw ? `${raw}\n${currentRaw}` : currentRaw;\n        text = text ? `${text}\n${currentText}` : currentText;\n        const top = this.lexer.state.top;\n        this.lexer.state.top = true;\n        this.lexer.blockTokens(currentText, tokens, true);\n        this.lexer.state.top = top;\n        if (lines.length === 0) {\n          break;\n        }\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === \"code\") {\n          break;\n        } else if (lastToken?.type === \"blockquote\") {\n          const oldToken = lastToken;\n          const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n          const newToken = this.blockquote(newText);\n          tokens[tokens.length - 1] = newToken;\n          raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n          break;\n        } else if (lastToken?.type === \"list\") {\n          const oldToken = lastToken;\n          const newText = oldToken.raw + \"\\n\" + lines.join(\"\\n\");\n          const newToken = this.list(newText);\n          tokens[tokens.length - 1] = newToken;\n          raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n          lines = newText.substring(tokens.at(-1).raw.length).split(\"\\n\");\n          continue;\n        }\n      }\n      return {\n        type: \"blockquote\",\n        raw,\n        tokens,\n        text\n      };\n    }\n  }\n  list(src) {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n      const list2 = {\n        type: \"list\",\n        raw: \"\",\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : \"\",\n        loose: false,\n        items: []\n      };\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n      if (this.options.pedantic) {\n        bull = isordered ? bull : \"[*+-]\";\n      }\n      const itemRegex = this.rules.other.listItemRegex(bull);\n      let endsWithBlankLine = false;\n      while (src) {\n        let endEarly = false;\n        let raw = \"\";\n        let itemContents = \"\";\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n        if (this.rules.block.hr.test(src)) {\n          break;\n        }\n        raw = cap[0];\n        src = src.substring(raw.length);\n        let line = cap[2].split(\"\\n\", 1)[0].replace(this.rules.other.listReplaceTabs, t => \" \".repeat(3 * t.length));\n        let nextLine = src.split(\"\\n\", 1)[0];\n        let blankLine = !line.trim();\n        let indent = 0;\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimStart();\n        } else if (blankLine) {\n          indent = cap[1].length + 1;\n        } else {\n          indent = cap[2].search(this.rules.other.nonSpaceChar);\n          indent = indent > 4 ? 1 : indent;\n          itemContents = line.slice(indent);\n          indent += cap[1].length;\n        }\n        if (blankLine && this.rules.other.blankLine.test(nextLine)) {\n          raw += nextLine + \"\\n\";\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n        if (!endEarly) {\n          const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n          const hrRegex = this.rules.other.hrRegex(indent);\n          const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n          const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n          const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n          while (src) {\n            const rawLine = src.split(\"\\n\", 1)[0];\n            let nextLineWithoutTabs;\n            nextLine = rawLine;\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(this.rules.other.listReplaceNesting, \"  \");\n              nextLineWithoutTabs = nextLine;\n            } else {\n              nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, \"    \");\n            }\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n            if (htmlBeginRegex.test(nextLine)) {\n              break;\n            }\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n            if (hrRegex.test(nextLine)) {\n              break;\n            }\n            if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {\n              itemContents += \"\\n\" + nextLineWithoutTabs.slice(indent);\n            } else {\n              if (blankLine) {\n                break;\n              }\n              if (line.replace(this.rules.other.tabCharGlobal, \"    \").search(this.rules.other.nonSpaceChar) >= 4) {\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n              itemContents += \"\\n\" + nextLine;\n            }\n            if (!blankLine && !nextLine.trim()) {\n              blankLine = true;\n            }\n            raw += rawLine + \"\\n\";\n            src = src.substring(rawLine.length + 1);\n            line = nextLineWithoutTabs.slice(indent);\n          }\n        }\n        if (!list2.loose) {\n          if (endsWithBlankLine) {\n            list2.loose = true;\n          } else if (this.rules.other.doubleBlankLine.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n        let istask = null;\n        let ischecked;\n        if (this.options.gfm) {\n          istask = this.rules.other.listIsTask.exec(itemContents);\n          if (istask) {\n            ischecked = istask[0] !== \"[ ] \";\n            itemContents = itemContents.replace(this.rules.other.listReplaceTask, \"\");\n          }\n        }\n        list2.items.push({\n          type: \"list_item\",\n          raw,\n          task: !!istask,\n          checked: ischecked,\n          loose: false,\n          text: itemContents,\n          tokens: []\n        });\n        list2.raw += raw;\n      }\n      const lastItem = list2.items.at(-1);\n      if (lastItem) {\n        lastItem.raw = lastItem.raw.trimEnd();\n        lastItem.text = lastItem.text.trimEnd();\n      } else {\n        return;\n      }\n      list2.raw = list2.raw.trimEnd();\n      for (let i = 0; i < list2.items.length; i++) {\n        this.lexer.state.top = false;\n        list2.items[i].tokens = this.lexer.blockTokens(list2.items[i].text, []);\n        if (!list2.loose) {\n          const spacers = list2.items[i].tokens.filter(t => t.type === \"space\");\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n          list2.loose = hasMultipleLineBreaks;\n        }\n      }\n      if (list2.loose) {\n        for (let i = 0; i < list2.items.length; i++) {\n          list2.items[i].loose = true;\n        }\n      }\n      return list2;\n    }\n  }\n  html(src) {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const token = {\n        type: \"html\",\n        block: true,\n        raw: cap[0],\n        pre: cap[1] === \"pre\" || cap[1] === \"script\" || cap[1] === \"style\",\n        text: cap[0]\n      };\n      return token;\n    }\n  }\n  def(src) {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, \" \");\n      const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, \"$1\").replace(this.rules.inline.anyPunctuation, \"$1\") : \"\";\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, \"$1\") : cap[3];\n      return {\n        type: \"def\",\n        tag: tag2,\n        raw: cap[0],\n        href,\n        title\n      };\n    }\n  }\n  table(src) {\n    const cap = this.rules.block.table.exec(src);\n    if (!cap) {\n      return;\n    }\n    if (!this.rules.other.tableDelimiter.test(cap[2])) {\n      return;\n    }\n    const headers = splitCells(cap[1]);\n    const aligns = cap[2].replace(this.rules.other.tableAlignChars, \"\").split(\"|\");\n    const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, \"\").split(\"\\n\") : [];\n    const item = {\n      type: \"table\",\n      raw: cap[0],\n      header: [],\n      align: [],\n      rows: []\n    };\n    if (headers.length !== aligns.length) {\n      return;\n    }\n    for (const align of aligns) {\n      if (this.rules.other.tableAlignRight.test(align)) {\n        item.align.push(\"right\");\n      } else if (this.rules.other.tableAlignCenter.test(align)) {\n        item.align.push(\"center\");\n      } else if (this.rules.other.tableAlignLeft.test(align)) {\n        item.align.push(\"left\");\n      } else {\n        item.align.push(null);\n      }\n    }\n    for (let i = 0; i < headers.length; i++) {\n      item.header.push({\n        text: headers[i],\n        tokens: this.lexer.inline(headers[i]),\n        header: true,\n        align: item.align[i]\n      });\n    }\n    for (const row of rows) {\n      item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n        return {\n          text: cell,\n          tokens: this.lexer.inline(cell),\n          header: false,\n          align: item.align[i]\n        };\n      }));\n    }\n    return item;\n  }\n  lheading(src) {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      return {\n        type: \"heading\",\n        raw: cap[0],\n        depth: cap[2].charAt(0) === \"=\" ? 1 : 2,\n        text: cap[1],\n        tokens: this.lexer.inline(cap[1])\n      };\n    }\n  }\n  paragraph(src) {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === \"\\n\" ? cap[1].slice(0, -1) : cap[1];\n      return {\n        type: \"paragraph\",\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n  text(src) {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: \"text\",\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0])\n      };\n    }\n  }\n  escape(src) {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: \"escape\",\n        raw: cap[0],\n        text: cap[1]\n      };\n    }\n  }\n  tag(src) {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n      return {\n        type: \"html\",\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        block: false,\n        text: cap[0]\n      };\n    }\n  }\n  link(src) {\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n        if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {\n          return;\n        }\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), \"\\\\\");\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        const lastParenIndex = findClosingBracket(cap[2], \"()\");\n        if (lastParenIndex === -2) {\n          return;\n        }\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf(\"!\") === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = \"\";\n        }\n      }\n      let href = cap[2];\n      let title = \"\";\n      if (this.options.pedantic) {\n        const link2 = this.rules.other.pedanticHrefTitle.exec(href);\n        if (link2) {\n          href = link2[1];\n          title = link2[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : \"\";\n      }\n      href = href.trim();\n      if (this.rules.other.startAngleBracket.test(href)) {\n        if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline.anyPunctuation, \"$1\") : href,\n        title: title ? title.replace(this.rules.inline.anyPunctuation, \"$1\") : title\n      }, cap[0], this.lexer, this.rules);\n    }\n  }\n  reflink(src, links) {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n      const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, \" \");\n      const link2 = links[linkString.toLowerCase()];\n      if (!link2) {\n        const text = cap[0].charAt(0);\n        return {\n          type: \"text\",\n          raw: text,\n          text\n        };\n      }\n      return outputLink(cap, link2, cap[0], this.lexer, this.rules);\n    }\n  }\n  emStrong(src, maskedSrc, prevChar = \"\") {\n    let match = this.rules.inline.emStrongLDelim.exec(src);\n    if (!match) return;\n    if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n    const nextChar = match[1] || match[2] || \"\";\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      const lLength = [...match[0]].length - 1;\n      let rDelim,\n        rLength,\n        delimTotal = lLength,\n        midDelimTotal = 0;\n      const endReg = match[0][0] === \"*\" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n      endReg.lastIndex = 0;\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n      while ((match = endReg.exec(maskedSrc)) != null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n        if (!rDelim) continue;\n        rLength = [...rDelim].length;\n        if (match[3] || match[4]) {\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) {\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue;\n          }\n        }\n        delimTotal -= rLength;\n        if (delimTotal > 0) continue;\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n        if (Math.min(lLength, rLength) % 2) {\n          const text2 = raw.slice(1, -1);\n          return {\n            type: \"em\",\n            raw,\n            text: text2,\n            tokens: this.lexer.inlineTokens(text2)\n          };\n        }\n        const text = raw.slice(2, -2);\n        return {\n          type: \"strong\",\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text)\n        };\n      }\n    }\n  }\n  codespan(src) {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(this.rules.other.newLineCharGlobal, \" \");\n      const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n      const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      return {\n        type: \"codespan\",\n        raw: cap[0],\n        text\n      };\n    }\n  }\n  br(src) {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: \"br\",\n        raw: cap[0]\n      };\n    }\n  }\n  del(src) {\n    const cap = this.rules.inline.del.exec(src);\n    if (cap) {\n      return {\n        type: \"del\",\n        raw: cap[0],\n        text: cap[2],\n        tokens: this.lexer.inlineTokens(cap[2])\n      };\n    }\n  }\n  autolink(src) {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === \"@\") {\n        text = cap[1];\n        href = \"mailto:\" + text;\n      } else {\n        text = cap[1];\n        href = text;\n      }\n      return {\n        type: \"link\",\n        raw: cap[0],\n        text,\n        href,\n        tokens: [{\n          type: \"text\",\n          raw: text,\n          text\n        }]\n      };\n    }\n  }\n  url(src) {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === \"@\") {\n        text = cap[0];\n        href = \"mailto:\" + text;\n      } else {\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? \"\";\n        } while (prevCapZero !== cap[0]);\n        text = cap[0];\n        if (cap[1] === \"www.\") {\n          href = \"http://\" + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: \"link\",\n        raw: cap[0],\n        text,\n        href,\n        tokens: [{\n          type: \"text\",\n          raw: text,\n          text\n        }]\n      };\n    }\n  }\n  inlineText(src) {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      const escaped = this.lexer.state.inRawBlock;\n      return {\n        type: \"text\",\n        raw: cap[0],\n        text: cap[0],\n        escaped\n      };\n    }\n  }\n};\n\n// src/Lexer.ts\nvar _Lexer = class __Lexer {\n  tokens;\n  options;\n  state;\n  tokenizer;\n  inlineQueue;\n  constructor(options2) {\n    this.tokens = [];\n    this.tokens.links = /* @__PURE__ */Object.create(null);\n    this.options = options2 || _defaults;\n    this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      top: true\n    };\n    const rules = {\n      other,\n      block: block.normal,\n      inline: inline.normal\n    };\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline\n    };\n  }\n  /**\n   * Static Lex Method\n   */\n  static lex(src, options2) {\n    const lexer2 = new __Lexer(options2);\n    return lexer2.lex(src);\n  }\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline(src, options2) {\n    const lexer2 = new __Lexer(options2);\n    return lexer2.inlineTokens(src);\n  }\n  /**\n   * Preprocessing\n   */\n  lex(src) {\n    src = src.replace(other.carriageReturn, \"\\n\");\n    this.blockTokens(src, this.tokens);\n    for (let i = 0; i < this.inlineQueue.length; i++) {\n      const next = this.inlineQueue[i];\n      this.inlineTokens(next.src, next.tokens);\n    }\n    this.inlineQueue = [];\n    return this.tokens;\n  }\n  blockTokens(src, tokens = [], lastParagraphClipped = false) {\n    if (this.options.pedantic) {\n      src = src.replace(other.tabCharGlobal, \"    \").replace(other.spaceLine, \"\");\n    }\n    while (src) {\n      let token;\n      if (this.options.extensions?.block?.some(extTokenizer => {\n        if (token = extTokenizer.call({\n          lexer: this\n        }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.raw.length === 1 && lastToken !== void 0) {\n          lastToken.raw += \"\\n\";\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n          lastToken.raw += \"\\n\" + token.raw;\n          lastToken.text += \"\\n\" + token.text;\n          this.inlineQueue.at(-1).src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === \"paragraph\" || lastToken?.type === \"text\") {\n          lastToken.raw += \"\\n\" + token.raw;\n          lastToken.text += \"\\n\" + token.raw;\n          this.inlineQueue.at(-1).src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title\n          };\n        }\n        continue;\n      }\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      let cutSrc = src;\n      if (this.options.extensions?.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach(getStartIndex => {\n          tempStart = getStartIndex.call({\n            lexer: this\n          }, tempSrc);\n          if (typeof tempStart === \"number\" && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        const lastToken = tokens.at(-1);\n        if (lastParagraphClipped && lastToken?.type === \"paragraph\") {\n          lastToken.raw += \"\\n\" + token.raw;\n          lastToken.text += \"\\n\" + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1).src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = cutSrc.length !== src.length;\n        src = src.substring(token.raw.length);\n        continue;\n      }\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === \"text\") {\n          lastToken.raw += \"\\n\" + token.raw;\n          lastToken.text += \"\\n\" + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1).src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n      if (src) {\n        const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n    this.state.top = true;\n    return tokens;\n  }\n  inline(src, tokens = []) {\n    this.inlineQueue.push({\n      src,\n      tokens\n    });\n    return tokens;\n  }\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src, tokens = []) {\n    let maskedSrc = src;\n    let match = null;\n    if (this.tokens.links) {\n      const links = Object.keys(this.tokens.links);\n      if (links.length > 0) {\n        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n          if (links.includes(match[0].slice(match[0].lastIndexOf(\"[\") + 1, -1))) {\n            maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n          }\n        }\n      }\n    }\n    while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + \"++\" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n    }\n    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + \"[\" + \"a\".repeat(match[0].length - 2) + \"]\" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n    }\n    let keepPrevChar = false;\n    let prevChar = \"\";\n    while (src) {\n      if (!keepPrevChar) {\n        prevChar = \"\";\n      }\n      keepPrevChar = false;\n      let token;\n      if (this.options.extensions?.inline?.some(extTokenizer => {\n        if (token = extTokenizer.call({\n          lexer: this\n        }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.type === \"text\" && lastToken?.type === \"text\") {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.del(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (token = this.tokenizer.autolink(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n      let cutSrc = src;\n      if (this.options.extensions?.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach(getStartIndex => {\n          tempStart = getStartIndex.call({\n            lexer: this\n          }, tempSrc);\n          if (typeof tempStart === \"number\" && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== \"_\") {\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === \"text\") {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n      if (src) {\n        const errMsg = \"Infinite loop on byte: \" + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n    return tokens;\n  }\n};\n\n// src/Renderer.ts\nvar _Renderer = class {\n  options;\n  parser;\n  // set by the parser\n  constructor(options2) {\n    this.options = options2 || _defaults;\n  }\n  space(token) {\n    return \"\";\n  }\n  code({\n    text,\n    lang,\n    escaped\n  }) {\n    const langString = (lang || \"\").match(other.notSpaceStart)?.[0];\n    const code = text.replace(other.endingNewline, \"\") + \"\\n\";\n    if (!langString) {\n      return \"<pre><code>\" + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n    }\n    return '<pre><code class=\"language-' + escape2(langString) + '\">' + (escaped ? code : escape2(code, true)) + \"</code></pre>\\n\";\n  }\n  blockquote({\n    tokens\n  }) {\n    const body = this.parser.parse(tokens);\n    return `<blockquote>\n${body}</blockquote>\n`;\n  }\n  html({\n    text\n  }) {\n    return text;\n  }\n  heading({\n    tokens,\n    depth\n  }) {\n    return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\n`;\n  }\n  hr(token) {\n    return \"<hr>\\n\";\n  }\n  list(token) {\n    const ordered = token.ordered;\n    const start = token.start;\n    let body = \"\";\n    for (let j = 0; j < token.items.length; j++) {\n      const item = token.items[j];\n      body += this.listitem(item);\n    }\n    const type = ordered ? \"ol\" : \"ul\";\n    const startAttr = ordered && start !== 1 ? ' start=\"' + start + '\"' : \"\";\n    return \"<\" + type + startAttr + \">\\n\" + body + \"</\" + type + \">\\n\";\n  }\n  listitem(item) {\n    let itemBody = \"\";\n    if (item.task) {\n      const checkbox = this.checkbox({\n        checked: !!item.checked\n      });\n      if (item.loose) {\n        if (item.tokens[0]?.type === \"paragraph\") {\n          item.tokens[0].text = checkbox + \" \" + item.tokens[0].text;\n          if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === \"text\") {\n            item.tokens[0].tokens[0].text = checkbox + \" \" + escape2(item.tokens[0].tokens[0].text);\n            item.tokens[0].tokens[0].escaped = true;\n          }\n        } else {\n          item.tokens.unshift({\n            type: \"text\",\n            raw: checkbox + \" \",\n            text: checkbox + \" \",\n            escaped: true\n          });\n        }\n      } else {\n        itemBody += checkbox + \" \";\n      }\n    }\n    itemBody += this.parser.parse(item.tokens, !!item.loose);\n    return `<li>${itemBody}</li>\n`;\n  }\n  checkbox({\n    checked\n  }) {\n    return \"<input \" + (checked ? 'checked=\"\" ' : \"\") + 'disabled=\"\" type=\"checkbox\">';\n  }\n  paragraph({\n    tokens\n  }) {\n    return `<p>${this.parser.parseInline(tokens)}</p>\n`;\n  }\n  table(token) {\n    let header = \"\";\n    let cell = \"\";\n    for (let j = 0; j < token.header.length; j++) {\n      cell += this.tablecell(token.header[j]);\n    }\n    header += this.tablerow({\n      text: cell\n    });\n    let body = \"\";\n    for (let j = 0; j < token.rows.length; j++) {\n      const row = token.rows[j];\n      cell = \"\";\n      for (let k = 0; k < row.length; k++) {\n        cell += this.tablecell(row[k]);\n      }\n      body += this.tablerow({\n        text: cell\n      });\n    }\n    if (body) body = `<tbody>${body}</tbody>`;\n    return \"<table>\\n<thead>\\n\" + header + \"</thead>\\n\" + body + \"</table>\\n\";\n  }\n  tablerow({\n    text\n  }) {\n    return `<tr>\n${text}</tr>\n`;\n  }\n  tablecell(token) {\n    const content = this.parser.parseInline(token.tokens);\n    const type = token.header ? \"th\" : \"td\";\n    const tag2 = token.align ? `<${type} align=\"${token.align}\">` : `<${type}>`;\n    return tag2 + content + `</${type}>\n`;\n  }\n  /**\n   * span level renderer\n   */\n  strong({\n    tokens\n  }) {\n    return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n  }\n  em({\n    tokens\n  }) {\n    return `<em>${this.parser.parseInline(tokens)}</em>`;\n  }\n  codespan({\n    text\n  }) {\n    return `<code>${escape2(text, true)}</code>`;\n  }\n  br(token) {\n    return \"<br>\";\n  }\n  del({\n    tokens\n  }) {\n    return `<del>${this.parser.parseInline(tokens)}</del>`;\n  }\n  link({\n    href,\n    title,\n    tokens\n  }) {\n    const text = this.parser.parseInline(tokens);\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return text;\n    }\n    href = cleanHref;\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + escape2(title) + '\"';\n    }\n    out += \">\" + text + \"</a>\";\n    return out;\n  }\n  image({\n    href,\n    title,\n    text,\n    tokens\n  }) {\n    if (tokens) {\n      text = this.parser.parseInline(tokens, this.parser.textRenderer);\n    }\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return escape2(text);\n    }\n    href = cleanHref;\n    let out = `<img src=\"${href}\" alt=\"${text}\"`;\n    if (title) {\n      out += ` title=\"${escape2(title)}\"`;\n    }\n    out += \">\";\n    return out;\n  }\n  text(token) {\n    return \"tokens\" in token && token.tokens ? this.parser.parseInline(token.tokens) : \"escaped\" in token && token.escaped ? token.text : escape2(token.text);\n  }\n};\n\n// src/TextRenderer.ts\nvar _TextRenderer = class {\n  // no need for block level renderers\n  strong({\n    text\n  }) {\n    return text;\n  }\n  em({\n    text\n  }) {\n    return text;\n  }\n  codespan({\n    text\n  }) {\n    return text;\n  }\n  del({\n    text\n  }) {\n    return text;\n  }\n  html({\n    text\n  }) {\n    return text;\n  }\n  text({\n    text\n  }) {\n    return text;\n  }\n  link({\n    text\n  }) {\n    return \"\" + text;\n  }\n  image({\n    text\n  }) {\n    return \"\" + text;\n  }\n  br() {\n    return \"\";\n  }\n};\n\n// src/Parser.ts\nvar _Parser = class __Parser {\n  options;\n  renderer;\n  textRenderer;\n  constructor(options2) {\n    this.options = options2 || _defaults;\n    this.options.renderer = this.options.renderer || new _Renderer();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.renderer.parser = this;\n    this.textRenderer = new _TextRenderer();\n  }\n  /**\n   * Static Parse Method\n   */\n  static parse(tokens, options2) {\n    const parser2 = new __Parser(options2);\n    return parser2.parse(tokens);\n  }\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline(tokens, options2) {\n    const parser2 = new __Parser(options2);\n    return parser2.parseInline(tokens);\n  }\n  /**\n   * Parse Loop\n   */\n  parse(tokens, top = true) {\n    let out = \"\";\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const genericToken = anyToken;\n        const ret = this.options.extensions.renderers[genericToken.type].call({\n          parser: this\n        }, genericToken);\n        if (ret !== false || ![\"space\", \"hr\", \"heading\", \"code\", \"table\", \"blockquote\", \"list\", \"html\", \"paragraph\", \"text\"].includes(genericToken.type)) {\n          out += ret || \"\";\n          continue;\n        }\n      }\n      const token = anyToken;\n      switch (token.type) {\n        case \"space\":\n          {\n            out += this.renderer.space(token);\n            continue;\n          }\n        case \"hr\":\n          {\n            out += this.renderer.hr(token);\n            continue;\n          }\n        case \"heading\":\n          {\n            out += this.renderer.heading(token);\n            continue;\n          }\n        case \"code\":\n          {\n            out += this.renderer.code(token);\n            continue;\n          }\n        case \"table\":\n          {\n            out += this.renderer.table(token);\n            continue;\n          }\n        case \"blockquote\":\n          {\n            out += this.renderer.blockquote(token);\n            continue;\n          }\n        case \"list\":\n          {\n            out += this.renderer.list(token);\n            continue;\n          }\n        case \"html\":\n          {\n            out += this.renderer.html(token);\n            continue;\n          }\n        case \"paragraph\":\n          {\n            out += this.renderer.paragraph(token);\n            continue;\n          }\n        case \"text\":\n          {\n            let textToken = token;\n            let body = this.renderer.text(textToken);\n            while (i + 1 < tokens.length && tokens[i + 1].type === \"text\") {\n              textToken = tokens[++i];\n              body += \"\\n\" + this.renderer.text(textToken);\n            }\n            if (top) {\n              out += this.renderer.paragraph({\n                type: \"paragraph\",\n                raw: body,\n                text: body,\n                tokens: [{\n                  type: \"text\",\n                  raw: body,\n                  text: body,\n                  escaped: true\n                }]\n              });\n            } else {\n              out += body;\n            }\n            continue;\n          }\n        default:\n          {\n            const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n            if (this.options.silent) {\n              console.error(errMsg);\n              return \"\";\n            } else {\n              throw new Error(errMsg);\n            }\n          }\n      }\n    }\n    return out;\n  }\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens, renderer = this.renderer) {\n    let out = \"\";\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const ret = this.options.extensions.renderers[anyToken.type].call({\n          parser: this\n        }, anyToken);\n        if (ret !== false || ![\"escape\", \"html\", \"link\", \"image\", \"strong\", \"em\", \"codespan\", \"br\", \"del\", \"text\"].includes(anyToken.type)) {\n          out += ret || \"\";\n          continue;\n        }\n      }\n      const token = anyToken;\n      switch (token.type) {\n        case \"escape\":\n          {\n            out += renderer.text(token);\n            break;\n          }\n        case \"html\":\n          {\n            out += renderer.html(token);\n            break;\n          }\n        case \"link\":\n          {\n            out += renderer.link(token);\n            break;\n          }\n        case \"image\":\n          {\n            out += renderer.image(token);\n            break;\n          }\n        case \"strong\":\n          {\n            out += renderer.strong(token);\n            break;\n          }\n        case \"em\":\n          {\n            out += renderer.em(token);\n            break;\n          }\n        case \"codespan\":\n          {\n            out += renderer.codespan(token);\n            break;\n          }\n        case \"br\":\n          {\n            out += renderer.br(token);\n            break;\n          }\n        case \"del\":\n          {\n            out += renderer.del(token);\n            break;\n          }\n        case \"text\":\n          {\n            out += renderer.text(token);\n            break;\n          }\n        default:\n          {\n            const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n            if (this.options.silent) {\n              console.error(errMsg);\n              return \"\";\n            } else {\n              throw new Error(errMsg);\n            }\n          }\n      }\n    }\n    return out;\n  }\n};\n\n// src/Hooks.ts\nvar _Hooks = /*#__PURE__*/(() => {\n  let _Hooks = class {\n    options;\n    block;\n    constructor(options2) {\n      this.options = options2 || _defaults;\n    }\n    static passThroughHooks = /* @__PURE__ */new Set([\"preprocess\", \"postprocess\", \"processAllTokens\"]);\n    /**\n     * Process markdown before marked\n     */\n    preprocess(markdown) {\n      return markdown;\n    }\n    /**\n     * Process HTML after marked is finished\n     */\n    postprocess(html2) {\n      return html2;\n    }\n    /**\n     * Process all tokens before walk tokens\n     */\n    processAllTokens(tokens) {\n      return tokens;\n    }\n    /**\n     * Provide function to tokenize markdown\n     */\n    provideLexer() {\n      return this.block ? _Lexer.lex : _Lexer.lexInline;\n    }\n    /**\n     * Provide function to parse tokens\n     */\n    provideParser() {\n      return this.block ? _Parser.parse : _Parser.parseInline;\n    }\n  };\n  return _Hooks;\n})();\n\n// src/Instance.ts\nvar Marked = class {\n  defaults = _getDefaults();\n  options = this.setOptions;\n  parse = this.parseMarkdown(true);\n  parseInline = this.parseMarkdown(false);\n  Parser = _Parser;\n  Renderer = _Renderer;\n  TextRenderer = _TextRenderer;\n  Lexer = _Lexer;\n  Tokenizer = _Tokenizer;\n  Hooks = _Hooks;\n  constructor(...args) {\n    this.use(...args);\n  }\n  /**\n   * Run callback for every token\n   */\n  walkTokens(tokens, callback) {\n    let values = [];\n    for (const token of tokens) {\n      values = values.concat(callback.call(this, token));\n      switch (token.type) {\n        case \"table\":\n          {\n            const tableToken = token;\n            for (const cell of tableToken.header) {\n              values = values.concat(this.walkTokens(cell.tokens, callback));\n            }\n            for (const row of tableToken.rows) {\n              for (const cell of row) {\n                values = values.concat(this.walkTokens(cell.tokens, callback));\n              }\n            }\n            break;\n          }\n        case \"list\":\n          {\n            const listToken = token;\n            values = values.concat(this.walkTokens(listToken.items, callback));\n            break;\n          }\n        default:\n          {\n            const genericToken = token;\n            if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n              this.defaults.extensions.childTokens[genericToken.type].forEach(childTokens => {\n                const tokens2 = genericToken[childTokens].flat(Infinity);\n                values = values.concat(this.walkTokens(tokens2, callback));\n              });\n            } else if (genericToken.tokens) {\n              values = values.concat(this.walkTokens(genericToken.tokens, callback));\n            }\n          }\n      }\n    }\n    return values;\n  }\n  use(...args) {\n    const extensions = this.defaults.extensions || {\n      renderers: {},\n      childTokens: {}\n    };\n    args.forEach(pack => {\n      const opts = {\n        ...pack\n      };\n      opts.async = this.defaults.async || opts.async || false;\n      if (pack.extensions) {\n        pack.extensions.forEach(ext => {\n          if (!ext.name) {\n            throw new Error(\"extension name required\");\n          }\n          if (\"renderer\" in ext) {\n            const prevRenderer = extensions.renderers[ext.name];\n            if (prevRenderer) {\n              extensions.renderers[ext.name] = function (...args2) {\n                let ret = ext.renderer.apply(this, args2);\n                if (ret === false) {\n                  ret = prevRenderer.apply(this, args2);\n                }\n                return ret;\n              };\n            } else {\n              extensions.renderers[ext.name] = ext.renderer;\n            }\n          }\n          if (\"tokenizer\" in ext) {\n            if (!ext.level || ext.level !== \"block\" && ext.level !== \"inline\") {\n              throw new Error(\"extension level must be 'block' or 'inline'\");\n            }\n            const extLevel = extensions[ext.level];\n            if (extLevel) {\n              extLevel.unshift(ext.tokenizer);\n            } else {\n              extensions[ext.level] = [ext.tokenizer];\n            }\n            if (ext.start) {\n              if (ext.level === \"block\") {\n                if (extensions.startBlock) {\n                  extensions.startBlock.push(ext.start);\n                } else {\n                  extensions.startBlock = [ext.start];\n                }\n              } else if (ext.level === \"inline\") {\n                if (extensions.startInline) {\n                  extensions.startInline.push(ext.start);\n                } else {\n                  extensions.startInline = [ext.start];\n                }\n              }\n            }\n          }\n          if (\"childTokens\" in ext && ext.childTokens) {\n            extensions.childTokens[ext.name] = ext.childTokens;\n          }\n        });\n        opts.extensions = extensions;\n      }\n      if (pack.renderer) {\n        const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n        for (const prop in pack.renderer) {\n          if (!(prop in renderer)) {\n            throw new Error(`renderer '${prop}' does not exist`);\n          }\n          if ([\"options\", \"parser\"].includes(prop)) {\n            continue;\n          }\n          const rendererProp = prop;\n          const rendererFunc = pack.renderer[rendererProp];\n          const prevRenderer = renderer[rendererProp];\n          renderer[rendererProp] = (...args2) => {\n            let ret = rendererFunc.apply(renderer, args2);\n            if (ret === false) {\n              ret = prevRenderer.apply(renderer, args2);\n            }\n            return ret || \"\";\n          };\n        }\n        opts.renderer = renderer;\n      }\n      if (pack.tokenizer) {\n        const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n        for (const prop in pack.tokenizer) {\n          if (!(prop in tokenizer)) {\n            throw new Error(`tokenizer '${prop}' does not exist`);\n          }\n          if ([\"options\", \"rules\", \"lexer\"].includes(prop)) {\n            continue;\n          }\n          const tokenizerProp = prop;\n          const tokenizerFunc = pack.tokenizer[tokenizerProp];\n          const prevTokenizer = tokenizer[tokenizerProp];\n          tokenizer[tokenizerProp] = (...args2) => {\n            let ret = tokenizerFunc.apply(tokenizer, args2);\n            if (ret === false) {\n              ret = prevTokenizer.apply(tokenizer, args2);\n            }\n            return ret;\n          };\n        }\n        opts.tokenizer = tokenizer;\n      }\n      if (pack.hooks) {\n        const hooks = this.defaults.hooks || new _Hooks();\n        for (const prop in pack.hooks) {\n          if (!(prop in hooks)) {\n            throw new Error(`hook '${prop}' does not exist`);\n          }\n          if ([\"options\", \"block\"].includes(prop)) {\n            continue;\n          }\n          const hooksProp = prop;\n          const hooksFunc = pack.hooks[hooksProp];\n          const prevHook = hooks[hooksProp];\n          if (_Hooks.passThroughHooks.has(prop)) {\n            hooks[hooksProp] = arg => {\n              if (this.defaults.async) {\n                return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret2 => {\n                  return prevHook.call(hooks, ret2);\n                });\n              }\n              const ret = hooksFunc.call(hooks, arg);\n              return prevHook.call(hooks, ret);\n            };\n          } else {\n            hooks[hooksProp] = (...args2) => {\n              let ret = hooksFunc.apply(hooks, args2);\n              if (ret === false) {\n                ret = prevHook.apply(hooks, args2);\n              }\n              return ret;\n            };\n          }\n        }\n        opts.hooks = hooks;\n      }\n      if (pack.walkTokens) {\n        const walkTokens2 = this.defaults.walkTokens;\n        const packWalktokens = pack.walkTokens;\n        opts.walkTokens = function (token) {\n          let values = [];\n          values.push(packWalktokens.call(this, token));\n          if (walkTokens2) {\n            values = values.concat(walkTokens2.call(this, token));\n          }\n          return values;\n        };\n      }\n      this.defaults = {\n        ...this.defaults,\n        ...opts\n      };\n    });\n    return this;\n  }\n  setOptions(opt) {\n    this.defaults = {\n      ...this.defaults,\n      ...opt\n    };\n    return this;\n  }\n  lexer(src, options2) {\n    return _Lexer.lex(src, options2 ?? this.defaults);\n  }\n  parser(tokens, options2) {\n    return _Parser.parse(tokens, options2 ?? this.defaults);\n  }\n  parseMarkdown(blockType) {\n    const parse2 = (src, options2) => {\n      const origOpt = {\n        ...options2\n      };\n      const opt = {\n        ...this.defaults,\n        ...origOpt\n      };\n      const throwError = this.onError(!!opt.silent, !!opt.async);\n      if (this.defaults.async === true && origOpt.async === false) {\n        return throwError(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));\n      }\n      if (typeof src === \"undefined\" || src === null) {\n        return throwError(new Error(\"marked(): input parameter is undefined or null\"));\n      }\n      if (typeof src !== \"string\") {\n        return throwError(new Error(\"marked(): input parameter is of type \" + Object.prototype.toString.call(src) + \", string expected\"));\n      }\n      if (opt.hooks) {\n        opt.hooks.options = opt;\n        opt.hooks.block = blockType;\n      }\n      const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;\n      const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;\n      if (opt.async) {\n        return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(src2 => lexer2(src2, opt)).then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then(tokens => parser2(tokens, opt)).then(html2 => opt.hooks ? opt.hooks.postprocess(html2) : html2).catch(throwError);\n      }\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src);\n        }\n        let tokens = lexer2(src, opt);\n        if (opt.hooks) {\n          tokens = opt.hooks.processAllTokens(tokens);\n        }\n        if (opt.walkTokens) {\n          this.walkTokens(tokens, opt.walkTokens);\n        }\n        let html2 = parser2(tokens, opt);\n        if (opt.hooks) {\n          html2 = opt.hooks.postprocess(html2);\n        }\n        return html2;\n      } catch (e) {\n        return throwError(e);\n      }\n    };\n    return parse2;\n  }\n  onError(silent, async) {\n    return e => {\n      e.message += \"\\nPlease report this to https://github.com/markedjs/marked.\";\n      if (silent) {\n        const msg = \"<p>An error occurred:</p><pre>\" + escape2(e.message + \"\", true) + \"</pre>\";\n        if (async) {\n          return Promise.resolve(msg);\n        }\n        return msg;\n      }\n      if (async) {\n        return Promise.reject(e);\n      }\n      throw e;\n    };\n  }\n};\n\n// src/marked.ts\nvar markedInstance = new Marked();\nfunction marked(src, opt) {\n  return markedInstance.parse(src, opt);\n}\nmarked.options = marked.setOptions = function (options2) {\n  markedInstance.setOptions(options2);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n};\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\nmarked.use = function (...args) {\n  markedInstance.use(...args);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n};\nmarked.walkTokens = function (tokens, callback) {\n  return markedInstance.walkTokens(tokens, callback);\n};\nmarked.parseInline = markedInstance.parseInline;\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nvar options = marked.options;\nvar setOptions = marked.setOptions;\nvar use = marked.use;\nvar walkTokens = marked.walkTokens;\nvar parseInline = marked.parseInline;\nvar parse = marked;\nvar parser = _Parser.parse;\nvar lexer = _Lexer.lex;\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n","import * as i0 from '@angular/core';\nimport { computed, ChangeDetectionStrategy, Component, InjectionToken, Pipe, SecurityContext, PLATFORM_ID, Inject, Optional, Injectable, EventEmitter, Output, Input, NgModule } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Subject, merge, of, timer } from 'rxjs';\nimport { switchMap, mapTo, distinctUntilChanged, shareReplay, map, takeUntil, first } from 'rxjs/operators';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Renderer, marked } from 'marked';\nconst _c0 = [\"*\"];\nexport { Renderer as MarkedRenderer } from 'marked';\nimport * as i1 from '@angular/common/http';\nimport * as i2 from '@angular/platform-browser';\nconst BUTTON_TEXT_COPY = 'Copy';\nconst BUTTON_TEXT_COPIED = 'Copied';\nlet ClipboardButtonComponent = /*#__PURE__*/(() => {\n  class ClipboardButtonComponent {\n    constructor() {\n      this._buttonClick$ = new Subject();\n      this.copied = toSignal(this._buttonClick$.pipe(switchMap(() => merge(of(true), timer(3000).pipe(mapTo(false)))), distinctUntilChanged(), shareReplay(1)));\n      this.copiedText = computed(() => this.copied() ? BUTTON_TEXT_COPIED : BUTTON_TEXT_COPY);\n    }\n    onCopyToClipboardClick() {\n      this._buttonClick$.next();\n    }\n    static {\n      this.ɵfac = function ClipboardButtonComponent_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || ClipboardButtonComponent)();\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: ClipboardButtonComponent,\n        selectors: [[\"markdown-clipboard\"]],\n        decls: 2,\n        vars: 3,\n        consts: [[1, \"markdown-clipboard-button\", 3, \"click\"]],\n        template: function ClipboardButtonComponent_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵdomElementStart(0, \"button\", 0);\n            i0.ɵɵdomListener(\"click\", function ClipboardButtonComponent_Template_button_click_0_listener() {\n              return ctx.onCopyToClipboardClick();\n            });\n            i0.ɵɵtext(1);\n            i0.ɵɵdomElementEnd();\n          }\n          if (rf & 2) {\n            i0.ɵɵclassProp(\"copied\", ctx.copied());\n            i0.ɵɵadvance();\n            i0.ɵɵtextInterpolate(ctx.copiedText());\n          }\n        },\n        encapsulation: 2,\n        changeDetection: 0\n      });\n    }\n  }\n  return ClipboardButtonComponent;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CLIPBOARD_OPTIONS = /*#__PURE__*/new InjectionToken('CLIPBOARD_OPTIONS');\n\n/* eslint-disable */\nclass KatexSpecificOptions {}\nlet LanguagePipe = /*#__PURE__*/(() => {\n  class LanguagePipe {\n    transform(value, language) {\n      if (value == null) {\n        value = '';\n      }\n      if (language == null) {\n        language = '';\n      }\n      if (typeof value !== 'string') {\n        console.error(`LanguagePipe has been invoked with an invalid value type [${typeof value}]`);\n        return value;\n      }\n      if (typeof language !== 'string') {\n        console.error(`LanguagePipe has been invoked with an invalid parameter [${typeof language}]`);\n        return value;\n      }\n      return '```' + language + '\\n' + value + '\\n```';\n    }\n    static {\n      this.ɵfac = function LanguagePipe_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || LanguagePipe)();\n      };\n    }\n    static {\n      this.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n        name: \"language\",\n        type: LanguagePipe,\n        pure: true\n      });\n    }\n  }\n  return LanguagePipe;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar PrismPlugin = /*#__PURE__*/function (PrismPlugin) {\n  PrismPlugin[\"CommandLine\"] = \"command-line\";\n  PrismPlugin[\"LineHighlight\"] = \"line-highlight\";\n  PrismPlugin[\"LineNumbers\"] = \"line-numbers\";\n  return PrismPlugin;\n}(PrismPlugin || {});\nconst MARKED_EXTENSIONS = /*#__PURE__*/new InjectionToken('MARKED_EXTENSIONS');\nconst MARKED_OPTIONS = /*#__PURE__*/new InjectionToken('MARKED_OPTIONS');\nconst MERMAID_OPTIONS = /*#__PURE__*/new InjectionToken('MERMAID_OPTIONS');\nconst SANITIZE = /*#__PURE__*/new InjectionToken('SANITIZE');\nfunction isSanitizeFunction(sanitize) {\n  return typeof sanitize === 'function';\n}\nconst errorJoyPixelsNotLoaded = '[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information';\nconst errorKatexNotLoaded = '[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information';\nconst errorMermaidNotLoaded = '[ngx-markdown] When using the `mermaid` attribute you *have to* include Mermaid files to `angular.json` or use imports. See README for more information';\nconst errorClipboardNotLoaded = '[ngx-markdown] When using the `clipboard` attribute you *have to* include Clipboard files to `angular.json` or use imports. See README for more information';\nconst errorClipboardViewContainerRequired = '[ngx-markdown] When using the `clipboard` attribute you *have to* provide the `viewContainerRef` parameter to `MarkdownService.render()` function';\nconst errorSrcWithoutHttpClient = '[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information';\nclass ExtendedRenderer extends Renderer {\n  constructor() {\n    super(...arguments);\n    this.ɵNgxMarkdownRendererExtendedForExtensions = false;\n    this.ɵNgxMarkdownRendererExtendedForMermaid = false;\n  }\n}\nlet MarkdownService = /*#__PURE__*/(() => {\n  class MarkdownService {\n    get options() {\n      return this._options;\n    }\n    set options(value) {\n      this._options = {\n        ...this.DEFAULT_MARKED_OPTIONS,\n        ...value\n      };\n    }\n    get renderer() {\n      return this.options.renderer;\n    }\n    set renderer(value) {\n      this.options.renderer = value;\n    }\n    constructor(clipboardOptions, extensions, options, mermaidOptions, platform, sanitize, http, sanitizer) {\n      this.clipboardOptions = clipboardOptions;\n      this.extensions = extensions;\n      this.mermaidOptions = mermaidOptions;\n      this.platform = platform;\n      this.sanitize = sanitize;\n      this.http = http;\n      this.sanitizer = sanitizer;\n      this.DEFAULT_MARKED_OPTIONS = {\n        renderer: new Renderer()\n      };\n      this.DEFAULT_KATEX_OPTIONS = {\n        delimiters: [{\n          left: '$$',\n          right: '$$',\n          display: true\n        }, {\n          left: '$',\n          right: '$',\n          display: false\n        }, {\n          left: '\\\\(',\n          right: '\\\\)',\n          display: false\n        }, {\n          left: '\\\\begin{equation}',\n          right: '\\\\end{equation}',\n          display: true\n        }, {\n          left: '\\\\begin{align}',\n          right: '\\\\end{align}',\n          display: true\n        }, {\n          left: '\\\\begin{alignat}',\n          right: '\\\\end{alignat}',\n          display: true\n        }, {\n          left: '\\\\begin{gather}',\n          right: '\\\\end{gather}',\n          display: true\n        }, {\n          left: '\\\\begin{CD}',\n          right: '\\\\end{CD}',\n          display: true\n        }, {\n          left: '\\\\[',\n          right: '\\\\]',\n          display: true\n        }]\n      };\n      this.DEFAULT_MERMAID_OPTIONS = {\n        startOnLoad: false\n      };\n      this.DEFAULT_CLIPBOARD_OPTIONS = {\n        buttonComponent: undefined\n      };\n      this.DEFAULT_PARSE_OPTIONS = {\n        decodeHtml: false,\n        inline: false,\n        emoji: false,\n        mermaid: false,\n        markedOptions: undefined,\n        disableSanitizer: false\n      };\n      this.DEFAULT_RENDER_OPTIONS = {\n        clipboard: false,\n        clipboardOptions: undefined,\n        katex: false,\n        katexOptions: undefined,\n        mermaid: false,\n        mermaidOptions: undefined\n      };\n      this._reload$ = new Subject();\n      this.reload$ = this._reload$.asObservable();\n      this.options = options;\n    }\n    parse(markdown, parseOptions = this.DEFAULT_PARSE_OPTIONS) {\n      const {\n        decodeHtml,\n        inline,\n        emoji,\n        mermaid,\n        disableSanitizer\n      } = parseOptions;\n      const markedOptions = {\n        ...this.options,\n        ...parseOptions.markedOptions\n      };\n      const renderer = markedOptions.renderer || this.renderer || new Renderer();\n      if (this.extensions) {\n        this.renderer = this.extendsRendererForExtensions(renderer);\n      }\n      if (mermaid) {\n        this.renderer = this.extendsRendererForMermaid(renderer);\n      }\n      const trimmed = this.trimIndentation(markdown);\n      const decoded = decodeHtml ? this.decodeHtml(trimmed) : trimmed;\n      const emojified = emoji ? this.parseEmoji(decoded) : decoded;\n      const marked = this.parseMarked(emojified, markedOptions, inline);\n      const sanitized = disableSanitizer ? marked : this.sanitizeHtml(marked);\n      return sanitized;\n    }\n    render(element, options = this.DEFAULT_RENDER_OPTIONS, viewContainerRef) {\n      const {\n        clipboard,\n        clipboardOptions,\n        katex,\n        katexOptions,\n        mermaid,\n        mermaidOptions\n      } = options;\n      if (katex) {\n        this.renderKatex(element, {\n          ...this.DEFAULT_KATEX_OPTIONS,\n          ...katexOptions\n        });\n      }\n      if (mermaid) {\n        this.renderMermaid(element, {\n          ...this.DEFAULT_MERMAID_OPTIONS,\n          ...this.mermaidOptions,\n          ...mermaidOptions\n        });\n      }\n      if (clipboard) {\n        this.renderClipboard(element, viewContainerRef, {\n          ...this.DEFAULT_CLIPBOARD_OPTIONS,\n          ...this.clipboardOptions,\n          ...clipboardOptions\n        });\n      }\n      this.highlight(element);\n    }\n    reload() {\n      this._reload$.next();\n    }\n    getSource(src) {\n      if (!this.http) {\n        throw new Error(errorSrcWithoutHttpClient);\n      }\n      return this.http.get(src, {\n        responseType: 'text'\n      }).pipe(map(markdown => this.handleExtension(src, markdown)));\n    }\n    highlight(element) {\n      if (!isPlatformBrowser(this.platform)) {\n        return;\n      }\n      if (typeof Prism === 'undefined' || typeof Prism.highlightAllUnder === 'undefined') {\n        return;\n      }\n      if (!element) {\n        element = document;\n      }\n      const noLanguageElements = element.querySelectorAll('pre code:not([class*=\"language-\"])');\n      Array.prototype.forEach.call(noLanguageElements, x => x.classList.add('language-none'));\n      Prism.highlightAllUnder(element);\n    }\n    decodeHtml(html) {\n      if (!isPlatformBrowser(this.platform)) {\n        return html;\n      }\n      const textarea = document.createElement('textarea');\n      textarea.innerHTML = html;\n      return textarea.value;\n    }\n    extendsRendererForExtensions(renderer) {\n      const extendedRenderer = renderer;\n      if (extendedRenderer.ɵNgxMarkdownRendererExtendedForExtensions === true) {\n        return renderer;\n      }\n      if (this.extensions?.length > 0) {\n        marked.use(...this.extensions);\n      }\n      extendedRenderer.ɵNgxMarkdownRendererExtendedForExtensions = true;\n      return renderer;\n    }\n    extendsRendererForMermaid(renderer) {\n      const extendedRenderer = renderer;\n      if (extendedRenderer.ɵNgxMarkdownRendererExtendedForMermaid === true) {\n        return renderer;\n      }\n      const defaultCode = renderer.code;\n      renderer.code = token => {\n        return token.lang === 'mermaid' ? `<div class=\"mermaid\">${token.text}</div>` : defaultCode(token);\n      };\n      extendedRenderer.ɵNgxMarkdownRendererExtendedForMermaid = true;\n      return renderer;\n    }\n    handleExtension(src, markdown) {\n      const urlProtocolIndex = src.lastIndexOf('://');\n      const urlWithoutProtocol = urlProtocolIndex > -1 ? src.substring(urlProtocolIndex + 4) : src;\n      const lastSlashIndex = urlWithoutProtocol.lastIndexOf('/');\n      const lastUrlSegment = lastSlashIndex > -1 ? urlWithoutProtocol.substring(lastSlashIndex + 1).split('?')[0] : '';\n      const lastDotIndex = lastUrlSegment.lastIndexOf('.');\n      const extension = lastDotIndex > -1 ? lastUrlSegment.substring(lastDotIndex + 1) : '';\n      return !!extension && extension !== 'md' ? '```' + extension + '\\n' + markdown + '\\n```' : markdown;\n    }\n    parseMarked(html, markedOptions, inline = false) {\n      if (markedOptions.renderer) {\n        // clone renderer and remove extended flags otherwise\n        // marked throws an error thinking it is a renderer prop\n        const renderer = {\n          ...markedOptions.renderer\n        };\n        delete renderer.ɵNgxMarkdownRendererExtendedForExtensions;\n        delete renderer.ɵNgxMarkdownRendererExtendedForMermaid;\n        // remove renderer from markedOptions because if renderer is\n        // passed to marked.parse method, it will ignore all extensions\n        delete markedOptions.renderer;\n        marked.use({\n          renderer\n        });\n      }\n      return inline ? marked.parseInline(html, markedOptions) : marked.parse(html, markedOptions);\n    }\n    parseEmoji(html) {\n      if (!isPlatformBrowser(this.platform)) {\n        return html;\n      }\n      if (typeof joypixels === 'undefined' || typeof joypixels.shortnameToUnicode === 'undefined') {\n        throw new Error(errorJoyPixelsNotLoaded);\n      }\n      return joypixels.shortnameToUnicode(html);\n    }\n    renderKatex(element, options) {\n      if (!isPlatformBrowser(this.platform)) {\n        return;\n      }\n      if (typeof katex === 'undefined' || typeof renderMathInElement === 'undefined') {\n        throw new Error(errorKatexNotLoaded);\n      }\n      renderMathInElement(element, options);\n    }\n    renderClipboard(element, viewContainerRef, options) {\n      if (!isPlatformBrowser(this.platform)) {\n        return;\n      }\n      if (typeof ClipboardJS === 'undefined') {\n        throw new Error(errorClipboardNotLoaded);\n      }\n      if (!viewContainerRef) {\n        throw new Error(errorClipboardViewContainerRequired);\n      }\n      const {\n        buttonComponent,\n        buttonTemplate\n      } = options;\n      // target every <pre> elements\n      const preElements = element.querySelectorAll('pre');\n      for (let i = 0; i < preElements.length; i++) {\n        const preElement = preElements.item(i);\n        // create <pre> wrapper element\n        const preWrapperElement = document.createElement('div');\n        preWrapperElement.style.position = 'relative';\n        preElement.parentNode.insertBefore(preWrapperElement, preElement);\n        preWrapperElement.appendChild(preElement);\n        // create toolbar element\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.insertAdjacentElement('beforeend', toolbarWrapperElement);\n        // register listener to show/hide toolbar\n        preWrapperElement.onmouseenter = () => toolbarWrapperElement.classList.add('hover');\n        preWrapperElement.onmouseleave = () => toolbarWrapperElement.classList.remove('hover');\n        // declare embeddedViewRef holding variable\n        let embeddedViewRef;\n        // use provided component via input property\n        // or provided via ClipboardOptions provider\n        if (buttonComponent) {\n          const componentRef = viewContainerRef.createComponent(buttonComponent);\n          embeddedViewRef = componentRef.hostView;\n          componentRef.changeDetectorRef.markForCheck();\n        }\n        // use provided template via input property\n        else if (buttonTemplate) {\n          embeddedViewRef = viewContainerRef.createEmbeddedView(buttonTemplate);\n        }\n        // use default component\n        else {\n          const componentRef = viewContainerRef.createComponent(ClipboardButtonComponent);\n          embeddedViewRef = componentRef.hostView;\n          componentRef.changeDetectorRef.markForCheck();\n        }\n        // declare clipboard instance variable\n        let clipboardInstance;\n        // attach clipboard.js to root node\n        embeddedViewRef.rootNodes.forEach(node => {\n          toolbarWrapperElement.appendChild(node);\n          clipboardInstance = new ClipboardJS(node, {\n            text: () => preElement.innerText\n          });\n        });\n        // destroy clipboard instance when view is destroyed\n        embeddedViewRef.onDestroy(() => clipboardInstance.destroy());\n      }\n    }\n    renderMermaid(element, options = this.DEFAULT_MERMAID_OPTIONS) {\n      if (!isPlatformBrowser(this.platform)) {\n        return;\n      }\n      if (typeof mermaid === 'undefined' || typeof mermaid.initialize === 'undefined') {\n        throw new Error(errorMermaidNotLoaded);\n      }\n      const mermaidElements = element.querySelectorAll('.mermaid');\n      if (mermaidElements.length === 0) {\n        return;\n      }\n      mermaid.initialize(options);\n      mermaid.run({\n        nodes: mermaidElements\n      });\n    }\n    trimIndentation(markdown) {\n      if (!markdown) {\n        return '';\n      }\n      let indentStart;\n      return markdown.split('\\n').map(line => {\n        let lineIdentStart = indentStart;\n        if (line.length > 0) {\n          lineIdentStart = isNaN(lineIdentStart) ? line.search(/\\S|$/) : Math.min(line.search(/\\S|$/), lineIdentStart);\n        }\n        if (isNaN(indentStart)) {\n          indentStart = lineIdentStart;\n        }\n        return lineIdentStart ? line.substring(lineIdentStart) : line;\n      }).join('\\n');\n    }\n    async sanitizeHtml(html) {\n      if (isSanitizeFunction(this.sanitize)) {\n        return this.sanitize(await html);\n      }\n      if (this.sanitize !== SecurityContext.NONE) {\n        return this.sanitizer.sanitize(this.sanitize, html) ?? '';\n      }\n      return html;\n    }\n    static {\n      this.ɵfac = function MarkdownService_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MarkdownService)(i0.ɵɵinject(CLIPBOARD_OPTIONS, 8), i0.ɵɵinject(MARKED_EXTENSIONS, 8), i0.ɵɵinject(MARKED_OPTIONS, 8), i0.ɵɵinject(MERMAID_OPTIONS, 8), i0.ɵɵinject(PLATFORM_ID), i0.ɵɵinject(SANITIZE), i0.ɵɵinject(i1.HttpClient, 8), i0.ɵɵinject(i2.DomSanitizer));\n      };\n    }\n    static {\n      this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n        token: MarkdownService,\n        factory: MarkdownService.ɵfac\n      });\n    }\n  }\n  return MarkdownService;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MarkdownComponent = /*#__PURE__*/(() => {\n  class MarkdownComponent {\n    get disableSanitizer() {\n      return this._disableSanitizer;\n    }\n    set disableSanitizer(value) {\n      this._disableSanitizer = this.coerceBooleanProperty(value);\n    }\n    get inline() {\n      return this._inline;\n    }\n    set inline(value) {\n      this._inline = this.coerceBooleanProperty(value);\n    }\n    // Plugin - clipboard\n    get clipboard() {\n      return this._clipboard;\n    }\n    set clipboard(value) {\n      this._clipboard = this.coerceBooleanProperty(value);\n    }\n    // Plugin - emoji\n    get emoji() {\n      return this._emoji;\n    }\n    set emoji(value) {\n      this._emoji = this.coerceBooleanProperty(value);\n    }\n    // Plugin - katex\n    get katex() {\n      return this._katex;\n    }\n    set katex(value) {\n      this._katex = this.coerceBooleanProperty(value);\n    }\n    // Plugin - mermaid\n    get mermaid() {\n      return this._mermaid;\n    }\n    set mermaid(value) {\n      this._mermaid = this.coerceBooleanProperty(value);\n    }\n    // Plugin - lineHighlight\n    get lineHighlight() {\n      return this._lineHighlight;\n    }\n    set lineHighlight(value) {\n      this._lineHighlight = this.coerceBooleanProperty(value);\n    }\n    // Plugin - lineNumbers\n    get lineNumbers() {\n      return this._lineNumbers;\n    }\n    set lineNumbers(value) {\n      this._lineNumbers = this.coerceBooleanProperty(value);\n    }\n    // Plugin - commandLine\n    get commandLine() {\n      return this._commandLine;\n    }\n    set commandLine(value) {\n      this._commandLine = this.coerceBooleanProperty(value);\n    }\n    constructor(element, markdownService, viewContainerRef) {\n      this.element = element;\n      this.markdownService = markdownService;\n      this.viewContainerRef = viewContainerRef;\n      // Event emitters\n      this.error = new EventEmitter();\n      this.load = new EventEmitter();\n      this.ready = new EventEmitter();\n      this._clipboard = false;\n      this._commandLine = false;\n      this._disableSanitizer = false;\n      this._emoji = false;\n      this._inline = false;\n      this._katex = false;\n      this._lineHighlight = false;\n      this._lineNumbers = false;\n      this._mermaid = false;\n      this.destroyed$ = new Subject();\n    }\n    ngOnChanges() {\n      this.loadContent();\n    }\n    loadContent() {\n      if (this.data != null) {\n        this.handleData();\n        return;\n      }\n      if (this.src != null) {\n        this.handleSrc();\n        return;\n      }\n    }\n    ngAfterViewInit() {\n      if (!this.data && !this.src) {\n        this.handleTransclusion();\n      }\n      this.markdownService.reload$.pipe(takeUntil(this.destroyed$)).subscribe(() => this.loadContent());\n    }\n    ngOnDestroy() {\n      this.destroyed$.next();\n      this.destroyed$.complete();\n    }\n    async render(markdown, decodeHtml = false) {\n      const parsedOptions = {\n        decodeHtml,\n        inline: this.inline,\n        emoji: this.emoji,\n        mermaid: this.mermaid,\n        disableSanitizer: this.disableSanitizer\n      };\n      const renderOptions = {\n        clipboard: this.clipboard,\n        clipboardOptions: this.getClipboardOptions(),\n        katex: this.katex,\n        katexOptions: this.katexOptions,\n        mermaid: this.mermaid,\n        mermaidOptions: this.mermaidOptions\n      };\n      const parsed = await this.markdownService.parse(markdown, parsedOptions);\n      this.element.nativeElement.innerHTML = parsed;\n      this.handlePlugins();\n      this.markdownService.render(this.element.nativeElement, renderOptions, this.viewContainerRef);\n      this.ready.emit();\n    }\n    coerceBooleanProperty(value) {\n      return value != null && `${String(value)}` !== 'false';\n    }\n    getClipboardOptions() {\n      if (this.clipboardButtonComponent || this.clipboardButtonTemplate) {\n        return {\n          buttonComponent: this.clipboardButtonComponent,\n          buttonTemplate: this.clipboardButtonTemplate\n        };\n      }\n      return undefined;\n    }\n    handleData() {\n      this.render(this.data);\n    }\n    handleSrc() {\n      this.markdownService.getSource(this.src).subscribe({\n        next: markdown => {\n          this.render(markdown).then(() => {\n            this.load.emit(markdown);\n          });\n        },\n        error: error => this.error.emit(error)\n      });\n    }\n    handleTransclusion() {\n      this.render(this.element.nativeElement.innerHTML, true);\n    }\n    handlePlugins() {\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      if (this.lineHighlight) {\n        this.setPluginOptions(this.element.nativeElement, {\n          dataLine: this.line,\n          dataLineOffset: this.lineOffset\n        });\n      }\n      if (this.lineNumbers) {\n        this.setPluginClass(this.element.nativeElement, PrismPlugin.LineNumbers);\n        this.setPluginOptions(this.element.nativeElement, {\n          dataStart: this.start\n        });\n      }\n    }\n    setPluginClass(element, plugin) {\n      const preElements = element.querySelectorAll('pre');\n      for (let i = 0; i < preElements.length; i++) {\n        const classes = plugin instanceof Array ? plugin : [plugin];\n        preElements.item(i).classList.add(...classes);\n      }\n    }\n    setPluginOptions(element, options) {\n      const preElements = element.querySelectorAll('pre');\n      for (let i = 0; i < preElements.length; i++) {\n        Object.keys(options).forEach(option => {\n          const attributeValue = options[option];\n          if (attributeValue) {\n            const attributeName = this.toLispCase(option);\n            preElements.item(i).setAttribute(attributeName, attributeValue.toString());\n          }\n        });\n      }\n    }\n    toLispCase(value) {\n      const upperChars = value.match(/([A-Z])/g);\n      if (!upperChars) {\n        return value;\n      }\n      let str = value.toString();\n      for (let i = 0, n = upperChars.length; i < n; i++) {\n        str = str.replace(new RegExp(upperChars[i]), '-' + upperChars[i].toLowerCase());\n      }\n      if (str.slice(0, 1) === '-') {\n        str = str.slice(1);\n      }\n      return str;\n    }\n    static {\n      this.ɵfac = function MarkdownComponent_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MarkdownComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(MarkdownService), i0.ɵɵdirectiveInject(i0.ViewContainerRef));\n      };\n    }\n    static {\n      this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n        type: MarkdownComponent,\n        selectors: [[\"markdown\"], [\"\", \"markdown\", \"\"]],\n        inputs: {\n          data: \"data\",\n          src: \"src\",\n          disableSanitizer: \"disableSanitizer\",\n          inline: \"inline\",\n          clipboard: \"clipboard\",\n          clipboardButtonComponent: \"clipboardButtonComponent\",\n          clipboardButtonTemplate: \"clipboardButtonTemplate\",\n          emoji: \"emoji\",\n          katex: \"katex\",\n          katexOptions: \"katexOptions\",\n          mermaid: \"mermaid\",\n          mermaidOptions: \"mermaidOptions\",\n          lineHighlight: \"lineHighlight\",\n          line: \"line\",\n          lineOffset: \"lineOffset\",\n          lineNumbers: \"lineNumbers\",\n          start: \"start\",\n          commandLine: \"commandLine\",\n          filterOutput: \"filterOutput\",\n          host: \"host\",\n          prompt: \"prompt\",\n          output: \"output\",\n          user: \"user\"\n        },\n        outputs: {\n          error: \"error\",\n          load: \"load\",\n          ready: \"ready\"\n        },\n        features: [i0.ɵɵNgOnChangesFeature],\n        ngContentSelectors: _c0,\n        decls: 1,\n        vars: 0,\n        template: function MarkdownComponent_Template(rf, ctx) {\n          if (rf & 1) {\n            i0.ɵɵprojectionDef();\n            i0.ɵɵprojection(0);\n          }\n        },\n        encapsulation: 2\n      });\n    }\n  }\n  return MarkdownComponent;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MarkdownPipe = /*#__PURE__*/(() => {\n  class MarkdownPipe {\n    constructor(domSanitizer, elementRef, markdownService, viewContainerRef, zone) {\n      this.domSanitizer = domSanitizer;\n      this.elementRef = elementRef;\n      this.markdownService = markdownService;\n      this.viewContainerRef = viewContainerRef;\n      this.zone = zone;\n    }\n    async transform(value, options) {\n      if (value == null) {\n        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      const markdown = await this.markdownService.parse(value, options);\n      this.zone.onStable.pipe(first()).subscribe(() => this.markdownService.render(this.elementRef.nativeElement, options, this.viewContainerRef));\n      return this.domSanitizer.bypassSecurityTrustHtml(markdown);\n    }\n    static {\n      this.ɵfac = function MarkdownPipe_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MarkdownPipe)(i0.ɵɵdirectiveInject(i2.DomSanitizer, 16), i0.ɵɵdirectiveInject(i0.ElementRef, 16), i0.ɵɵdirectiveInject(MarkdownService, 16), i0.ɵɵdirectiveInject(i0.ViewContainerRef, 16), i0.ɵɵdirectiveInject(i0.NgZone, 16));\n      };\n    }\n    static {\n      this.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n        name: \"markdown\",\n        type: MarkdownPipe,\n        pure: true\n      });\n    }\n  }\n  return MarkdownPipe;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction provideMarkdown(markdownModuleConfig) {\n  return [MarkdownService, markdownModuleConfig?.loader ?? [], markdownModuleConfig?.clipboardOptions ?? [], markdownModuleConfig?.markedOptions ?? [], markdownModuleConfig?.mermaidOptions ?? [], markdownModuleConfig?.markedExtensions ?? [], getSanitizeProvider(markdownModuleConfig?.sanitize) ?? []];\n}\n;\n;\nfunction isTypedProvider(provider) {\n  return provider != null && provider.provide != null;\n}\nfunction getSanitizeProvider(sanitize) {\n  return isTypedProvider(sanitize) ? sanitize : {\n    provide: SANITIZE,\n    useValue: sanitize ?? SecurityContext.HTML\n  };\n}\nconst sharedDeclarations = [ClipboardButtonComponent, LanguagePipe, MarkdownComponent, MarkdownPipe];\nlet MarkdownModule = /*#__PURE__*/(() => {\n  class MarkdownModule {\n    static forRoot(markdownModuleConfig) {\n      return {\n        ngModule: MarkdownModule,\n        providers: [provideMarkdown(markdownModuleConfig)]\n      };\n    }\n    static forChild() {\n      return {\n        ngModule: MarkdownModule\n      };\n    }\n    static {\n      this.ɵfac = function MarkdownModule_Factory(__ngFactoryType__) {\n        return new (__ngFactoryType__ || MarkdownModule)();\n      };\n    }\n    static {\n      this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n        type: MarkdownModule\n      });\n    }\n    static {\n      this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n    }\n  }\n  return MarkdownModule;\n})();\n(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CLIPBOARD_OPTIONS, ClipboardButtonComponent, ExtendedRenderer, KatexSpecificOptions, LanguagePipe, MARKED_EXTENSIONS, MARKED_OPTIONS, MERMAID_OPTIONS, MarkdownComponent, MarkdownModule, MarkdownPipe, MarkdownService, PrismPlugin, SANITIZE, errorClipboardNotLoaded, errorClipboardViewContainerRequired, errorJoyPixelsNotLoaded, errorKatexNotLoaded, errorMermaidNotLoaded, errorSrcWithoutHttpClient, getSanitizeProvider, isSanitizeFunction, isTypedProvider, provideMarkdown };\n"],"mappings":"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","names":["toSignal","source","options","cleanupRef","DestroyRef","inject","equal","makeToSignalEqual","state","signal","destroyUnregisterFn","sub","value","error","RuntimeError","computed","current","userEquality","a","b","_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","edit","regex","opt","source","obj","name","val","valSource","other","bull","indent","newline","blockCode","fences","hr","heading","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","def","list","_tag","_comment","html","paragraph","blockquote","blockNormal","gfmTable","blockGfm","__spreadProps","__spreadValues","blockPedantic","escape","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","tag","_inlineLabel","link","reflink","nolink","reflinkSearch","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","escape2","html2","encode","cleanUrl","href","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","i","rtrim","c","invert","l","suffLen","currChar","findClosingBracket","b","level","outputLink","cap","link2","raw","lexer2","rules","title","text","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","_Tokenizer","options2","src","trimmed","lines","tokens","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","list2","itemRegex","endsWithBlankLine","endEarly","itemContents","line","t","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","rawLine","nextLineWithoutTabs","istask","ischecked","lastItem","spacers","hasMultipleLineBreaks","tag2","headers","aligns","rows","item","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","text2","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","__Lexer","next","lastParagraphClipped","extTokenizer","cutSrc","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","code","depth","ordered","start","body","j","type","startAttr","itemBody","checkbox","checked","header","k","content","cleanHref","out","_TextRenderer","_Parser","__Parser","anyToken","genericToken","ret","textToken","renderer","_Hooks","markdown","Marked","args","callback","values","tableToken","listToken","childTokens","tokens2","extensions","pack","opts","ext","prevRenderer","args2","extLevel","prop","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","arg","ret2","walkTokens2","packWalktokens","blockType","origOpt","throwError","parser2","src2","e","silent","async","msg","markedInstance","marked","options","setOptions","use","walkTokens","parseInline","parser","_Parser","lexer","_Lexer","_c0","BUTTON_TEXT_COPY","BUTTON_TEXT_COPIED","ClipboardButtonComponent","_ClipboardButtonComponent","Subject","toSignal","switchMap","merge","of","timer","mapTo","distinctUntilChanged","shareReplay","computed","__ngFactoryType__","ɵɵdefineComponent","rf","ctx","ɵɵdomElementStart","ɵɵdomListener","ɵɵtext","ɵɵdomElementEnd","ɵɵclassProp","ɵɵadvance","ɵɵtextInterpolate","CLIPBOARD_OPTIONS","InjectionToken","PrismPlugin","MARKED_EXTENSIONS","InjectionToken","MARKED_OPTIONS","MERMAID_OPTIONS","SANITIZE","isSanitizeFunction","sanitize","errorJoyPixelsNotLoaded","errorKatexNotLoaded","errorMermaidNotLoaded","errorClipboardNotLoaded","errorClipboardViewContainerRequired","errorSrcWithoutHttpClient","MarkdownService","_MarkdownService","value","__spreadValues","clipboardOptions","extensions","options","mermaidOptions","platform","sanitize","http","sanitizer","_Renderer","Subject","markdown","parseOptions","decodeHtml","inline","emoji","mermaid","disableSanitizer","markedOptions","renderer","trimmed","decoded","emojified","marked","element","viewContainerRef","clipboard","katex","katexOptions","src","errorSrcWithoutHttpClient","map","isPlatformBrowser","noLanguageElements","x","html","textarea","extendedRenderer","defaultCode","token","urlProtocolIndex","urlWithoutProtocol","lastSlashIndex","lastUrlSegment","lastDotIndex","extension","errorJoyPixelsNotLoaded","errorKatexNotLoaded","errorClipboardNotLoaded","errorClipboardViewContainerRequired","buttonComponent","buttonTemplate","preElements","i","preElement","preWrapperElement","toolbarWrapperElement","embeddedViewRef","componentRef","ClipboardButtonComponent","clipboardInstance","node","errorMermaidNotLoaded","mermaidElements","indentStart","line","lineIdentStart","__async","isSanitizeFunction","SecurityContext","__ngFactoryType__","ɵɵinject","CLIPBOARD_OPTIONS","MARKED_EXTENSIONS","MARKED_OPTIONS","MERMAID_OPTIONS","PLATFORM_ID","SANITIZE","HttpClient","DomSanitizer","ɵɵdefineInjectable","MarkdownComponent","_MarkdownComponent","markdownService","EventEmitter","takeUntil","parsedOptions","renderOptions","parsed","error","PrismPlugin","plugin","classes","option","attributeValue","attributeName","upperChars","str","n","ɵɵdirectiveInject","ElementRef","ViewContainerRef","ɵɵdefineComponent","ɵɵNgOnChangesFeature","_c0","rf","ctx","ɵɵprojectionDef","ɵɵprojection","provideMarkdown","markdownModuleConfig","MarkdownService","getSanitizeProvider","isTypedProvider","provider","sanitize","SANITIZE","SecurityContext"],"x_google_ignoreList":[0,1,2]}