{"version":3,"file":"analogjs-content.mjs","sources":["../../../../packages/content/src/lib/anchor-navigation.directive.ts","../../../../packages/content/src/lib/content-renderer.ts","../../../../packages/content/src/lib/content-locale.ts","../../../../packages/content/src/lib/get-content-files.ts","../../../../packages/content/src/lib/content-files-list-token.ts","../../../../packages/content/src/lib/content-files-token.ts","../../../../packages/content/src/lib/parse-raw-content-file.ts","../../../../packages/content/src/lib/utils/zone-wait-for.ts","../../../../packages/content/src/lib/render-task.service.ts","../../../../packages/content/src/lib/content.ts","../../../../packages/content/src/lib/inject-content-files.ts","../../../../packages/content/src/lib/marked-content-highlighter.ts","../../../../packages/content/src/lib/marked-setup.service.ts","../../../../packages/content/src/lib/markdown-content-renderer.service.ts","../../../../packages/content/src/lib/content-file-loader.ts","../../../../packages/content/src/lib/content-list-loader.ts","../../../../packages/content/src/lib/provide-content.ts","../../../../packages/content/src/lib/markdown-route.component.ts","../../../../packages/content/src/lib/markdown.component.ts","../../../../packages/content/src/analogjs-content.ts"],"sourcesContent":["import { Directive, HostListener, inject } from '@angular/core';\nimport { DOCUMENT, Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Directive({\n  selector: '[analogAnchorNavigation]',\n  standalone: true,\n})\nexport class AnchorNavigationDirective {\n  private readonly document = inject(DOCUMENT);\n  private readonly location = inject(Location);\n  private readonly router = inject(Router);\n\n  @HostListener('click', ['$event.target'])\n  handleNavigation(element: EventTarget | null): boolean {\n    if (\n      element instanceof HTMLAnchorElement &&\n      isInternalUrl(element, this.document) &&\n      hasTargetSelf(element) &&\n      !hasDownloadAttribute(element)\n    ) {\n      const { pathname, search, hash } = element;\n      const url = this.location.normalize(`${pathname}${search}${hash}`);\n      this.router.navigateByUrl(url);\n\n      return false;\n    }\n\n    return true;\n  }\n}\n\nfunction hasDownloadAttribute(anchorElement: HTMLAnchorElement): boolean {\n  return anchorElement.getAttribute('download') !== null;\n}\n\nfunction hasTargetSelf(anchorElement: HTMLAnchorElement): boolean {\n  return !anchorElement.target || anchorElement.target === '_self';\n}\n\nfunction isInternalUrl(\n  anchorElement: HTMLAnchorElement,\n  document: Document,\n): boolean {\n  return (\n    anchorElement.host === document.location.host &&\n    anchorElement.protocol === document.location.protocol\n  );\n}\n","/// <reference types=\"vite/client\" />\n\nimport { Injectable, TransferState, inject, makeStateKey } from '@angular/core';\n\nexport type TableOfContentItem = {\n  id: string;\n  level: number; // starts at 1\n  text: string;\n};\n\nexport type RenderedContent = {\n  content: string;\n  toc: TableOfContentItem[];\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n  async render(content: string): Promise<RenderedContent> {\n    return { content, toc: [] };\n  }\n\n  // Backward-compatible API for consumers that read headings directly.\n  getContentHeadings(_content: string): TableOfContentItem[] {\n    return [];\n  }\n\n  // eslint-disable-next-line\n  enhance() {}\n}\n\nexport class NoopContentRenderer implements ContentRenderer {\n  private readonly transferState = inject(TransferState);\n  private contentId = 0;\n\n  /**\n   * Generates a hash from the content string\n   * to be used with the transfer state\n   */\n  private generateHash(str: string) {\n    let hash = 0;\n    for (let i = 0, len = str.length; i < len; i++) {\n      let chr = str.charCodeAt(i);\n      hash = (hash << 5) - hash + chr;\n      hash |= 0; // Convert to 32bit integer\n    }\n    return hash;\n  }\n\n  async render(content: string): Promise<RenderedContent> {\n    this.contentId = this.generateHash(content);\n    const toc = this.getContentHeadings(content);\n    const key = makeStateKey<TableOfContentItem[]>(\n      `content-headings-${this.contentId}`,\n    );\n\n    if (import.meta.env.SSR === true) {\n      this.transferState.set(key, toc);\n      return { content, toc };\n    }\n\n    return {\n      content,\n      toc: this.transferState.get(key, toc),\n    };\n  }\n  enhance() {}\n\n  getContentHeadings(content: string): TableOfContentItem[] {\n    return this.extractHeadings(content);\n  }\n\n  private extractHeadings(content: string): TableOfContentItem[] {\n    const markdownHeadings = this.extractHeadingsFromMarkdown(content);\n    if (markdownHeadings.length > 0) {\n      return markdownHeadings;\n    }\n\n    const htmlHeadings = this.extractHeadingsFromHtml(content);\n    return htmlHeadings;\n  }\n\n  private extractHeadingsFromMarkdown(content: string): TableOfContentItem[] {\n    const lines = content.split('\\n');\n    const toc: TableOfContentItem[] = [];\n    const slugCounts = new Map<string, number>();\n\n    for (const line of lines) {\n      const match = /^(#{1,6})\\s+(.+?)\\s*$/.exec(line);\n      if (!match) {\n        continue;\n      }\n\n      const level = match[1].length;\n      const text = match[2].trim();\n      if (!text) {\n        continue;\n      }\n\n      const baseSlug = text\n        .toLowerCase()\n        .replace(/[^\\w\\s-]/g, '')\n        .trim()\n        .replace(/\\s+/g, '-');\n      const count = slugCounts.get(baseSlug) ?? 0;\n      slugCounts.set(baseSlug, count + 1);\n      const id = count === 0 ? baseSlug : `${baseSlug}-${count}`;\n\n      toc.push({ id, level, text });\n    }\n\n    return toc;\n  }\n\n  private extractHeadingsFromHtml(content: string): TableOfContentItem[] {\n    const toc: TableOfContentItem[] = [];\n    const slugCounts = new Map<string, number>();\n    const headingRegex = /<h([1-6])([^>]*)>([\\s\\S]*?)<\\/h\\1>/gi;\n\n    for (const match of content.matchAll(headingRegex)) {\n      const level = Number(match[1]);\n      const attrs = match[2] ?? '';\n      const rawInner = match[3] ?? '';\n      const text = rawInner.replace(/<[^>]+>/g, '').trim();\n      if (!text) {\n        continue;\n      }\n\n      const idMatch =\n        /\\sid=(['\"])(.*?)\\1/i.exec(attrs) ?? /\\sid=([^\\s>]+)/i.exec(attrs);\n      let id = idMatch?.[2] ?? idMatch?.[1] ?? '';\n      if (!id) {\n        id = this.makeSlug(text, slugCounts);\n      }\n\n      toc.push({ id, level, text });\n    }\n\n    return toc;\n  }\n\n  private makeSlug(text: string, slugCounts: Map<string, number>): string {\n    const baseSlug = text\n      .toLowerCase()\n      .replace(/[^\\w\\s-]/g, '')\n      .trim()\n      .replace(/\\s+/g, '-');\n    const count = slugCounts.get(baseSlug) ?? 0;\n    slugCounts.set(baseSlug, count + 1);\n    return count === 0 ? baseSlug : `${baseSlug}-${count}`;\n  }\n}\n","import { InjectionToken, inject, Provider } from '@angular/core';\n\nimport { ContentFile } from './content-file';\n\n/**\n * Token for the active content locale.\n * Provided via `withLocale()` in `provideContent()`.\n *\n * When set, `injectContentFiles()` filters to content matching this locale,\n * and `injectContent()` resolves locale-prefixed content paths first.\n */\nexport const CONTENT_LOCALE = new InjectionToken<string>(\n  '@analogjs/content Locale',\n);\n\n/**\n * Injects the content locale, returning null if not configured.\n */\nexport function injectContentLocale(): string | null {\n  return inject(CONTENT_LOCALE, { optional: true });\n}\n\nexport interface ContentLocaleOptions {\n  /**\n   * Function that returns the active locale.\n   * Runs in injection context so `inject()` can be used to read\n   * from other tokens (e.g., a LOCALE token from a router package).\n   *\n   * ```typescript\n   * withLocale({ loadLocale: injectLocale })\n   * withLocale({ loadLocale: () => navigator.language.split('-')[0] })\n   * ```\n   */\n  loadLocale: () => string | null;\n}\n\n/**\n * Content feature that sets the active locale for content resolution.\n *\n * When provided, content APIs become locale-aware:\n * - `injectContentFiles()` filters to files in the locale subdirectory\n *   or with a matching `locale` frontmatter attribute.\n * - `injectContent()` tries locale-prefixed paths first\n *   (e.g., `content/fr/blog/post.md` before `content/blog/post.md`).\n *\n * Usage:\n * ```typescript\n * // With loader — runs in injection context\n * provideContent(\n *   withMarkdownRenderer(),\n *   withLocale({ loadLocale: injectLocale }),\n * )\n *\n * // Static locale\n * provideContent(\n *   withMarkdownRenderer(),\n *   withLocale('fr'),\n * )\n * ```\n */\nexport function withLocale(locale: string | ContentLocaleOptions): Provider {\n  if (typeof locale === 'string') {\n    return { provide: CONTENT_LOCALE, useValue: locale };\n  }\n\n  return { provide: CONTENT_LOCALE, useFactory: locale.loadLocale };\n}\n\n/**\n * Filters content files by locale using map-based key lookup.\n *\n * Matching rules:\n * 1. Frontmatter `locale` attribute matches the active locale.\n * 2. File is in the active locale subdirectory (e.g., `/content/fr/blog/post`).\n * 3. File has no locale marker and no localized variant exists — included as universal content.\n *\n * Files in a different locale's subdirectory are always excluded.\n */\nexport function filterByLocale<T extends Record<string, any>>(\n  files: ContentFile<T>[],\n  locale: string,\n): ContentFile<T>[] {\n  const localePrefix = `/content/${locale}/`;\n\n  // Collect all locale prefixes present in the file set\n  const allLocalePrefixes = new Set<string>();\n  for (const file of files) {\n    const match = file.filename.match(/\\/content\\/([a-z]{2}(?:-[a-zA-Z]+)?)\\//);\n    if (match) {\n      allLocalePrefixes.add(`/content/${match[1]}/`);\n    }\n  }\n\n  // Build set of base paths that have a localized variant for the active locale\n  const localizedBasePaths = new Set<string>();\n  for (const file of files) {\n    if (file.filename.includes(localePrefix)) {\n      localizedBasePaths.add(file.filename.replace(localePrefix, '/content/'));\n    }\n  }\n\n  return files.filter((file) => {\n    // Frontmatter locale attribute takes priority\n    if (file.attributes['locale']) {\n      return file.attributes['locale'] === locale;\n    }\n    // File is in the active locale subdirectory — include\n    if (file.filename.includes(localePrefix)) {\n      return true;\n    }\n    // File is in a different locale's subdirectory — exclude\n    for (const prefix of allLocalePrefixes) {\n      if (prefix !== localePrefix && file.filename.includes(prefix)) {\n        return false;\n      }\n    }\n    // Universal content — include only if no localized variant exists\n    return !localizedBasePaths.has(file.filename);\n  });\n}\n\n/**\n * Prepends locale-prefixed candidates before the standard candidates\n * for content file map key lookup.\n */\nexport function withLocaleCandidates(\n  candidates: string[],\n  locale: string | null | undefined,\n): string[] {\n  if (!locale) {\n    return candidates;\n  }\n  const localeCandidates = candidates.map((c) =>\n    c.replace('/src/content/', `/src/content/${locale}/`),\n  );\n  return [...localeCandidates, ...candidates];\n}\n","/**\n * Returns the list of content files by filename with ?analog-content-list=true.\n * We use the query param to transform the return into an array of\n * just front matter attributes.\n *\n * @returns\n */\nexport const getContentFilesList = () => {\n  let ANALOG_CONTENT_FILE_LIST = {};\n\n  return ANALOG_CONTENT_FILE_LIST as Record<string, Record<string, any>>;\n};\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = () => {\n  let ANALOG_CONTENT_ROUTE_FILES = {};\n\n  return ANALOG_CONTENT_ROUTE_FILES;\n};\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n  // Extract the last path segment without its extension.\n  // Handles names with dots like [[...slug]].md by stripping only the final extension.\n  const lastSegment = (filename.split(/[/\\\\]/).pop() || '').trim();\n  const base = lastSegment.replace(/\\.[^./\\\\]+$/, ''); // strip only the final extension\n  // Treat index.md as index route => empty slug\n  return base === 'index' ? '' : base;\n}\n\nexport const CONTENT_FILES_LIST_TOKEN = new InjectionToken<ContentFile[]>(\n  '@analogjs/content Content Files List',\n  {\n    providedIn: 'root',\n    factory() {\n      const contentFiles = getContentFilesList();\n\n      return Object.keys(contentFiles).map((filename) => {\n        const attributes = contentFiles[filename];\n        const slug = attributes['slug'];\n\n        return {\n          filename,\n          attributes,\n          slug: slug ? encodeURI(slug) : encodeURI(getSlug(filename)),\n        };\n      });\n    },\n  },\n);\n","import { InjectionToken, Signal, inject, signal } from '@angular/core';\n\nimport { getContentFiles } from './get-content-files';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport const CONTENT_FILES_TOKEN = new InjectionToken<\n  Record<string, () => Promise<string>>\n>('@analogjs/content Content Files', {\n  providedIn: 'root',\n  factory() {\n    const contentFiles = getContentFiles();\n    const allFiles = { ...contentFiles };\n    const contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n    const lookup: Record<string, string> = {};\n    contentFilesList.forEach((item) => {\n      const contentFilename = item.filename.replace(\n        /(.*?)\\/content/,\n        '/src/content',\n      );\n      const fileParts = contentFilename.split('/');\n      const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n      const fileNameParts = fileParts[fileParts.length - 1].split('.');\n      const ext = fileNameParts[fileNameParts.length - 1];\n      let slug = (item.slug ?? '') as string;\n      // Default empty slug to 'index'\n      if (slug === '') {\n        slug = 'index';\n      }\n      // Slugs with path separators are scoped to the file's top-level\n      // subdirectory (e.g. `/src/content/docs`) rather than absolute root,\n      // so nested files keep resolving through `subdirectory` lookups.\n      // Files directly under `/src/content` keep the original root-relative\n      // behavior since they have no subdirectory of their own.\n      const subdirRoot =\n        fileParts.length > 4 ? fileParts.slice(0, 4).join('/') : '/src/content';\n      const newBase = slug.includes('/')\n        ? `${subdirRoot}/${slug}`\n        : `${filePath}/${slug}`;\n      lookup[contentFilename] = `${newBase}.${ext}`.replace(/\\/{2,}/g, '/');\n    });\n\n    const objectUsingSlugAttribute: Record<string, () => Promise<string>> = {};\n    Object.entries(allFiles).forEach((entry) => {\n      const filename = entry[0];\n      const value = entry[1];\n      const strippedFilename = filename.replace(\n        /^\\/(.*?)\\/content/,\n        '/src/content',\n      );\n\n      const newFilename = lookup[strippedFilename];\n      if (newFilename !== undefined) {\n        const objectFilename = newFilename.replace(\n          /^\\/(.*?)\\/content/,\n          '/src/content',\n        );\n        objectUsingSlugAttribute[objectFilename] =\n          value as () => Promise<string>;\n      }\n    });\n\n    return objectUsingSlugAttribute;\n  },\n});\n\nexport const CONTENT_FILES_MAP_TOKEN = new InjectionToken<\n  Signal<Record<string, () => Promise<string>>>\n>('@analogjs/content Content Files', {\n  providedIn: 'root',\n  factory() {\n    return signal(inject(CONTENT_FILES_TOKEN));\n  },\n});\n","import fm from 'front-matter';\n\nexport function parseRawContentFile<Attributes extends Record<string, any>>(\n  rawContentFile: string,\n): { content: string; attributes: Attributes } {\n  const { body, attributes } = fm<Attributes>(rawContentFile);\n  return { content: body, attributes };\n}\n","import { firstValueFrom, isObservable, Observable } from 'rxjs';\n\ndeclare const Zone: any;\n\nexport async function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T> {\n  if (isObservable(prom)) {\n    prom = firstValueFrom(prom);\n  }\n\n  if (typeof Zone === 'undefined') {\n    return prom;\n  }\n\n  const macroTask = Zone.current.scheduleMacroTask(\n    `AnalogContentResolve-${Math.random()}`,\n    () => {},\n    {},\n    () => {},\n  );\n  return prom.then((p: T) => {\n    macroTask.invoke();\n    return p;\n  });\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ɵPendingTasksInternal as ɵPendingTasks } from '@angular/core';\n\n@Injectable()\nexport class RenderTaskService {\n  #pendingTasks = inject(ɵPendingTasks);\n\n  addRenderTask() {\n    return this.#pendingTasks.add();\n  }\n\n  clearRenderTask(clear: number | Function) {\n    if (typeof clear === 'function') {\n      clear();\n    } else if (typeof (this.#pendingTasks as any).remove === 'function') {\n      (this.#pendingTasks as any).remove(clear);\n    }\n  }\n}\n","/// <reference types=\"vite/client\" />\n\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { from, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\n\nimport { ContentFile } from './content-file';\nimport { ContentRenderer } from './content-renderer';\nimport { CONTENT_LOCALE, withLocaleCandidates } from './content-locale';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { parseRawContentFile } from './parse-raw-content-file';\nimport { waitFor } from './utils/zone-wait-for';\nimport { RenderTaskService } from './render-task.service';\n\nfunction getContentFile<\n  Attributes extends Record<string, any> = Record<string, any>,\n>(\n  contentFiles: Record<string, () => Promise<string>>,\n  prefix: string,\n  slug: string,\n  fallback: string,\n  renderTaskService: RenderTaskService,\n  contentRenderer: ContentRenderer,\n  locale?: string | null,\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n  // Normalize file keys so both \"/src/content/...\" and \"/<project>/src/content/...\" resolve.\n  const normalizedFiles: Record<string, () => Promise<string>> = {};\n  for (const [key, resolver] of Object.entries(contentFiles)) {\n    const normalizedKey = key\n      .replace(/^(?:.*)\\/content/, '/src/content')\n      .replace(/\\/{2,}/g, '/');\n    normalizedFiles[normalizedKey] = resolver as () => Promise<string>;\n  }\n\n  const base = `/src/content/${prefix}${slug}`.replace(/\\/{2,}/g, '/');\n  const candidates = [\n    `${base}.md`,\n    `${base}.agx`,\n    `${base}/index.md`,\n    `${base}/index.agx`,\n  ];\n\n  const allCandidates = withLocaleCandidates(candidates, locale);\n  const matchKey = allCandidates.find((k) => k in normalizedFiles);\n  const contentFile = matchKey ? normalizedFiles[matchKey] : undefined;\n  const resolvedBase = (matchKey || `${base}.md`).replace(/\\.(md|agx)$/, '');\n\n  if (!contentFile) {\n    return of({\n      filename: resolvedBase,\n      attributes: {},\n      slug: '',\n      content: fallback,\n      toc: [],\n    });\n  }\n\n  const contentTask = renderTaskService.addRenderTask();\n  return new Observable<string | { default: any; metadata: any }>(\n    (observer) => {\n      const contentResolver = contentFile();\n\n      if (import.meta.env.SSR === true) {\n        waitFor(contentResolver).then((content) => {\n          observer.next(content);\n          observer.complete();\n\n          setTimeout(() => renderTaskService.clearRenderTask(contentTask), 10);\n        });\n      } else {\n        contentResolver.then((content) => {\n          observer.next(content);\n          observer.complete();\n        });\n      }\n    },\n  ).pipe(\n    switchMap((contentFile) => {\n      if (typeof contentFile === 'string') {\n        const { content, attributes } =\n          parseRawContentFile<Attributes>(contentFile);\n        return from(contentRenderer.render(content)).pipe(\n          map((rendered) => ({\n            filename: resolvedBase,\n            slug,\n            attributes,\n            content,\n            toc: rendered.toc ?? [],\n          })),\n        );\n      }\n      return of({\n        filename: resolvedBase,\n        slug,\n        attributes: contentFile.metadata,\n        content: contentFile.default,\n        toc: [],\n      });\n    }),\n  );\n}\n\n/**\n * Retrieves the static content using the provided param and/or prefix.\n *\n * @param param route parameter (default: 'slug')\n * @param fallback fallback text if content file is not found (default: 'No Content Found')\n */\nexport function injectContent<\n  Attributes extends Record<string, any> = Record<string, any>,\n>(\n  param:\n    | string\n    | {\n        param: string;\n        subdirectory: string;\n      }\n    | {\n        customFilename: string;\n      } = 'slug',\n  fallback = 'No Content Found',\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n  const contentFiles = inject(CONTENT_FILES_TOKEN);\n  const contentRenderer = inject(ContentRenderer);\n  const renderTaskService = inject(RenderTaskService);\n  const locale = inject(CONTENT_LOCALE, { optional: true });\n  const task = renderTaskService.addRenderTask();\n\n  if (typeof param === 'string' || 'param' in param) {\n    const prefix = typeof param === 'string' ? '' : `${param.subdirectory}/`;\n    const route = inject(ActivatedRoute);\n    const paramKey = typeof param === 'string' ? param : param.param;\n    return route.paramMap.pipe(\n      map((params) => params.get(paramKey)),\n      switchMap((slug) => {\n        if (slug) {\n          return getContentFile<Attributes>(\n            contentFiles,\n            prefix,\n            slug,\n            fallback,\n            renderTaskService,\n            contentRenderer,\n            locale,\n          );\n        }\n        return of({\n          filename: '',\n          slug: '',\n          attributes: {},\n          content: fallback,\n          toc: [],\n        });\n      }),\n      tap(() => renderTaskService.clearRenderTask(task)),\n    );\n  } else {\n    return getContentFile<Attributes>(\n      contentFiles,\n      '',\n      param.customFilename,\n      fallback,\n      renderTaskService,\n      contentRenderer,\n      locale,\n    ).pipe(tap(() => renderTaskService.clearRenderTask(task)));\n  }\n}\n","import { inject } from '@angular/core';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { CONTENT_LOCALE, filterByLocale } from './content-locale';\nimport { RenderTaskService } from './render-task.service';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n  filterFn?: InjectContentFilesFilterFunction<Attributes>,\n): ContentFile<Attributes>[] {\n  const renderTaskService = inject(RenderTaskService);\n  const task = renderTaskService.addRenderTask();\n  const allContentFiles = inject(\n    CONTENT_FILES_LIST_TOKEN,\n  ) as ContentFile<Attributes>[];\n  const locale = inject(CONTENT_LOCALE, { optional: true });\n  renderTaskService.clearRenderTask(task);\n\n  let results = allContentFiles;\n\n  if (locale) {\n    results = filterByLocale(results, locale);\n  }\n\n  if (filterFn) {\n    results = results.filter(filterFn);\n  }\n\n  return results;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n  value: ContentFile<T>,\n  index: number,\n  array: ContentFile<T>[],\n) => boolean;\n\nexport function injectContentFilesMap() {\n  return inject(CONTENT_FILES_TOKEN);\n}\n","import {\n  AbstractType,\n  Injectable,\n  Provider,\n  ProviderToken,\n  Type,\n} from '@angular/core';\n\nexport interface MarkedContentHighlighter {\n  augmentCodeBlock?(code: string, lang: string): string;\n}\n\n@Injectable()\nexport abstract class MarkedContentHighlighter {\n  abstract getHighlightExtension(): import('marked').MarkedExtension;\n}\n\nexport function withHighlighter(\n  provider: (\n    | { useValue: MarkedContentHighlighter }\n    | {\n        useClass:\n          | Type<MarkedContentHighlighter>\n          | AbstractType<MarkedContentHighlighter>;\n      }\n    | { useFactory: (...deps: any[]) => MarkedContentHighlighter }\n  ) & { deps?: ProviderToken<any>[] },\n): Provider {\n  return { provide: MarkedContentHighlighter, ...provider } as Provider;\n}\n","/**\n * Credit goes to Scully for original implementation\n * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts\n */\nimport { inject, Injectable } from '@angular/core';\nimport { marked } from 'marked';\nimport { gfmHeadingId } from 'marked-gfm-heading-id';\nimport { mangle } from 'marked-mangle';\nimport { MarkedContentHighlighter } from './marked-content-highlighter';\n\n@Injectable()\nexport class MarkedSetupService {\n  private readonly marked: typeof marked;\n  private readonly highlighter = inject(MarkedContentHighlighter, {\n    optional: true,\n  });\n\n  constructor() {\n    const renderer = new marked.Renderer();\n    renderer.code = ({ text, lang }) => {\n      // Let's do a language based detection like on GitHub\n      // So we can still have non-interpreted mermaid code\n      if (lang === 'mermaid') {\n        return '<pre class=\"mermaid\">' + text + '</pre>';\n      }\n\n      if (!lang) {\n        return '<pre><code>' + text + '</code></pre>';\n      }\n\n      if (this.highlighter?.augmentCodeBlock) {\n        return this.highlighter?.augmentCodeBlock(text, lang);\n      }\n\n      return `<pre class=\"language-${lang}\"><code class=\"language-${lang}\">${text}</code></pre>`;\n    };\n\n    const extensions = [gfmHeadingId(), mangle()];\n\n    if (this.highlighter) {\n      extensions.push(this.highlighter.getHighlightExtension());\n    }\n\n    marked.use(...extensions, {\n      renderer,\n      pedantic: false,\n      gfm: true,\n      breaks: false,\n    });\n\n    this.marked = marked;\n  }\n\n  getMarkedInstance(): typeof marked {\n    return this.marked;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nimport {\n  ContentRenderer,\n  RenderedContent,\n  TableOfContentItem,\n} from './content-renderer';\nimport { MarkedSetupService } from './marked-setup.service';\n\n@Injectable()\nexport class MarkdownContentRendererService implements ContentRenderer {\n  #marked = inject(MarkedSetupService, { self: true });\n\n  async render(content: string): Promise<RenderedContent> {\n    const renderedContent = await this.#marked\n      .getMarkedInstance()\n      .parse(content);\n    return {\n      content: renderedContent,\n      toc: getHeadingList(),\n    };\n  }\n\n  getContentHeadings(content: string): TableOfContentItem[] {\n    return [...content.matchAll(/^(#{1,6})\\s+(.+?)\\s*$/gm)].map((match) => ({\n      id: match[2]\n        .trim()\n        .toLowerCase()\n        .replace(/[^\\w\\s-]/g, '')\n        .replace(/\\s+/g, '-'),\n      level: match[1].length,\n      text: match[2].trim(),\n    }));\n  }\n\n  // eslint-disable-next-line\n  enhance() {}\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { inject } from '@angular/core';\n\nimport { injectContentFilesMap } from './inject-content-files';\n\ntype ContentFileLoaderFunction = () => Promise<\n  Record<string, () => Promise<string>>\n>;\n\nexport const CONTENT_FILE_LOADER =\n  new InjectionToken<ContentFileLoaderFunction>(\n    '@analogjs/content/resource File Loader',\n  );\n\nexport function injectContentFileLoader() {\n  return inject(CONTENT_FILE_LOADER) as ContentFileLoaderFunction;\n}\n\nexport function withContentFileLoader(): Provider {\n  return {\n    provide: CONTENT_FILE_LOADER,\n    useFactory() {\n      return async () => injectContentFilesMap();\n    },\n  };\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { inject } from '@angular/core';\n\nimport { ContentFile } from './content-file';\nimport { injectContentFiles } from './inject-content-files';\n\ntype ContentListLoaderFunction<Attributes extends Record<string, any>> =\n  () => Promise<ContentFile<Attributes>[]>;\n\nexport const CONTENT_LIST_LOADER = new InjectionToken<\n  ContentListLoaderFunction<any>\n>('@analogjs/content/resource List Loader');\n\nexport function injectContentListLoader<\n  Attributes extends Record<string, any>,\n>() {\n  return inject(CONTENT_LIST_LOADER) as ContentListLoaderFunction<Attributes>;\n}\n\nexport function withContentListLoader(): Provider {\n  return {\n    provide: CONTENT_LIST_LOADER,\n    useFactory() {\n      return async () => injectContentFiles();\n    },\n  };\n}\n","import { Provider, InjectionToken } from '@angular/core';\nimport { ContentRenderer, NoopContentRenderer } from './content-renderer';\nimport { RenderTaskService } from './render-task.service';\nimport { withContentFileLoader } from './content-file-loader';\nimport { withContentListLoader } from './content-list-loader';\n\nexport interface MarkdownRendererOptions {\n  loadMermaid?: () => Promise<typeof import('mermaid')>;\n}\n\nconst CONTENT_RENDERER_PROVIDERS: Provider[] = [\n  {\n    provide: ContentRenderer,\n    useClass: NoopContentRenderer,\n  },\n  withContentFileLoader(),\n  withContentListLoader(),\n];\n\nexport function withMarkdownRenderer(\n  options?: MarkdownRendererOptions,\n): Provider {\n  return [\n    CONTENT_RENDERER_PROVIDERS,\n    options?.loadMermaid\n      ? [\n          {\n            provide: MERMAID_IMPORT_TOKEN,\n            useFactory: options.loadMermaid,\n          },\n        ]\n      : [],\n  ];\n}\n\nexport function provideContent(...features: Provider[]) {\n  return [\n    { provide: RenderTaskService, useClass: RenderTaskService },\n    ...features,\n  ];\n}\n\nexport const MERMAID_IMPORT_TOKEN = new InjectionToken<\n  Promise<typeof import('mermaid')>\n>('mermaid_import');\n","import { AsyncPipe } from '@angular/common';\nimport {\n  AfterViewChecked,\n  Component,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ContentRenderer } from './content-renderer';\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\n\n@Component({\n  selector: 'analog-markdown-route',\n  standalone: true,\n  imports: [AsyncPipe],\n  hostDirectives: [AnchorNavigationDirective],\n  preserveWhitespaces: true,\n  encapsulation: ViewEncapsulation.None,\n  template: `<div [innerHTML]=\"content\" [class]=\"classes\"></div>`,\n})\nexport default class AnalogMarkdownRouteComponent implements AfterViewChecked {\n  private sanitizer = inject(DomSanitizer);\n  private route = inject(ActivatedRoute);\n  contentRenderer = inject(ContentRenderer);\n\n  protected content: SafeHtml = this.sanitizer.bypassSecurityTrustHtml(\n    this.route.snapshot.data['renderedAnalogContent'],\n  );\n\n  @Input() classes = 'analog-markdown-route';\n\n  ngAfterViewChecked() {\n    this.contentRenderer.enhance();\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewChecked,\n  Component,\n  NgZone,\n  PLATFORM_ID,\n  Signal,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { from, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\nimport { ContentRenderer } from './content-renderer';\nimport { MERMAID_IMPORT_TOKEN } from './provide-content';\n\n@Component({\n  selector: 'analog-markdown',\n  standalone: true,\n  hostDirectives: [AnchorNavigationDirective],\n  preserveWhitespaces: true,\n  encapsulation: ViewEncapsulation.None,\n  template: ` <div [innerHTML]=\"htmlContent()\" [class]=\"classes()\"></div> `,\n})\nexport default class AnalogMarkdownComponent implements AfterViewChecked {\n  private sanitizer = inject(DomSanitizer);\n  private route = inject(ActivatedRoute);\n  private zone = inject(NgZone);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly mermaidImport = inject(MERMAID_IMPORT_TOKEN, {\n    optional: true,\n  });\n  private mermaid: typeof import('mermaid') | undefined;\n\n  private contentSource: Signal<SafeHtml | string | undefined> = toSignal(\n    this.getContentSource(),\n  );\n  readonly htmlContent = computed(() => {\n    const inputContent = this.content();\n\n    if (inputContent) {\n      return this.sanitizer.bypassSecurityTrustHtml(inputContent as string);\n    }\n\n    return this.contentSource();\n  });\n  readonly content = input<string | object | null>();\n  readonly classes = input('analog-markdown');\n\n  contentRenderer = inject(ContentRenderer);\n\n  constructor() {\n    if (isPlatformBrowser(this.platformId) && this.mermaidImport) {\n      // Mermaid can only be loaded on client side\n      this.loadMermaid(this.mermaidImport);\n    }\n  }\n\n  getContentSource() {\n    return this.route.data.pipe(\n      map<Data, string>((data) => data['_analogContent'] ?? ''),\n      switchMap((contentString) => this.renderContent(contentString)),\n      map((content) => this.sanitizer.bypassSecurityTrustHtml(content)),\n      catchError((e) => of(`There was an error ${e}`)),\n    );\n  }\n\n  async renderContent(content: string): Promise<string> {\n    const rendered = await this.contentRenderer.render(content);\n    return rendered.content;\n  }\n\n  ngAfterViewChecked() {\n    this.contentRenderer.enhance();\n    this.zone.runOutsideAngular(() => this.mermaid?.default.run());\n  }\n\n  private loadMermaid(mermaidImport: Promise<typeof import('mermaid')>) {\n    this.zone.runOutsideAngular(() =>\n      // Wrap into an observable to avoid redundant initialization once\n      // the markdown component is destroyed before the promise is resolved.\n      from(mermaidImport)\n        .pipe(takeUntilDestroyed())\n        .subscribe((mermaid) => {\n          this.mermaid = mermaid;\n          this.mermaid.default.initialize({ startOnLoad: false });\n          // Explicitly running mermaid as ngAfterViewChecked\n          // has probably already been called\n          this.mermaid?.default.run();\n        }),\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵPendingTasks"],"mappings":"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"}