@analogjs/content 0.2.31-beta.1 → 0.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @returns
|
|
7
7
|
*/
|
|
8
|
-
export const getContentFilesList = () => import.meta.glob('/src/content/**/*.md', {
|
|
8
|
+
export const getContentFilesList = () => import.meta.glob(['/src/content/**/*.md', '/src/content/**/*.agx'], {
|
|
9
9
|
eager: true,
|
|
10
10
|
import: 'default',
|
|
11
11
|
query: { 'analog-content-list': true },
|
|
@@ -15,7 +15,7 @@ export const getContentFilesList = () => import.meta.glob('/src/content/**/*.md'
|
|
|
15
15
|
*
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
|
-
export const getContentFiles = () => import.meta.glob(['/src/content/**/*.md'], {
|
|
18
|
+
export const getContentFiles = () => import.meta.glob(['/src/content/**/*.md', '/src/content/**/*.agx'], {
|
|
19
19
|
as: 'raw',
|
|
20
20
|
});
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbnRlbnQtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvZ2V0LWNvbnRlbnQtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNkLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUMsRUFDakQ7SUFDRSxLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLEtBQUssRUFBRSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRTtDQUN2QyxDQUNGLENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDLEVBQUU7SUFDbEUsRUFBRSxFQUFFLEtBQUs7Q0FDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY29udGVudCBmaWxlcyBieSBmaWxlbmFtZSB3aXRoID9hbmFsb2ctY29udGVudC1saXN0PXRydWUuXG4gKiBXZSB1c2UgdGhlIHF1ZXJ5IHBhcmFtIHRvIHRyYW5zZm9ybSB0aGUgcmV0dXJuIGludG8gYW4gYXJyYXkgb2ZcbiAqIGp1c3QgZnJvbnQgbWF0dGVyIGF0dHJpYnV0ZXMuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnRlbnRGaWxlc0xpc3QgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgIFsnL3NyYy9jb250ZW50LyoqLyoubWQnLCAnL3NyYy9jb250ZW50LyoqLyouYWd4J10sXG4gICAge1xuICAgICAgZWFnZXI6IHRydWUsXG4gICAgICBpbXBvcnQ6ICdkZWZhdWx0JyxcbiAgICAgIHF1ZXJ5OiB7ICdhbmFsb2ctY29udGVudC1saXN0JzogdHJ1ZSB9LFxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXp5IGxvYWRlZCBjb250ZW50IGZpbGVzIGZvciBsb29rdXBzLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50RmlsZXMgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iKFsnL3NyYy9jb250ZW50LyoqLyoubWQnLCAnL3NyYy9jb250ZW50LyoqLyouYWd4J10sIHtcbiAgICBhczogJ3JhdycsXG4gIH0pO1xuIl19
|
|
@@ -69,7 +69,7 @@ function isInternalUrl(anchorElement, document) {
|
|
|
69
69
|
*
|
|
70
70
|
* @returns
|
|
71
71
|
*/
|
|
72
|
-
const getContentFilesList = () => import.meta.glob('/src/content/**/*.md', {
|
|
72
|
+
const getContentFilesList = () => import.meta.glob(['/src/content/**/*.md', '/src/content/**/*.agx'], {
|
|
73
73
|
eager: true,
|
|
74
74
|
import: 'default',
|
|
75
75
|
query: { 'analog-content-list': true },
|
|
@@ -79,7 +79,7 @@ const getContentFilesList = () => import.meta.glob('/src/content/**/*.md', {
|
|
|
79
79
|
*
|
|
80
80
|
* @returns
|
|
81
81
|
*/
|
|
82
|
-
const getContentFiles = () => import.meta.glob(['/src/content/**/*.md'], {
|
|
82
|
+
const getContentFiles = () => import.meta.glob(['/src/content/**/*.md', '/src/content/**/*.agx'], {
|
|
83
83
|
as: 'raw',
|
|
84
84
|
});
|
|
85
85
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analogjs-content.mjs","sources":["../../../../packages/content/src/lib/anchor-navigation.directive.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/content.ts","../../../../packages/content/src/lib/content-renderer.ts","../../../../packages/content/src/lib/inject-content-files.ts","../../../../packages/content/src/lib/prism/angular.js","../../../../packages/content/src/lib/marked-setup.service.ts","../../../../packages/content/src/lib/markdown-content-renderer.service.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: HTMLElement): 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","/**\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 import.meta.glob<Record<string, any>>('/src/content/**/*.md', {\n eager: true,\n import: 'default',\n query: { 'analog-content-list': true },\n });\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = () =>\n import.meta.glob(['/src/content/**/*.md'], {\n as: 'raw',\n });\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n const parts = filename.match(/^(\\\\|\\/)(.+(\\\\|\\/))*(.+)\\.(.+)$/);\n return parts?.length ? parts[4] : '';\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, inject } 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 contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n const lookup: Record<string, string> = {};\n contentFilesList.forEach((item) => {\n const fileParts = item.filename.split('/');\n const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n lookup[item.filename] = `${filePath}/${item.slug}.md`;\n });\n\n const objectUsingSlugAttribute: Record<string, () => Promise<string>> = {};\n Object.entries(contentFiles).forEach((entry) => {\n const filename = entry[0];\n const value = entry[1];\n\n const newFilename = lookup[filename];\n if (newFilename !== undefined) {\n objectUsingSlugAttribute[newFilename] = value;\n }\n });\n\n return objectUsingSlugAttribute;\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 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","/// <reference types=\"vite/client\" />\n\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { parseRawContentFile } from './parse-raw-content-file';\nimport { waitFor } from './utils/zone-wait-for';\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): Observable<ContentFile<Attributes | Record<string, never>>> {\n const filePath = `/src/content/${prefix}${slug}.md`;\n const contentFile = contentFiles[filePath];\n if (!contentFile) {\n return of({\n filename: filePath,\n attributes: {},\n slug: '',\n content: fallback,\n });\n }\n\n return new Observable<string>((observer) => {\n const contentResolver = contentFile();\n\n if (import.meta.env.SSR === true) {\n waitFor(contentResolver).then((content) => {\n observer.next(content);\n });\n } else {\n contentResolver.then((content) => {\n observer.next(content);\n });\n }\n }).pipe(\n map((rawContentFile) => {\n const { content, attributes } =\n parseRawContentFile<Attributes>(rawContentFile);\n\n return {\n filename: filePath,\n slug,\n attributes,\n content,\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\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 );\n } else {\n return of({\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n });\n }\n })\n );\n } else {\n return getContentFile<Attributes>(\n contentFiles,\n '',\n param.customFilename,\n fallback\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type TableOfContentItem = {\n id: string;\n level: number; // starts at 1\n text: string;\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n async render(content: string): Promise<string> {\n return content;\n }\n\n getContentHeadings(): Array<TableOfContentItem> {\n return [];\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n","import { ContentFile } from './content-file';\nimport { inject } from '@angular/core';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes>\n): ContentFile<Attributes>[] {\n const allContentFiles = inject(\n CONTENT_FILES_LIST_TOKEN\n ) as ContentFile<Attributes>[];\n\n if (filterFn) {\n const filteredContentFiles = allContentFiles.filter(filterFn);\n\n return filteredContentFiles;\n }\n return allContentFiles;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n value: ContentFile<T>,\n index: number,\n array: ContentFile<T>[]\n) => boolean;\n","(function () {\n if (typeof Prism === 'undefined') {\n return;\n }\n\n Prism.languages.angular = Prism.languages.extend('markup', {\n keyword:\n /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\\b/,\n operator: /\\b(?:on|when)\\b/,\n number: {\n pattern: /\\b(minimum|after)\\s+\\d+(?:s|ms|)/gi,\n lookbehind: true,\n },\n builtin: {\n pattern:\n /\\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,\n },\n function:\n /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n });\n\n Prism.languages.ng = Prism.languages.angular;\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 { Injectable } from '@angular/core';\nimport { marked } from 'marked';\nimport { gfmHeadingId } from 'marked-gfm-heading-id';\nimport { markedHighlight } from 'marked-highlight';\n\nimport 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport './prism/angular';\n\ndeclare const Prism: typeof import('prismjs');\n\n@Injectable()\nexport class MarkedSetupService {\n private readonly marked: typeof marked;\n\n constructor() {\n const renderer = new marked.Renderer();\n renderer.code = (code: string, lang: string) => {\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\">' + code + '</pre>';\n }\n\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n\n const classes =\n lang.startsWith('diff') && Prism.languages['diff']\n ? `language-${lang} diff-highlight`\n : `language-${lang.replace('diff-', '')}`;\n return `<pre class=\"${classes}\"><code class=\"${classes}\">${code}</code></pre>`;\n };\n\n marked.use(\n gfmHeadingId(),\n markedHighlight({\n async: true,\n highlight: (code: string, lang: string) => {\n let diff = lang?.startsWith('diff-');\n lang = diff ? lang.replace('diff-', '') : lang || 'typescript';\n\n if (diff && !Prism.languages['diff']) {\n diff = false;\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The \\`diff\\` language and plugin are not available in the provided setup.\n To enable it, add the following imports your \\`main.ts\\`:\n import 'prismjs/components/prism-diff';\n import 'prismjs/plugins/diff-highlight/prism-diff-highlight';\n ---------------------------------------------------------------------------------------\n `);\n }\n\n if (!Prism.languages[lang]) {\n if (lang !== 'mermaid') {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available in the provided setup.\n To enable it, add the following import your \\`main.ts\\`:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n }\n return code;\n }\n return Prism.highlight(\n code,\n diff ? Prism.languages['diff'] : Prism.languages[lang],\n lang\n );\n },\n }),\n {\n renderer,\n pedantic: false,\n gfm: true,\n breaks: false,\n sanitize: false,\n smartypants: false,\n xhtml: false,\n mangle: false,\n }\n );\n\n this.marked = marked;\n }\n\n getMarkedInstance(): typeof marked {\n return this.marked;\n }\n}\n","import {\n inject,\n Injectable,\n InjectionToken,\n PLATFORM_ID,\n Provider,\n} from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nimport { ContentRenderer, TableOfContentItem } from './content-renderer';\nimport { MarkedSetupService } from './marked-setup.service';\n\n@Injectable()\nexport class MarkdownContentRendererService implements ContentRenderer {\n platformId = inject(PLATFORM_ID);\n #marked = inject(MarkedSetupService, { self: true });\n\n async render(content: string): Promise<string> {\n return this.#marked.getMarkedInstance().parse(content);\n }\n\n /**\n * The method is meant to be called after `render()`\n */\n getContentHeadings(): TableOfContentItem[] {\n return getHeadingList();\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n\nexport interface MarkdownRendererOptions {\n loadMermaid?: () => Promise<typeof import('mermaid')>;\n}\n\nexport function withMarkdownRenderer(\n options?: MarkdownRendererOptions\n): Provider {\n return [\n {\n provide: ContentRenderer,\n useFactory: () => new MarkdownContentRendererService(),\n deps: [MarkedSetupService],\n },\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 [...features, MarkedSetupService];\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 { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, from, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\nimport { ContentRenderer } from './content-renderer';\nimport { MERMAID_IMPORT_TOKEN } from './markdown-content-renderer.service';\n\n@Component({\n selector: 'analog-markdown',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`,\n})\nexport default class AnalogMarkdownComponent\n implements OnInit, OnChanges, AfterViewChecked\n{\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 public content$: Observable<SafeHtml> = of('');\n\n @Input() content!: string | undefined | null;\n @Input() classes = '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 ngOnInit(): void {\n this.updateContent();\n }\n\n ngOnChanges(): void {\n this.updateContent();\n }\n\n updateContent() {\n this.content$ = this.route.data.pipe(\n map<Data, string>((data) => this.content ?? data['_analogContent']),\n mergeMap((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 return this.contentRenderer.render(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":["i1.AnchorNavigationDirective"],"mappings":";;;;;;;;;;;;;;;;;;;;;;MAQa,yBAAyB,CAAA;AAJtC,IAAA,WAAA,GAAA;AAKmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAmB1C,KAAA;AAhBC,IAAA,gBAAgB,CAAC,OAAoB,EAAA;QACnC,IACE,OAAO,YAAY,iBAAiB;AACpC,YAAA,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrC,aAAa,CAAC,OAAO,CAAC;AACtB,YAAA,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAC9B;YACA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAC3C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAG,EAAA,QAAQ,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAE/B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;8GArBU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;8BAOC,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAA;;AAmB1C,SAAS,oBAAoB,CAAC,aAAgC,EAAA;IAC5D,OAAO,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,aAAgC,EAAA;IACrD,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CACpB,aAAgC,EAChC,QAAkB,EAAA;IAElB,QACE,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC7C,aAAa,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EACrD;AACJ;;AChDA;;;;;;AAMG;AACI,MAAM,mBAAmB,GAAG,MACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAsB,sBAAsB,EAAE;AAC5D,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE;AACvC,CAAA,CAAC,CAAC;AAEL;;;;AAIG;AACI,MAAM,eAAe,GAAG,MAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE;AACzC,IAAA,EAAE,EAAE,KAAK;AACV,CAAA,CAAC;;AClBJ,SAAS,OAAO,CAAC,QAAgB,EAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAChE,IAAA,OAAO,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACvC,CAAC;AAEM,MAAM,wBAAwB,GAAG,IAAI,cAAc,CACxD,sCAAsC,EACtC;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,GAAA;AACL,QAAA,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;AAE3C,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAChD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAEhC,OAAO;gBACL,QAAQ;gBACR,UAAU;AACV,gBAAA,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aAC5D,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AACF,CAAA,CACF;;ACvBM,MAAM,mBAAmB,GAAG,IAAI,cAAc,CAEnD,iCAAiC,EAAE;AACnC,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,GAAA;AACL,QAAA,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AACvC,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAE1D,MAAM,MAAM,GAA2B,EAAE,CAAC;AAC1C,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAG,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,KAAK,CAAC;AACxD,SAAC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAA0C,EAAE,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7C,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,gBAAA,wBAAwB,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;AAC/C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,wBAAwB,CAAC;KACjC;AACF,CAAA,CAAC;;AC/BI,SAAU,mBAAmB,CACjC,cAAsB,EAAA;IAEtB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAa,cAAc,CAAC,CAAC;AAC5D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACvC;;ACHO,eAAe,OAAO,CAAI,IAAgC,EAAA;AAC/D,IAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACtB,QAAA,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,KAAA;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC9C,CAAA,qBAAA,EAAwB,IAAI,CAAC,MAAM,EAAE,CAAE,CAAA,EACvC,MAAO,GAAC,EACR,EAAE,EACF,MAAK,GAAG,CACT,CAAC;AACF,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAI,KAAI;QACxB,SAAS,CAAC,MAAM,EAAE,CAAC;AACnB,QAAA,OAAO,CAAC,CAAC;AACX,KAAC,CAAC,CAAC;AACL;;AClBA;AAYA,SAAS,cAAc,CAGrB,YAAmD,EACnD,MAAc,EACd,IAAY,EACZ,QAAgB,EAAA;AAEhB,IAAA,MAAM,QAAQ,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAG,EAAA,IAAI,KAAK,CAAC;AACpD,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,OAAO,EAAE,CAAC;AACR,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA,CAAC,CAAC;AACJ,KAAA;AAED,IAAA,OAAO,IAAI,UAAU,CAAS,CAAC,QAAQ,KAAI;AACzC,QAAA,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;QAEtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE;YAChC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACxC,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;AACL,YAAA,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACJ,SAAA;KACF,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,cAAc,KAAI;QACrB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAC3B,mBAAmB,CAAa,cAAc,CAAC,CAAC;QAElD,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ;YAClB,IAAI;YACJ,UAAU;YACV,OAAO;SACR,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;AAKG;AACG,SAAU,aAAa,CAG3B,KAAA,GAQQ,MAAM,EACd,QAAQ,GAAG,kBAAkB,EAAA;AAE7B,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE;AACjD,QAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAA,EAAG,KAAK,CAAC,YAAY,GAAG,CAAC;AACzE,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACjE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CACxB,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EACrC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjB,YAAA,IAAI,IAAI,EAAE;gBACR,OAAO,cAAc,CACnB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,QAAQ,CACT,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,EAAE,CAAC;AACR,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,UAAU,EAAE,EAAE;AACd,oBAAA,OAAO,EAAE,QAAQ;AAClB,iBAAA,CAAC,CAAC;AACJ,aAAA;SACF,CAAC,CACH,CAAC;AACH,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,cAAc,CACnB,YAAY,EACZ,EAAE,EACF,KAAK,CAAC,cAAc,EACpB,QAAQ,CACT,CAAC;AACH,KAAA;AACH;;MCvGsB,eAAe,CAAA;IACnC,MAAM,MAAM,CAAC,OAAe,EAAA;AAC1B,QAAA,OAAO,OAAO,CAAC;KAChB;IAED,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE,CAAC;KACX;;AAGD,IAAA,OAAO,MAAK;8GAVQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;ACJL,SAAU,kBAAkB,CAChC,QAAuD,EAAA;AAEvD,IAAA,MAAM,eAAe,GAAG,MAAM,CAC5B,wBAAwB,CACI,CAAC;AAE/B,IAAA,IAAI,QAAQ,EAAE;QACZ,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE9D,QAAA,OAAO,oBAAoB,CAAC;AAC7B,KAAA;AACD,IAAA,OAAO,eAAe,CAAC;AACzB;;;ACjBA,CAAC,YAAA;AACC,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;QAChC,OAAO;AACR,KAAA;AAED,IAAA,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzD,QAAA,OAAO,EACL,qEAAqE;AACvE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EACL,qEAAqE;AACxE,SAAA;AACD,QAAA,QAAQ,EACN,mGAAmG;AACtG,KAAA,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;AAC/C,CAAC,GAAG;;ACtBJ;;;AAGG;MAoBU,kBAAkB,CAAA;AAG7B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,KAAI;;;YAG7C,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,gBAAA,OAAO,uBAAuB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAClD,aAAA;YAED,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,aAAa,GAAG,IAAI,GAAG,eAAe,CAAC;AAC/C,aAAA;AAED,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;kBAC9C,CAAY,SAAA,EAAA,IAAI,CAAiB,eAAA,CAAA;kBACjC,CAAY,SAAA,EAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAE,CAAC;AAC9C,YAAA,OAAO,eAAe,OAAO,CAAA,eAAA,EAAkB,OAAO,CAAK,EAAA,EAAA,IAAI,eAAe,CAAC;AACjF,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,GAAG,CACR,YAAY,EAAE,EACd,eAAe,CAAC;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,SAAS,EAAE,CAAC,IAAY,EAAE,IAAY,KAAI;gBACxC,IAAI,IAAI,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrC,gBAAA,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;gBAE/D,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;oBACpC,IAAI,GAAG,KAAK,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,CAAA;;;;;;;AAOZ,YAAA,CAAA,CAAC,CAAC;AACJ,iBAAA;AAED,gBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;oBAC1B,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;;8BAEG,IAAI,CAAA;;yCAEO,IAAI,CAAA;;AAE9B,cAAA,CAAA,CAAC,CAAC;AACJ,qBAAA;AACD,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,OAAO,KAAK,CAAC,SAAS,CACpB,IAAI,EACJ,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EACtD,IAAI,CACL,CAAC;aACH;AACF,SAAA,CAAC,EACF;YACE,QAAQ;AACR,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CACF,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;8GA/EU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;MCTE,8BAA8B,CAAA;AAD3C,IAAA,WAAA,GAAA;AAEE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACjC,IAAO,CAAA,OAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAetD,KAAA;AAfC,IAAA,OAAO,CAA8C;IAErD,MAAM,MAAM,CAAC,OAAe,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACxD;AAED;;AAEG;IACH,kBAAkB,GAAA;QAChB,OAAO,cAAc,EAAE,CAAC;KACzB;;AAGD,IAAA,OAAO,MAAK;8GAhBD,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAA9B,8BAA8B,EAAA,CAAA,CAAA,EAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;;AAwBL,SAAU,oBAAoB,CAClC,OAAiC,EAAA;IAEjC,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,MAAM,IAAI,8BAA8B,EAAE;YACtD,IAAI,EAAE,CAAC,kBAAkB,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,EAAE,WAAW;AAClB,cAAE;AACE,gBAAA;AACE,oBAAA,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,OAAO,CAAC,WAAW;AAChC,iBAAA;AACF,aAAA;AACH,cAAE,EAAE;KACP,CAAC;AACJ,CAAC;AAEe,SAAA,cAAc,CAAC,GAAG,QAAoB,EAAA;AACpD,IAAA,OAAO,CAAC,GAAG,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAEM,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAEpD,gBAAgB,CAAC;;ACvCL,MAAO,4BAA4B,CAAA;AATjD,IAAA,WAAA,GAAA;AAUU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAClD,CAAC;QAEO,IAAO,CAAA,OAAA,GAAG,uBAAuB,CAAC;AAK5C,KAAA;IAHC,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;KAChC;8GAbkB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,6KAFrC,CAAqD,mDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAE5C,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAThD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,cAAc,EAAE,CAAC,yBAAyB,CAAC;AAC3C,oBAAA,mBAAmB,EAAE,IAAI;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAqD,mDAAA,CAAA;AAChE,iBAAA,CAAA;8BAUU,OAAO,EAAA,CAAA;sBAAf,KAAK;;;ACDM,MAAO,uBAAuB,CAAA;AAmB1C,IAAA,WAAA,GAAA;AAhBQ,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACb,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,EAAE;AAC5D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AAGI,QAAA,IAAA,CAAA,QAAQ,GAAyB,EAAE,CAAC,EAAE,CAAC,CAAC;QAGtC,IAAO,CAAA,OAAA,GAAG,iBAAiB,CAAC;AAErC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAGxC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;;AAE5D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,SAAA;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAClC,GAAG,CAAe,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EACnE,QAAQ,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAC9D,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,EACjE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,sBAAsB,CAAC,CAAA,CAAE,CAAC,CAAC,CACjD,CAAC;KACH;IAED,MAAM,aAAa,CAAC,OAAe,EAAA;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC7C;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KAChE;AAEO,IAAA,WAAW,CAAC,aAAgD,EAAA;AAClE,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;QAG1B,IAAI,CAAC,aAAa,CAAC;aAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAGxD,YAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7B,CAAC,CACL,CAAC;KACH;8GAlEkB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,yBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAFhC,CAA8D,4DAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAJ9D,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAMA,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAT3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,cAAc,EAAE,CAAC,yBAAyB,CAAC;AAC3C,oBAAA,mBAAmB,EAAE,IAAI;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAA8D,4DAAA,CAAA;AACzE,iBAAA,CAAA;wDAeU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;AC9CR;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"analogjs-content.mjs","sources":["../../../../packages/content/src/lib/anchor-navigation.directive.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/content.ts","../../../../packages/content/src/lib/content-renderer.ts","../../../../packages/content/src/lib/inject-content-files.ts","../../../../packages/content/src/lib/prism/angular.js","../../../../packages/content/src/lib/marked-setup.service.ts","../../../../packages/content/src/lib/markdown-content-renderer.service.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: HTMLElement): 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","/**\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 import.meta.glob<Record<string, any>>(\n ['/src/content/**/*.md', '/src/content/**/*.agx'],\n {\n eager: true,\n import: 'default',\n query: { 'analog-content-list': true },\n }\n );\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = () =>\n import.meta.glob(['/src/content/**/*.md', '/src/content/**/*.agx'], {\n as: 'raw',\n });\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n const parts = filename.match(/^(\\\\|\\/)(.+(\\\\|\\/))*(.+)\\.(.+)$/);\n return parts?.length ? parts[4] : '';\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, inject } 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 contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n const lookup: Record<string, string> = {};\n contentFilesList.forEach((item) => {\n const fileParts = item.filename.split('/');\n const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n lookup[item.filename] = `${filePath}/${item.slug}.md`;\n });\n\n const objectUsingSlugAttribute: Record<string, () => Promise<string>> = {};\n Object.entries(contentFiles).forEach((entry) => {\n const filename = entry[0];\n const value = entry[1];\n\n const newFilename = lookup[filename];\n if (newFilename !== undefined) {\n objectUsingSlugAttribute[newFilename] = value;\n }\n });\n\n return objectUsingSlugAttribute;\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 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","/// <reference types=\"vite/client\" />\n\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { parseRawContentFile } from './parse-raw-content-file';\nimport { waitFor } from './utils/zone-wait-for';\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): Observable<ContentFile<Attributes | Record<string, never>>> {\n const filePath = `/src/content/${prefix}${slug}.md`;\n const contentFile = contentFiles[filePath];\n if (!contentFile) {\n return of({\n filename: filePath,\n attributes: {},\n slug: '',\n content: fallback,\n });\n }\n\n return new Observable<string>((observer) => {\n const contentResolver = contentFile();\n\n if (import.meta.env.SSR === true) {\n waitFor(contentResolver).then((content) => {\n observer.next(content);\n });\n } else {\n contentResolver.then((content) => {\n observer.next(content);\n });\n }\n }).pipe(\n map((rawContentFile) => {\n const { content, attributes } =\n parseRawContentFile<Attributes>(rawContentFile);\n\n return {\n filename: filePath,\n slug,\n attributes,\n content,\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\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 );\n } else {\n return of({\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n });\n }\n })\n );\n } else {\n return getContentFile<Attributes>(\n contentFiles,\n '',\n param.customFilename,\n fallback\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type TableOfContentItem = {\n id: string;\n level: number; // starts at 1\n text: string;\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n async render(content: string): Promise<string> {\n return content;\n }\n\n getContentHeadings(): Array<TableOfContentItem> {\n return [];\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n","import { ContentFile } from './content-file';\nimport { inject } from '@angular/core';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes>\n): ContentFile<Attributes>[] {\n const allContentFiles = inject(\n CONTENT_FILES_LIST_TOKEN\n ) as ContentFile<Attributes>[];\n\n if (filterFn) {\n const filteredContentFiles = allContentFiles.filter(filterFn);\n\n return filteredContentFiles;\n }\n return allContentFiles;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n value: ContentFile<T>,\n index: number,\n array: ContentFile<T>[]\n) => boolean;\n","(function () {\n if (typeof Prism === 'undefined') {\n return;\n }\n\n Prism.languages.angular = Prism.languages.extend('markup', {\n keyword:\n /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\\b/,\n operator: /\\b(?:on|when)\\b/,\n number: {\n pattern: /\\b(minimum|after)\\s+\\d+(?:s|ms|)/gi,\n lookbehind: true,\n },\n builtin: {\n pattern:\n /\\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,\n },\n function:\n /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n });\n\n Prism.languages.ng = Prism.languages.angular;\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 { Injectable } from '@angular/core';\nimport { marked } from 'marked';\nimport { gfmHeadingId } from 'marked-gfm-heading-id';\nimport { markedHighlight } from 'marked-highlight';\n\nimport 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport './prism/angular';\n\ndeclare const Prism: typeof import('prismjs');\n\n@Injectable()\nexport class MarkedSetupService {\n private readonly marked: typeof marked;\n\n constructor() {\n const renderer = new marked.Renderer();\n renderer.code = (code: string, lang: string) => {\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\">' + code + '</pre>';\n }\n\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n\n const classes =\n lang.startsWith('diff') && Prism.languages['diff']\n ? `language-${lang} diff-highlight`\n : `language-${lang.replace('diff-', '')}`;\n return `<pre class=\"${classes}\"><code class=\"${classes}\">${code}</code></pre>`;\n };\n\n marked.use(\n gfmHeadingId(),\n markedHighlight({\n async: true,\n highlight: (code: string, lang: string) => {\n let diff = lang?.startsWith('diff-');\n lang = diff ? lang.replace('diff-', '') : lang || 'typescript';\n\n if (diff && !Prism.languages['diff']) {\n diff = false;\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The \\`diff\\` language and plugin are not available in the provided setup.\n To enable it, add the following imports your \\`main.ts\\`:\n import 'prismjs/components/prism-diff';\n import 'prismjs/plugins/diff-highlight/prism-diff-highlight';\n ---------------------------------------------------------------------------------------\n `);\n }\n\n if (!Prism.languages[lang]) {\n if (lang !== 'mermaid') {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available in the provided setup.\n To enable it, add the following import your \\`main.ts\\`:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n }\n return code;\n }\n return Prism.highlight(\n code,\n diff ? Prism.languages['diff'] : Prism.languages[lang],\n lang\n );\n },\n }),\n {\n renderer,\n pedantic: false,\n gfm: true,\n breaks: false,\n sanitize: false,\n smartypants: false,\n xhtml: false,\n mangle: false,\n }\n );\n\n this.marked = marked;\n }\n\n getMarkedInstance(): typeof marked {\n return this.marked;\n }\n}\n","import {\n inject,\n Injectable,\n InjectionToken,\n PLATFORM_ID,\n Provider,\n} from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nimport { ContentRenderer, TableOfContentItem } from './content-renderer';\nimport { MarkedSetupService } from './marked-setup.service';\n\n@Injectable()\nexport class MarkdownContentRendererService implements ContentRenderer {\n platformId = inject(PLATFORM_ID);\n #marked = inject(MarkedSetupService, { self: true });\n\n async render(content: string): Promise<string> {\n return this.#marked.getMarkedInstance().parse(content);\n }\n\n /**\n * The method is meant to be called after `render()`\n */\n getContentHeadings(): TableOfContentItem[] {\n return getHeadingList();\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n\nexport interface MarkdownRendererOptions {\n loadMermaid?: () => Promise<typeof import('mermaid')>;\n}\n\nexport function withMarkdownRenderer(\n options?: MarkdownRendererOptions\n): Provider {\n return [\n {\n provide: ContentRenderer,\n useFactory: () => new MarkdownContentRendererService(),\n deps: [MarkedSetupService],\n },\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 [...features, MarkedSetupService];\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 { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, from, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\nimport { ContentRenderer } from './content-renderer';\nimport { MERMAID_IMPORT_TOKEN } from './markdown-content-renderer.service';\n\n@Component({\n selector: 'analog-markdown',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`,\n})\nexport default class AnalogMarkdownComponent\n implements OnInit, OnChanges, AfterViewChecked\n{\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 public content$: Observable<SafeHtml> = of('');\n\n @Input() content!: string | undefined | null;\n @Input() classes = '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 ngOnInit(): void {\n this.updateContent();\n }\n\n ngOnChanges(): void {\n this.updateContent();\n }\n\n updateContent() {\n this.content$ = this.route.data.pipe(\n map<Data, string>((data) => this.content ?? data['_analogContent']),\n mergeMap((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 return this.contentRenderer.render(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":["i1.AnchorNavigationDirective"],"mappings":"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"}
|