@analogjs/content 0.1.0

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.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Analog
2
+
3
+ The fullstack meta-framework for Angular
4
+
5
+ Learn more at [analogjs.org](https://analogjs.org)
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2FuYWxvZ2pzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export { injectContent } from './lib/content';
2
+ export { ContentRenderer } from './lib/content-renderer';
3
+ export { default as MarkdownComponent } from './lib/markdown.component';
4
+ export { MarkdownContentRendererService } from './lib/markdown-content-renderer.service';
5
+ export { provideContent, withMarkdownRenderer, } from './lib/markdown-content-renderer.service';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxJQUFJLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekYsT0FBTyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsR0FDckIsTUFBTSx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGluamVjdENvbnRlbnQgfSBmcm9tICcuL2xpYi9jb250ZW50JztcbmV4cG9ydCB7IENvbnRlbnRSZW5kZXJlciB9IGZyb20gJy4vbGliL2NvbnRlbnQtcmVuZGVyZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXJrZG93bkNvbXBvbmVudCB9IGZyb20gJy4vbGliL21hcmtkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgeyBNYXJrZG93bkNvbnRlbnRSZW5kZXJlclNlcnZpY2UgfSBmcm9tICcuL2xpYi9tYXJrZG93bi1jb250ZW50LXJlbmRlcmVyLnNlcnZpY2UnO1xuZXhwb3J0IHtcbiAgcHJvdmlkZUNvbnRlbnQsXG4gIHdpdGhNYXJrZG93blJlbmRlcmVyLFxufSBmcm9tICcuL2xpYi9tYXJrZG93bi1jb250ZW50LXJlbmRlcmVyLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,15 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ContentRenderer {
4
+ async render(content) {
5
+ return content;
6
+ }
7
+ // eslint-disable-next-line
8
+ enhance() { }
9
+ }
10
+ ContentRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11
+ ContentRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, decorators: [{
13
+ type: Injectable
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs7NEdBTlEsZUFBZTtnSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50UmVuZGVyZXIge1xuICBhc3luYyByZW5kZXIoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBlbmhhbmNlKCkge31cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ /// <reference types="vite/client" />
2
+ import { inject } from '@angular/core';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { map } from 'rxjs/operators';
5
+ const CONTENT_FOLDER_FILES = import.meta.glob(['/src/content/**/*.md'], {
6
+ as: 'raw',
7
+ eager: true,
8
+ });
9
+ /**
10
+ * Retrieves the static content using the provided param
11
+ *
12
+ * @param param route parameter (default: 'slug')
13
+ * @param fallback fallback text if content file is not found (default: 'No Content Found')
14
+ */
15
+ export function injectContent(param = 'slug', fallback = 'No Content Found') {
16
+ const route = inject(ActivatedRoute);
17
+ const content = route.paramMap.pipe(map((params) => params.get(param)), map((slug) => CONTENT_FOLDER_FILES[`/src/content/${slug}.md`] || fallback));
18
+ return content;
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7SUFDdEUsRUFBRSxFQUFFLEtBQUs7SUFDVCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7SUFDekUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FDM0UsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5cblxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IENPTlRFTlRfRk9MREVSX0ZJTEVTID0gaW1wb3J0Lm1ldGEuZ2xvYihbJy9zcmMvY29udGVudC8qKi8qLm1kJ10sIHtcbiAgYXM6ICdyYXcnLFxuICBlYWdlcjogdHJ1ZSxcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc3RhdGljIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHBhcmFtXG4gKlxuICogQHBhcmFtIHBhcmFtIHJvdXRlIHBhcmFtZXRlciAoZGVmYXVsdDogJ3NsdWcnKVxuICogQHBhcmFtIGZhbGxiYWNrIGZhbGxiYWNrIHRleHQgaWYgY29udGVudCBmaWxlIGlzIG5vdCBmb3VuZCAoZGVmYXVsdDogJ05vIENvbnRlbnQgRm91bmQnKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29udGVudChwYXJhbSA9ICdzbHVnJywgZmFsbGJhY2sgPSAnTm8gQ29udGVudCBGb3VuZCcpIHtcbiAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBjb25zdCBjb250ZW50ID0gcm91dGUucGFyYW1NYXAucGlwZShcbiAgICBtYXAoKHBhcmFtcykgPT4gcGFyYW1zLmdldChwYXJhbSkpLFxuICAgIG1hcCgoc2x1ZykgPT4gQ09OVEVOVF9GT0xERVJfRklMRVNbYC9zcmMvY29udGVudC8ke3NsdWd9Lm1kYF0gfHwgZmFsbGJhY2spXG4gICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iXX0=
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Credit goes to Scully for original implementation
3
+ * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
4
+ */
5
+ import { inject, Injectable, PLATFORM_ID } from '@angular/core';
6
+ import { marked } from 'marked';
7
+ import 'prismjs';
8
+ import 'prismjs/plugins/toolbar/prism-toolbar';
9
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
10
+ import 'prismjs/components/prism-bash';
11
+ import 'prismjs/components/prism-css';
12
+ import 'prismjs/components/prism-javascript';
13
+ import 'prismjs/components/prism-json';
14
+ import 'prismjs/components/prism-markup';
15
+ import 'prismjs/components/prism-typescript';
16
+ import { ContentRenderer } from './content-renderer';
17
+ import * as i0 from "@angular/core";
18
+ const renderer = new marked.Renderer();
19
+ // wrap code block the way Prism.js expects it
20
+ renderer.code = function (code, lang) {
21
+ // eslint-disable-next-line
22
+ code = this.options.highlight(code, lang);
23
+ if (!lang) {
24
+ return '<pre><code>' + code + '</code></pre>';
25
+ }
26
+ // e.g. "language-js"
27
+ const langClass = 'language-' + lang;
28
+ return ('<pre class="' +
29
+ langClass +
30
+ '"><code class="' +
31
+ langClass +
32
+ '">' +
33
+ code +
34
+ '</code></pre>');
35
+ };
36
+ // ------------------------------
37
+ export class MarkdownContentRendererService {
38
+ constructor() {
39
+ this.platformId = inject(PLATFORM_ID);
40
+ }
41
+ async render(content) {
42
+ marked.setOptions({
43
+ renderer,
44
+ highlight: (code, lang) => {
45
+ lang = lang || 'typescript';
46
+ if (!Prism.languages[lang]) {
47
+ console.warn(`Notice:
48
+ ---------------------------------------------------------------------------------------
49
+ The requested language '${lang}' is not available with the provided setup.
50
+ To enable, import your main.ts as:
51
+ import 'prismjs/components/prism-${lang}';
52
+ ---------------------------------------------------------------------------------------
53
+ `);
54
+ return code;
55
+ }
56
+ return Prism.highlight(code, Prism.languages[lang], lang);
57
+ },
58
+ pedantic: false,
59
+ gfm: true,
60
+ breaks: false,
61
+ sanitize: false,
62
+ smartLists: true,
63
+ smartypants: false,
64
+ xhtml: false,
65
+ });
66
+ return marked(content);
67
+ }
68
+ // eslint-disable-next-line
69
+ enhance() { }
70
+ }
71
+ MarkdownContentRendererService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
72
+ MarkdownContentRendererService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService });
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, decorators: [{
74
+ type: Injectable
75
+ }] });
76
+ export function withMarkdownRenderer() {
77
+ return { provide: ContentRenderer, useClass: MarkdownContentRendererService };
78
+ }
79
+ export function provideContent(...features) {
80
+ return [...features];
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLFNBQVMsQ0FBQztBQUNqQixPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sMkRBQTJELENBQUM7QUFDbkUsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUlyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2Qyw4Q0FBOEM7QUFDOUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFxQixJQUFJLEVBQUUsSUFBSTtJQUM3QywyQkFBMkI7SUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxhQUFhLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztLQUMvQztJQUNELHFCQUFxQjtJQUNyQixNQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLE9BQU8sQ0FDTCxjQUFjO1FBQ2QsU0FBUztRQUNULGlCQUFpQjtRQUNqQixTQUFTO1FBQ1QsSUFBSTtRQUNKLElBQUk7UUFDSixlQUFlLENBQ2hCLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixpQ0FBaUM7QUFHakMsTUFBTSxPQUFPLDhCQUE4QjtJQUQzQztRQUVFLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FpQ2xDO0lBL0JDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixNQUFNLENBQUMsVUFBVSxDQUFDO1lBQ2hCLFFBQVE7WUFDUixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQzs7Z0NBRVMsSUFBSTs7NENBRVEsSUFBSTs7V0FFckMsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLEVBQUUsSUFBSTtZQUNULE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsS0FBSztZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsT0FBTyxLQUFJLENBQUM7OzJIQWpDRCw4QkFBOEI7K0hBQTlCLDhCQUE4QjsyRkFBOUIsOEJBQThCO2tCQUQxQyxVQUFVOztBQXFDWCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQUcsUUFBb0I7SUFDcEQsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlZGl0IGdvZXMgdG8gU2N1bGx5IGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvblxuICogaHR0cHM6Ly9naXRodWIuY29tL3NjdWxseWlvL3NjdWxseS9ibG9iL21haW4vbGlicy9zY3VsbHkvc3JjL2xpYi9maWxlSGFuZGVyUGx1Z2lucy9tYXJrZG93bi50c1xuICovXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcblxuaW1wb3J0ICdwcmlzbWpzJztcbmltcG9ydCAncHJpc21qcy9wbHVnaW5zL3Rvb2xiYXIvcHJpc20tdG9vbGJhcic7XG5pbXBvcnQgJ3ByaXNtanMvcGx1Z2lucy9jb3B5LXRvLWNsaXBib2FyZC9wcmlzbS1jb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5kZWNsYXJlIGNvbnN0IFByaXNtOiB0eXBlb2YgaW1wb3J0KCdwcmlzbWpzJyk7XG5cbmNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuLy8gd3JhcCBjb2RlIGJsb2NrIHRoZSB3YXkgUHJpc20uanMgZXhwZWN0cyBpdFxucmVuZGVyZXIuY29kZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGNvZGUsIGxhbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvZGUgPSB0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGNvZGUsIGxhbmcpO1xuICBpZiAoIWxhbmcpIHtcbiAgICByZXR1cm4gJzxwcmU+PGNvZGU+JyArIGNvZGUgKyAnPC9jb2RlPjwvcHJlPic7XG4gIH1cbiAgLy8gZS5nLiBcImxhbmd1YWdlLWpzXCJcbiAgY29uc3QgbGFuZ0NsYXNzID0gJ2xhbmd1YWdlLScgKyBsYW5nO1xuICByZXR1cm4gKFxuICAgICc8cHJlIGNsYXNzPVwiJyArXG4gICAgbGFuZ0NsYXNzICtcbiAgICAnXCI+PGNvZGUgY2xhc3M9XCInICtcbiAgICBsYW5nQ2xhc3MgK1xuICAgICdcIj4nICtcbiAgICBjb2RlICtcbiAgICAnPC9jb2RlPjwvcHJlPidcbiAgKTtcbn07XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSBpbXBsZW1lbnRzIENvbnRlbnRSZW5kZXJlciB7XG4gIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gIGFzeW5jIHJlbmRlcihjb250ZW50OiBzdHJpbmcpIHtcbiAgICBtYXJrZWQuc2V0T3B0aW9ucyh7XG4gICAgICByZW5kZXJlcixcbiAgICAgIGhpZ2hsaWdodDogKGNvZGUsIGxhbmcpID0+IHtcbiAgICAgICAgbGFuZyA9IGxhbmcgfHwgJ3R5cGVzY3JpcHQnO1xuICAgICAgICBpZiAoIVByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgVGhlIHJlcXVlc3RlZCBsYW5ndWFnZSAnJHtsYW5nfScgaXMgbm90IGF2YWlsYWJsZSB3aXRoIHRoZSBwcm92aWRlZCBzZXR1cC5cbiAgICAgIFRvIGVuYWJsZSwgaW1wb3J0IHlvdXIgbWFpbi50cyBhczpcbiAgICAgICAgaW1wb3J0ICAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgIGApO1xuICAgICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcmlzbS5oaWdobGlnaHQoY29kZSwgUHJpc20ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKTtcbiAgICAgIH0sXG4gICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICBnZm06IHRydWUsXG4gICAgICBicmVha3M6IGZhbHNlLFxuICAgICAgc2FuaXRpemU6IGZhbHNlLFxuICAgICAgc21hcnRMaXN0czogdHJ1ZSxcbiAgICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICAgIHhodG1sOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXJrZWQoY29udGVudCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZW5oYW5jZSgpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTWFya2Rvd25SZW5kZXJlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlciwgdXNlQ2xhc3M6IE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnRlbnQoLi4uZmVhdHVyZXM6IFByb3ZpZGVyW10pIHtcbiAgcmV0dXJuIFsuLi5mZWF0dXJlc107XG59XG4iXX0=
@@ -0,0 +1,50 @@
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { Component, inject, Input, ViewEncapsulation, } from '@angular/core';
3
+ import { DomSanitizer } from '@angular/platform-browser';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { of } from 'rxjs';
6
+ import { catchError, map, mergeMap, switchMap } from 'rxjs/operators';
7
+ import { ContentRenderer } from './content-renderer';
8
+ import * as i0 from "@angular/core";
9
+ export default class AnalogMarkdownComponent {
10
+ constructor() {
11
+ this.sanitizer = inject(DomSanitizer);
12
+ this.route = inject(ActivatedRoute);
13
+ this.content$ = of('');
14
+ this.classes = 'analog-markdown';
15
+ this.contentRenderer = inject(ContentRenderer);
16
+ }
17
+ ngOnInit() {
18
+ this.updateContent();
19
+ }
20
+ ngOnChanges() {
21
+ this.updateContent();
22
+ }
23
+ updateContent() {
24
+ this.content$ = this.route.data.pipe(map((data) => data['_analogContent']), switchMap((contentResolver) => this.content ? of(this.content) : contentResolver()), mergeMap((contentString) => this.renderContent(contentString)), map((content) => this.sanitizer.bypassSecurityTrustHtml(content)), catchError((e) => of(`There was an error ${e}`)));
25
+ }
26
+ async renderContent(content) {
27
+ return this.contentRenderer.render(content);
28
+ }
29
+ ngAfterViewChecked() {
30
+ this.contentRenderer.enhance();
31
+ }
32
+ }
33
+ AnalogMarkdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
+ AnalogMarkdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: AnalogMarkdownComponent, isStandalone: true, selector: "analog-markdown", inputs: { content: "content", classes: "classes" }, usesOnChanges: true, ngImport: i0, template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, decorators: [{
36
+ type: Component,
37
+ args: [{
38
+ selector: 'analog-markdown',
39
+ imports: [AsyncPipe],
40
+ standalone: true,
41
+ preserveWhitespaces: true,
42
+ encapsulation: ViewEncapsulation.None,
43
+ template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`,
44
+ }]
45
+ }], propDecorators: { content: [{
46
+ type: Input
47
+ }], classes: [{
48
+ type: Input
49
+ }] } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVckQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFSNUM7UUFXVSxjQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFHdEMsWUFBTyxHQUFHLGlCQUFpQixDQUFDO1FBRXJDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBNkIzQztJQTNCQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBOEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2xFLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUNwRCxFQUNELFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUM5RCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDakUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQzs7b0hBdENrQix1QkFBdUI7d0dBQXZCLHVCQUF1QixvSkFGaEMsOERBQThELHVEQUo5RCxTQUFTOzJGQU1BLHVCQUF1QjtrQkFSM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFLDhEQUE4RDtpQkFDekU7OEJBUVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmFsb2ctbWFya2Rvd24nLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtpbm5lckhUTUxdPVwiY29udGVudCQgfCBhc3luY1wiIFtjbGFzc109XCJjbGFzc2VzXCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmFsb2dNYXJrZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkXG57XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwdWJsaWMgY29udGVudCQ6IE9ic2VydmFibGU8U2FmZUh0bWw+ID0gb2YoJycpO1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBjbGFzc2VzID0gJ2FuYWxvZy1tYXJrZG93bic7XG5cbiAgY29udGVudFJlbmRlcmVyID0gaW5qZWN0KENvbnRlbnRSZW5kZXJlcik7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jb250ZW50JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgbWFwPERhdGEsICgpID0+IFByb21pc2U8c3RyaW5nPj4oKGRhdGEpID0+IGRhdGFbJ19hbmFsb2dDb250ZW50J10pLFxuICAgICAgc3dpdGNoTWFwKChjb250ZW50UmVzb2x2ZXIpID0+XG4gICAgICAgIHRoaXMuY29udGVudCA/IG9mKHRoaXMuY29udGVudCkgOiBjb250ZW50UmVzb2x2ZXIoKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChjb250ZW50U3RyaW5nKSA9PiB0aGlzLnJlbmRlckNvbnRlbnQoY29udGVudFN0cmluZykpLFxuICAgICAgbWFwKChjb250ZW50KSA9PiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZW50KSksXG4gICAgICBjYXRjaEVycm9yKChlKSA9PiBvZihgVGhlcmUgd2FzIGFuIGVycm9yICR7ZX1gKSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRSZW5kZXJlci5yZW5kZXIoY29udGVudCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jb250ZW50UmVuZGVyZXIuZW5oYW5jZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,169 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable, Component, ViewEncapsulation, Input, PLATFORM_ID } from '@angular/core';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { map, switchMap, mergeMap, catchError } from 'rxjs/operators';
5
+ import { __awaiter } from 'tslib';
6
+ import { AsyncPipe } from '@angular/common';
7
+ import { DomSanitizer } from '@angular/platform-browser';
8
+ import { of } from 'rxjs';
9
+ import { marked } from 'marked';
10
+ import 'prismjs';
11
+ import 'prismjs/plugins/toolbar/prism-toolbar';
12
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
13
+ import 'prismjs/components/prism-bash';
14
+ import 'prismjs/components/prism-css';
15
+ import 'prismjs/components/prism-javascript';
16
+ import 'prismjs/components/prism-json';
17
+ import 'prismjs/components/prism-markup';
18
+ import 'prismjs/components/prism-typescript';
19
+
20
+ /// <reference types="vite/client" />
21
+ const CONTENT_FOLDER_FILES = import.meta.glob(['/src/content/**/*.md'], {
22
+ as: 'raw',
23
+ eager: true,
24
+ });
25
+ /**
26
+ * Retrieves the static content using the provided param
27
+ *
28
+ * @param param route parameter (default: 'slug')
29
+ * @param fallback fallback text if content file is not found (default: 'No Content Found')
30
+ */
31
+ function injectContent(param = 'slug', fallback = 'No Content Found') {
32
+ const route = inject(ActivatedRoute);
33
+ const content = route.paramMap.pipe(map((params) => params.get(param)), map((slug) => CONTENT_FOLDER_FILES[`/src/content/${slug}.md`] || fallback));
34
+ return content;
35
+ }
36
+
37
+ class ContentRenderer {
38
+ render(content) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ return content;
41
+ });
42
+ }
43
+ // eslint-disable-next-line
44
+ enhance() { }
45
+ }
46
+ ContentRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
47
+ ContentRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, decorators: [{
49
+ type: Injectable
50
+ }] });
51
+
52
+ class AnalogMarkdownComponent {
53
+ constructor() {
54
+ this.sanitizer = inject(DomSanitizer);
55
+ this.route = inject(ActivatedRoute);
56
+ this.content$ = of('');
57
+ this.classes = 'analog-markdown';
58
+ this.contentRenderer = inject(ContentRenderer);
59
+ }
60
+ ngOnInit() {
61
+ this.updateContent();
62
+ }
63
+ ngOnChanges() {
64
+ this.updateContent();
65
+ }
66
+ updateContent() {
67
+ this.content$ = this.route.data.pipe(map((data) => data['_analogContent']), switchMap((contentResolver) => this.content ? of(this.content) : contentResolver()), mergeMap((contentString) => this.renderContent(contentString)), map((content) => this.sanitizer.bypassSecurityTrustHtml(content)), catchError((e) => of(`There was an error ${e}`)));
68
+ }
69
+ renderContent(content) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ return this.contentRenderer.render(content);
72
+ });
73
+ }
74
+ ngAfterViewChecked() {
75
+ this.contentRenderer.enhance();
76
+ }
77
+ }
78
+ AnalogMarkdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ AnalogMarkdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: AnalogMarkdownComponent, isStandalone: true, selector: "analog-markdown", inputs: { content: "content", classes: "classes" }, usesOnChanges: true, ngImport: i0, template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, decorators: [{
81
+ type: Component,
82
+ args: [{
83
+ selector: 'analog-markdown',
84
+ imports: [AsyncPipe],
85
+ standalone: true,
86
+ preserveWhitespaces: true,
87
+ encapsulation: ViewEncapsulation.None,
88
+ template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`,
89
+ }]
90
+ }], propDecorators: { content: [{
91
+ type: Input
92
+ }], classes: [{
93
+ type: Input
94
+ }] } });
95
+
96
+ const renderer = new marked.Renderer();
97
+ // wrap code block the way Prism.js expects it
98
+ renderer.code = function (code, lang) {
99
+ // eslint-disable-next-line
100
+ code = this.options.highlight(code, lang);
101
+ if (!lang) {
102
+ return '<pre><code>' + code + '</code></pre>';
103
+ }
104
+ // e.g. "language-js"
105
+ const langClass = 'language-' + lang;
106
+ return ('<pre class="' +
107
+ langClass +
108
+ '"><code class="' +
109
+ langClass +
110
+ '">' +
111
+ code +
112
+ '</code></pre>');
113
+ };
114
+ // ------------------------------
115
+ class MarkdownContentRendererService {
116
+ constructor() {
117
+ this.platformId = inject(PLATFORM_ID);
118
+ }
119
+ render(content) {
120
+ return __awaiter(this, void 0, void 0, function* () {
121
+ marked.setOptions({
122
+ renderer,
123
+ highlight: (code, lang) => {
124
+ lang = lang || 'typescript';
125
+ if (!Prism.languages[lang]) {
126
+ console.warn(`Notice:
127
+ ---------------------------------------------------------------------------------------
128
+ The requested language '${lang}' is not available with the provided setup.
129
+ To enable, import your main.ts as:
130
+ import 'prismjs/components/prism-${lang}';
131
+ ---------------------------------------------------------------------------------------
132
+ `);
133
+ return code;
134
+ }
135
+ return Prism.highlight(code, Prism.languages[lang], lang);
136
+ },
137
+ pedantic: false,
138
+ gfm: true,
139
+ breaks: false,
140
+ sanitize: false,
141
+ smartLists: true,
142
+ smartypants: false,
143
+ xhtml: false,
144
+ });
145
+ return marked(content);
146
+ });
147
+ }
148
+ // eslint-disable-next-line
149
+ enhance() { }
150
+ }
151
+ MarkdownContentRendererService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
152
+ MarkdownContentRendererService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService });
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, decorators: [{
154
+ type: Injectable
155
+ }] });
156
+ function withMarkdownRenderer() {
157
+ return { provide: ContentRenderer, useClass: MarkdownContentRendererService };
158
+ }
159
+ function provideContent(...features) {
160
+ return [...features];
161
+ }
162
+
163
+ /**
164
+ * Generated bundle index. Do not edit.
165
+ */
166
+
167
+ export { ContentRenderer, AnalogMarkdownComponent as MarkdownComponent, MarkdownContentRendererService, injectContent, provideContent, withMarkdownRenderer };
168
+ //# sourceMappingURL=analogjs-content.mjs.map
169
+ //# sourceMappingURL=analogjs-content.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-content.mjs","sources":["../esm2020/lib/content.mjs","../esm2020/lib/content-renderer.mjs","../esm2020/lib/markdown.component.mjs","../esm2020/lib/markdown-content-renderer.service.mjs","../esm2020/analogjs-content.mjs"],"sourcesContent":["/// <reference types=\"vite/client\" />\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { map } from 'rxjs/operators';\nconst CONTENT_FOLDER_FILES = import.meta.glob(['/src/content/**/*.md'], {\n as: 'raw',\n eager: true,\n});\n/**\n * Retrieves the static content using the provided param\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(param = 'slug', fallback = 'No Content Found') {\n const route = inject(ActivatedRoute);\n const content = route.paramMap.pipe(map((params) => params.get(param)), map((slug) => CONTENT_FOLDER_FILES[`/src/content/${slug}.md`] || fallback));\n return content;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7SUFDdEUsRUFBRSxFQUFFLEtBQUs7SUFDVCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7SUFDekUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FDM0UsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5cblxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IENPTlRFTlRfRk9MREVSX0ZJTEVTID0gaW1wb3J0Lm1ldGEuZ2xvYihbJy9zcmMvY29udGVudC8qKi8qLm1kJ10sIHtcbiAgYXM6ICdyYXcnLFxuICBlYWdlcjogdHJ1ZSxcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc3RhdGljIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHBhcmFtXG4gKlxuICogQHBhcmFtIHBhcmFtIHJvdXRlIHBhcmFtZXRlciAoZGVmYXVsdDogJ3NsdWcnKVxuICogQHBhcmFtIGZhbGxiYWNrIGZhbGxiYWNrIHRleHQgaWYgY29udGVudCBmaWxlIGlzIG5vdCBmb3VuZCAoZGVmYXVsdDogJ05vIENvbnRlbnQgRm91bmQnKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29udGVudChwYXJhbSA9ICdzbHVnJywgZmFsbGJhY2sgPSAnTm8gQ29udGVudCBGb3VuZCcpIHtcbiAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBjb25zdCBjb250ZW50ID0gcm91dGUucGFyYW1NYXAucGlwZShcbiAgICBtYXAoKHBhcmFtcykgPT4gcGFyYW1zLmdldChwYXJhbSkpLFxuICAgIG1hcCgoc2x1ZykgPT4gQ09OVEVOVF9GT0xERVJfRklMRVNbYC9zcmMvY29udGVudC8ke3NsdWd9Lm1kYF0gfHwgZmFsbGJhY2spXG4gICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ContentRenderer {\n async render(content) {\n return content;\n }\n // eslint-disable-next-line\n enhance() { }\n}\nContentRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nContentRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs7NEdBTlEsZUFBZTtnSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50UmVuZGVyZXIge1xuICBhc3luYyByZW5kZXIoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBlbmhhbmNlKCkge31cbn1cbiJdfQ==","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, ViewEncapsulation, } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\nimport { ContentRenderer } from './content-renderer';\nimport * as i0 from \"@angular/core\";\nexport default class AnalogMarkdownComponent {\n constructor() {\n this.sanitizer = inject(DomSanitizer);\n this.route = inject(ActivatedRoute);\n this.content$ = of('');\n this.classes = 'analog-markdown';\n this.contentRenderer = inject(ContentRenderer);\n }\n ngOnInit() {\n this.updateContent();\n }\n ngOnChanges() {\n this.updateContent();\n }\n updateContent() {\n this.content$ = this.route.data.pipe(map((data) => data['_analogContent']), switchMap((contentResolver) => this.content ? of(this.content) : contentResolver()), mergeMap((contentString) => this.renderContent(contentString)), map((content) => this.sanitizer.bypassSecurityTrustHtml(content)), catchError((e) => of(`There was an error ${e}`)));\n }\n async renderContent(content) {\n return this.contentRenderer.render(content);\n }\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n }\n}\nAnalogMarkdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: AnalogMarkdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nAnalogMarkdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.0\", type: AnalogMarkdownComponent, isStandalone: true, selector: \"analog-markdown\", inputs: { content: \"content\", classes: \"classes\" }, usesOnChanges: true, ngImport: i0, template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`, isInline: true, dependencies: [{ kind: \"pipe\", type: AsyncPipe, name: \"async\" }], encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: AnalogMarkdownComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'analog-markdown',\n imports: [AsyncPipe],\n standalone: true,\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`,\n }]\n }], propDecorators: { content: [{\n type: Input\n }], classes: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVckQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFSNUM7UUFXVSxjQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFHdEMsWUFBTyxHQUFHLGlCQUFpQixDQUFDO1FBRXJDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBNkIzQztJQTNCQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBOEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2xFLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUNwRCxFQUNELFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUM5RCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDakUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQzs7b0hBdENrQix1QkFBdUI7d0dBQXZCLHVCQUF1QixvSkFGaEMsOERBQThELHVEQUo5RCxTQUFTOzJGQU1BLHVCQUF1QjtrQkFSM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFLDhEQUE4RDtpQkFDekU7OEJBUVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmFsb2ctbWFya2Rvd24nLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtpbm5lckhUTUxdPVwiY29udGVudCQgfCBhc3luY1wiIFtjbGFzc109XCJjbGFzc2VzXCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmFsb2dNYXJrZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkXG57XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwdWJsaWMgY29udGVudCQ6IE9ic2VydmFibGU8U2FmZUh0bWw+ID0gb2YoJycpO1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBjbGFzc2VzID0gJ2FuYWxvZy1tYXJrZG93bic7XG5cbiAgY29udGVudFJlbmRlcmVyID0gaW5qZWN0KENvbnRlbnRSZW5kZXJlcik7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jb250ZW50JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgbWFwPERhdGEsICgpID0+IFByb21pc2U8c3RyaW5nPj4oKGRhdGEpID0+IGRhdGFbJ19hbmFsb2dDb250ZW50J10pLFxuICAgICAgc3dpdGNoTWFwKChjb250ZW50UmVzb2x2ZXIpID0+XG4gICAgICAgIHRoaXMuY29udGVudCA/IG9mKHRoaXMuY29udGVudCkgOiBjb250ZW50UmVzb2x2ZXIoKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChjb250ZW50U3RyaW5nKSA9PiB0aGlzLnJlbmRlckNvbnRlbnQoY29udGVudFN0cmluZykpLFxuICAgICAgbWFwKChjb250ZW50KSA9PiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZW50KSksXG4gICAgICBjYXRjaEVycm9yKChlKSA9PiBvZihgVGhlcmUgd2FzIGFuIGVycm9yICR7ZX1gKSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRSZW5kZXJlci5yZW5kZXIoY29udGVudCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jb250ZW50UmVuZGVyZXIuZW5oYW5jZSgpO1xuICB9XG59XG4iXX0=","/**\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, PLATFORM_ID } from '@angular/core';\nimport { marked } from 'marked';\nimport 'prismjs';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\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 { ContentRenderer } from './content-renderer';\nimport * as i0 from \"@angular/core\";\nconst renderer = new marked.Renderer();\n// wrap code block the way Prism.js expects it\nrenderer.code = function (code, lang) {\n // eslint-disable-next-line\n code = this.options.highlight(code, lang);\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n // e.g. \"language-js\"\n const langClass = 'language-' + lang;\n return ('<pre class=\"' +\n langClass +\n '\"><code class=\"' +\n langClass +\n '\">' +\n code +\n '</code></pre>');\n};\n// ------------------------------\nexport class MarkdownContentRendererService {\n constructor() {\n this.platformId = inject(PLATFORM_ID);\n }\n async render(content) {\n marked.setOptions({\n renderer,\n highlight: (code, lang) => {\n lang = lang || 'typescript';\n if (!Prism.languages[lang]) {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available with the provided setup.\n To enable, import your main.ts as:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n return code;\n }\n return Prism.highlight(code, Prism.languages[lang], lang);\n },\n pedantic: false,\n gfm: true,\n breaks: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n xhtml: false,\n });\n return marked(content);\n }\n // eslint-disable-next-line\n enhance() { }\n}\nMarkdownContentRendererService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMarkdownContentRendererService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService, decorators: [{\n type: Injectable\n }] });\nexport function withMarkdownRenderer() {\n return { provide: ContentRenderer, useClass: MarkdownContentRendererService };\n}\nexport function provideContent(...features) {\n return [...features];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLFNBQVMsQ0FBQztBQUNqQixPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sMkRBQTJELENBQUM7QUFDbkUsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUlyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2Qyw4Q0FBOEM7QUFDOUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFxQixJQUFJLEVBQUUsSUFBSTtJQUM3QywyQkFBMkI7SUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxhQUFhLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztLQUMvQztJQUNELHFCQUFxQjtJQUNyQixNQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLE9BQU8sQ0FDTCxjQUFjO1FBQ2QsU0FBUztRQUNULGlCQUFpQjtRQUNqQixTQUFTO1FBQ1QsSUFBSTtRQUNKLElBQUk7UUFDSixlQUFlLENBQ2hCLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixpQ0FBaUM7QUFHakMsTUFBTSxPQUFPLDhCQUE4QjtJQUQzQztRQUVFLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FpQ2xDO0lBL0JDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixNQUFNLENBQUMsVUFBVSxDQUFDO1lBQ2hCLFFBQVE7WUFDUixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQzs7Z0NBRVMsSUFBSTs7NENBRVEsSUFBSTs7V0FFckMsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLEVBQUUsSUFBSTtZQUNULE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsS0FBSztZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsT0FBTyxLQUFJLENBQUM7OzJIQWpDRCw4QkFBOEI7K0hBQTlCLDhCQUE4QjsyRkFBOUIsOEJBQThCO2tCQUQxQyxVQUFVOztBQXFDWCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQUcsUUFBb0I7SUFDcEQsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlZGl0IGdvZXMgdG8gU2N1bGx5IGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvblxuICogaHR0cHM6Ly9naXRodWIuY29tL3NjdWxseWlvL3NjdWxseS9ibG9iL21haW4vbGlicy9zY3VsbHkvc3JjL2xpYi9maWxlSGFuZGVyUGx1Z2lucy9tYXJrZG93bi50c1xuICovXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcblxuaW1wb3J0ICdwcmlzbWpzJztcbmltcG9ydCAncHJpc21qcy9wbHVnaW5zL3Rvb2xiYXIvcHJpc20tdG9vbGJhcic7XG5pbXBvcnQgJ3ByaXNtanMvcGx1Z2lucy9jb3B5LXRvLWNsaXBib2FyZC9wcmlzbS1jb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5kZWNsYXJlIGNvbnN0IFByaXNtOiB0eXBlb2YgaW1wb3J0KCdwcmlzbWpzJyk7XG5cbmNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuLy8gd3JhcCBjb2RlIGJsb2NrIHRoZSB3YXkgUHJpc20uanMgZXhwZWN0cyBpdFxucmVuZGVyZXIuY29kZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGNvZGUsIGxhbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvZGUgPSB0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGNvZGUsIGxhbmcpO1xuICBpZiAoIWxhbmcpIHtcbiAgICByZXR1cm4gJzxwcmU+PGNvZGU+JyArIGNvZGUgKyAnPC9jb2RlPjwvcHJlPic7XG4gIH1cbiAgLy8gZS5nLiBcImxhbmd1YWdlLWpzXCJcbiAgY29uc3QgbGFuZ0NsYXNzID0gJ2xhbmd1YWdlLScgKyBsYW5nO1xuICByZXR1cm4gKFxuICAgICc8cHJlIGNsYXNzPVwiJyArXG4gICAgbGFuZ0NsYXNzICtcbiAgICAnXCI+PGNvZGUgY2xhc3M9XCInICtcbiAgICBsYW5nQ2xhc3MgK1xuICAgICdcIj4nICtcbiAgICBjb2RlICtcbiAgICAnPC9jb2RlPjwvcHJlPidcbiAgKTtcbn07XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSBpbXBsZW1lbnRzIENvbnRlbnRSZW5kZXJlciB7XG4gIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gIGFzeW5jIHJlbmRlcihjb250ZW50OiBzdHJpbmcpIHtcbiAgICBtYXJrZWQuc2V0T3B0aW9ucyh7XG4gICAgICByZW5kZXJlcixcbiAgICAgIGhpZ2hsaWdodDogKGNvZGUsIGxhbmcpID0+IHtcbiAgICAgICAgbGFuZyA9IGxhbmcgfHwgJ3R5cGVzY3JpcHQnO1xuICAgICAgICBpZiAoIVByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgVGhlIHJlcXVlc3RlZCBsYW5ndWFnZSAnJHtsYW5nfScgaXMgbm90IGF2YWlsYWJsZSB3aXRoIHRoZSBwcm92aWRlZCBzZXR1cC5cbiAgICAgIFRvIGVuYWJsZSwgaW1wb3J0IHlvdXIgbWFpbi50cyBhczpcbiAgICAgICAgaW1wb3J0ICAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgIGApO1xuICAgICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcmlzbS5oaWdobGlnaHQoY29kZSwgUHJpc20ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKTtcbiAgICAgIH0sXG4gICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICBnZm06IHRydWUsXG4gICAgICBicmVha3M6IGZhbHNlLFxuICAgICAgc2FuaXRpemU6IGZhbHNlLFxuICAgICAgc21hcnRMaXN0czogdHJ1ZSxcbiAgICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICAgIHhodG1sOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXJrZWQoY29udGVudCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZW5oYW5jZSgpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTWFya2Rvd25SZW5kZXJlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlciwgdXNlQ2xhc3M6IE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnRlbnQoLi4uZmVhdHVyZXM6IFByb3ZpZGVyW10pIHtcbiAgcmV0dXJuIFsuLi5mZWF0dXJlc107XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2FuYWxvZ2pzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable, Component, ViewEncapsulation, Input, PLATFORM_ID } from '@angular/core';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { map, switchMap, mergeMap, catchError } from 'rxjs/operators';
5
+ import { AsyncPipe } from '@angular/common';
6
+ import { DomSanitizer } from '@angular/platform-browser';
7
+ import { of } from 'rxjs';
8
+ import { marked } from 'marked';
9
+ import 'prismjs';
10
+ import 'prismjs/plugins/toolbar/prism-toolbar';
11
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
12
+ import 'prismjs/components/prism-bash';
13
+ import 'prismjs/components/prism-css';
14
+ import 'prismjs/components/prism-javascript';
15
+ import 'prismjs/components/prism-json';
16
+ import 'prismjs/components/prism-markup';
17
+ import 'prismjs/components/prism-typescript';
18
+
19
+ /// <reference types="vite/client" />
20
+ const CONTENT_FOLDER_FILES = import.meta.glob(['/src/content/**/*.md'], {
21
+ as: 'raw',
22
+ eager: true,
23
+ });
24
+ /**
25
+ * Retrieves the static content using the provided param
26
+ *
27
+ * @param param route parameter (default: 'slug')
28
+ * @param fallback fallback text if content file is not found (default: 'No Content Found')
29
+ */
30
+ function injectContent(param = 'slug', fallback = 'No Content Found') {
31
+ const route = inject(ActivatedRoute);
32
+ const content = route.paramMap.pipe(map((params) => params.get(param)), map((slug) => CONTENT_FOLDER_FILES[`/src/content/${slug}.md`] || fallback));
33
+ return content;
34
+ }
35
+
36
+ class ContentRenderer {
37
+ async render(content) {
38
+ return content;
39
+ }
40
+ // eslint-disable-next-line
41
+ enhance() { }
42
+ }
43
+ ContentRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
44
+ ContentRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: ContentRenderer, decorators: [{
46
+ type: Injectable
47
+ }] });
48
+
49
+ class AnalogMarkdownComponent {
50
+ constructor() {
51
+ this.sanitizer = inject(DomSanitizer);
52
+ this.route = inject(ActivatedRoute);
53
+ this.content$ = of('');
54
+ this.classes = 'analog-markdown';
55
+ this.contentRenderer = inject(ContentRenderer);
56
+ }
57
+ ngOnInit() {
58
+ this.updateContent();
59
+ }
60
+ ngOnChanges() {
61
+ this.updateContent();
62
+ }
63
+ updateContent() {
64
+ this.content$ = this.route.data.pipe(map((data) => data['_analogContent']), switchMap((contentResolver) => this.content ? of(this.content) : contentResolver()), mergeMap((contentString) => this.renderContent(contentString)), map((content) => this.sanitizer.bypassSecurityTrustHtml(content)), catchError((e) => of(`There was an error ${e}`)));
65
+ }
66
+ async renderContent(content) {
67
+ return this.contentRenderer.render(content);
68
+ }
69
+ ngAfterViewChecked() {
70
+ this.contentRenderer.enhance();
71
+ }
72
+ }
73
+ AnalogMarkdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
+ AnalogMarkdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: AnalogMarkdownComponent, isStandalone: true, selector: "analog-markdown", inputs: { content: "content", classes: "classes" }, usesOnChanges: true, ngImport: i0, template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: AnalogMarkdownComponent, decorators: [{
76
+ type: Component,
77
+ args: [{
78
+ selector: 'analog-markdown',
79
+ imports: [AsyncPipe],
80
+ standalone: true,
81
+ preserveWhitespaces: true,
82
+ encapsulation: ViewEncapsulation.None,
83
+ template: `<div [innerHTML]="content$ | async" [class]="classes"></div>`,
84
+ }]
85
+ }], propDecorators: { content: [{
86
+ type: Input
87
+ }], classes: [{
88
+ type: Input
89
+ }] } });
90
+
91
+ /**
92
+ * Credit goes to Scully for original implementation
93
+ * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
94
+ */
95
+ const renderer = new marked.Renderer();
96
+ // wrap code block the way Prism.js expects it
97
+ renderer.code = function (code, lang) {
98
+ // eslint-disable-next-line
99
+ code = this.options.highlight(code, lang);
100
+ if (!lang) {
101
+ return '<pre><code>' + code + '</code></pre>';
102
+ }
103
+ // e.g. "language-js"
104
+ const langClass = 'language-' + lang;
105
+ return ('<pre class="' +
106
+ langClass +
107
+ '"><code class="' +
108
+ langClass +
109
+ '">' +
110
+ code +
111
+ '</code></pre>');
112
+ };
113
+ // ------------------------------
114
+ class MarkdownContentRendererService {
115
+ constructor() {
116
+ this.platformId = inject(PLATFORM_ID);
117
+ }
118
+ async render(content) {
119
+ marked.setOptions({
120
+ renderer,
121
+ highlight: (code, lang) => {
122
+ lang = lang || 'typescript';
123
+ if (!Prism.languages[lang]) {
124
+ console.warn(`Notice:
125
+ ---------------------------------------------------------------------------------------
126
+ The requested language '${lang}' is not available with the provided setup.
127
+ To enable, import your main.ts as:
128
+ import 'prismjs/components/prism-${lang}';
129
+ ---------------------------------------------------------------------------------------
130
+ `);
131
+ return code;
132
+ }
133
+ return Prism.highlight(code, Prism.languages[lang], lang);
134
+ },
135
+ pedantic: false,
136
+ gfm: true,
137
+ breaks: false,
138
+ sanitize: false,
139
+ smartLists: true,
140
+ smartypants: false,
141
+ xhtml: false,
142
+ });
143
+ return marked(content);
144
+ }
145
+ // eslint-disable-next-line
146
+ enhance() { }
147
+ }
148
+ MarkdownContentRendererService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
149
+ MarkdownContentRendererService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: MarkdownContentRendererService, decorators: [{
151
+ type: Injectable
152
+ }] });
153
+ function withMarkdownRenderer() {
154
+ return { provide: ContentRenderer, useClass: MarkdownContentRendererService };
155
+ }
156
+ function provideContent(...features) {
157
+ return [...features];
158
+ }
159
+
160
+ /**
161
+ * Generated bundle index. Do not edit.
162
+ */
163
+
164
+ export { ContentRenderer, AnalogMarkdownComponent as MarkdownComponent, MarkdownContentRendererService, injectContent, provideContent, withMarkdownRenderer };
165
+ //# sourceMappingURL=analogjs-content.mjs.map
166
+ //# sourceMappingURL=analogjs-content.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-content.mjs","sources":["../esm2020/lib/content.mjs","../esm2020/lib/content-renderer.mjs","../esm2020/lib/markdown.component.mjs","../esm2020/lib/markdown-content-renderer.service.mjs","../esm2020/analogjs-content.mjs"],"sourcesContent":["/// <reference types=\"vite/client\" />\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { map } from 'rxjs/operators';\nconst CONTENT_FOLDER_FILES = import.meta.glob(['/src/content/**/*.md'], {\n as: 'raw',\n eager: true,\n});\n/**\n * Retrieves the static content using the provided param\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(param = 'slug', fallback = 'No Content Found') {\n const route = inject(ActivatedRoute);\n const content = route.paramMap.pipe(map((params) => params.get(param)), map((slug) => CONTENT_FOLDER_FILES[`/src/content/${slug}.md`] || fallback));\n return content;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7SUFDdEUsRUFBRSxFQUFFLEtBQUs7SUFDVCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7SUFDekUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDbEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FDM0UsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5cblxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IENPTlRFTlRfRk9MREVSX0ZJTEVTID0gaW1wb3J0Lm1ldGEuZ2xvYihbJy9zcmMvY29udGVudC8qKi8qLm1kJ10sIHtcbiAgYXM6ICdyYXcnLFxuICBlYWdlcjogdHJ1ZSxcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgc3RhdGljIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHBhcmFtXG4gKlxuICogQHBhcmFtIHBhcmFtIHJvdXRlIHBhcmFtZXRlciAoZGVmYXVsdDogJ3NsdWcnKVxuICogQHBhcmFtIGZhbGxiYWNrIGZhbGxiYWNrIHRleHQgaWYgY29udGVudCBmaWxlIGlzIG5vdCBmb3VuZCAoZGVmYXVsdDogJ05vIENvbnRlbnQgRm91bmQnKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29udGVudChwYXJhbSA9ICdzbHVnJywgZmFsbGJhY2sgPSAnTm8gQ29udGVudCBGb3VuZCcpIHtcbiAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBjb25zdCBjb250ZW50ID0gcm91dGUucGFyYW1NYXAucGlwZShcbiAgICBtYXAoKHBhcmFtcykgPT4gcGFyYW1zLmdldChwYXJhbSkpLFxuICAgIG1hcCgoc2x1ZykgPT4gQ09OVEVOVF9GT0xERVJfRklMRVNbYC9zcmMvY29udGVudC8ke3NsdWd9Lm1kYF0gfHwgZmFsbGJhY2spXG4gICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ContentRenderer {\n async render(content) {\n return content;\n }\n // eslint-disable-next-line\n enhance() { }\n}\nContentRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nContentRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: ContentRenderer, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs7NEdBTlEsZUFBZTtnSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50UmVuZGVyZXIge1xuICBhc3luYyByZW5kZXIoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBlbmhhbmNlKCkge31cbn1cbiJdfQ==","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, ViewEncapsulation, } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { of } from 'rxjs';\nimport { catchError, map, mergeMap, switchMap } from 'rxjs/operators';\nimport { ContentRenderer } from './content-renderer';\nimport * as i0 from \"@angular/core\";\nexport default class AnalogMarkdownComponent {\n constructor() {\n this.sanitizer = inject(DomSanitizer);\n this.route = inject(ActivatedRoute);\n this.content$ = of('');\n this.classes = 'analog-markdown';\n this.contentRenderer = inject(ContentRenderer);\n }\n ngOnInit() {\n this.updateContent();\n }\n ngOnChanges() {\n this.updateContent();\n }\n updateContent() {\n this.content$ = this.route.data.pipe(map((data) => data['_analogContent']), switchMap((contentResolver) => this.content ? of(this.content) : contentResolver()), mergeMap((contentString) => this.renderContent(contentString)), map((content) => this.sanitizer.bypassSecurityTrustHtml(content)), catchError((e) => of(`There was an error ${e}`)));\n }\n async renderContent(content) {\n return this.contentRenderer.render(content);\n }\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n }\n}\nAnalogMarkdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: AnalogMarkdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\nAnalogMarkdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"15.0.0\", type: AnalogMarkdownComponent, isStandalone: true, selector: \"analog-markdown\", inputs: { content: \"content\", classes: \"classes\" }, usesOnChanges: true, ngImport: i0, template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`, isInline: true, dependencies: [{ kind: \"pipe\", type: AsyncPipe, name: \"async\" }], encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: AnalogMarkdownComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'analog-markdown',\n imports: [AsyncPipe],\n standalone: true,\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content$ | async\" [class]=\"classes\"></div>`,\n }]\n }], propDecorators: { content: [{\n type: Input\n }], classes: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVckQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFSNUM7UUFXVSxjQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFHdEMsWUFBTyxHQUFHLGlCQUFpQixDQUFDO1FBRXJDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBNkIzQztJQTNCQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBOEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2xFLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUNwRCxFQUNELFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUM5RCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDakUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQzs7b0hBdENrQix1QkFBdUI7d0dBQXZCLHVCQUF1QixvSkFGaEMsOERBQThELHVEQUo5RCxTQUFTOzJGQU1BLHVCQUF1QjtrQkFSM0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFLDhEQUE4RDtpQkFDekU7OEJBUVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmFsb2ctbWFya2Rvd24nLFxuICBpbXBvcnRzOiBbQXN5bmNQaXBlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtpbm5lckhUTUxdPVwiY29udGVudCQgfCBhc3luY1wiIFtjbGFzc109XCJjbGFzc2VzXCI+PC9kaXY+YCxcbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmFsb2dNYXJrZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkXG57XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwdWJsaWMgY29udGVudCQ6IE9ic2VydmFibGU8U2FmZUh0bWw+ID0gb2YoJycpO1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBjbGFzc2VzID0gJ2FuYWxvZy1tYXJrZG93bic7XG5cbiAgY29udGVudFJlbmRlcmVyID0gaW5qZWN0KENvbnRlbnRSZW5kZXJlcik7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgdGhpcy5jb250ZW50JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgbWFwPERhdGEsICgpID0+IFByb21pc2U8c3RyaW5nPj4oKGRhdGEpID0+IGRhdGFbJ19hbmFsb2dDb250ZW50J10pLFxuICAgICAgc3dpdGNoTWFwKChjb250ZW50UmVzb2x2ZXIpID0+XG4gICAgICAgIHRoaXMuY29udGVudCA/IG9mKHRoaXMuY29udGVudCkgOiBjb250ZW50UmVzb2x2ZXIoKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChjb250ZW50U3RyaW5nKSA9PiB0aGlzLnJlbmRlckNvbnRlbnQoY29udGVudFN0cmluZykpLFxuICAgICAgbWFwKChjb250ZW50KSA9PiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZW50KSksXG4gICAgICBjYXRjaEVycm9yKChlKSA9PiBvZihgVGhlcmUgd2FzIGFuIGVycm9yICR7ZX1gKSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRSZW5kZXJlci5yZW5kZXIoY29udGVudCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jb250ZW50UmVuZGVyZXIuZW5oYW5jZSgpO1xuICB9XG59XG4iXX0=","/**\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, PLATFORM_ID } from '@angular/core';\nimport { marked } from 'marked';\nimport 'prismjs';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\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 { ContentRenderer } from './content-renderer';\nimport * as i0 from \"@angular/core\";\nconst renderer = new marked.Renderer();\n// wrap code block the way Prism.js expects it\nrenderer.code = function (code, lang) {\n // eslint-disable-next-line\n code = this.options.highlight(code, lang);\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n // e.g. \"language-js\"\n const langClass = 'language-' + lang;\n return ('<pre class=\"' +\n langClass +\n '\"><code class=\"' +\n langClass +\n '\">' +\n code +\n '</code></pre>');\n};\n// ------------------------------\nexport class MarkdownContentRendererService {\n constructor() {\n this.platformId = inject(PLATFORM_ID);\n }\n async render(content) {\n marked.setOptions({\n renderer,\n highlight: (code, lang) => {\n lang = lang || 'typescript';\n if (!Prism.languages[lang]) {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available with the provided setup.\n To enable, import your main.ts as:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n return code;\n }\n return Prism.highlight(code, Prism.languages[lang], lang);\n },\n pedantic: false,\n gfm: true,\n breaks: false,\n sanitize: false,\n smartLists: true,\n smartypants: false,\n xhtml: false,\n });\n return marked(content);\n }\n // eslint-disable-next-line\n enhance() { }\n}\nMarkdownContentRendererService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMarkdownContentRendererService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"15.0.0\", ngImport: i0, type: MarkdownContentRendererService, decorators: [{\n type: Injectable\n }] });\nexport function withMarkdownRenderer() {\n return { provide: ContentRenderer, useClass: MarkdownContentRendererService };\n}\nexport function provideContent(...features) {\n return [...features];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLFNBQVMsQ0FBQztBQUNqQixPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sMkRBQTJELENBQUM7QUFDbkUsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUlyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2Qyw4Q0FBOEM7QUFDOUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFxQixJQUFJLEVBQUUsSUFBSTtJQUM3QywyQkFBMkI7SUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxhQUFhLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztLQUMvQztJQUNELHFCQUFxQjtJQUNyQixNQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLE9BQU8sQ0FDTCxjQUFjO1FBQ2QsU0FBUztRQUNULGlCQUFpQjtRQUNqQixTQUFTO1FBQ1QsSUFBSTtRQUNKLElBQUk7UUFDSixlQUFlLENBQ2hCLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixpQ0FBaUM7QUFHakMsTUFBTSxPQUFPLDhCQUE4QjtJQUQzQztRQUVFLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FpQ2xDO0lBL0JDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixNQUFNLENBQUMsVUFBVSxDQUFDO1lBQ2hCLFFBQVE7WUFDUixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQzs7Z0NBRVMsSUFBSTs7NENBRVEsSUFBSTs7V0FFckMsQ0FBQyxDQUFDO29CQUNILE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEtBQUs7WUFDZixHQUFHLEVBQUUsSUFBSTtZQUNULE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsS0FBSztZQUNsQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsT0FBTyxLQUFJLENBQUM7OzJIQWpDRCw4QkFBOEI7K0hBQTlCLDhCQUE4QjsyRkFBOUIsOEJBQThCO2tCQUQxQyxVQUFVOztBQXFDWCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQUcsUUFBb0I7SUFDcEQsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlZGl0IGdvZXMgdG8gU2N1bGx5IGZvciBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvblxuICogaHR0cHM6Ly9naXRodWIuY29tL3NjdWxseWlvL3NjdWxseS9ibG9iL21haW4vbGlicy9zY3VsbHkvc3JjL2xpYi9maWxlSGFuZGVyUGx1Z2lucy9tYXJrZG93bi50c1xuICovXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcblxuaW1wb3J0ICdwcmlzbWpzJztcbmltcG9ydCAncHJpc21qcy9wbHVnaW5zL3Rvb2xiYXIvcHJpc20tdG9vbGJhcic7XG5pbXBvcnQgJ3ByaXNtanMvcGx1Z2lucy9jb3B5LXRvLWNsaXBib2FyZC9wcmlzbS1jb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuXG5kZWNsYXJlIGNvbnN0IFByaXNtOiB0eXBlb2YgaW1wb3J0KCdwcmlzbWpzJyk7XG5cbmNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuLy8gd3JhcCBjb2RlIGJsb2NrIHRoZSB3YXkgUHJpc20uanMgZXhwZWN0cyBpdFxucmVuZGVyZXIuY29kZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnksIGNvZGUsIGxhbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvZGUgPSB0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGNvZGUsIGxhbmcpO1xuICBpZiAoIWxhbmcpIHtcbiAgICByZXR1cm4gJzxwcmU+PGNvZGU+JyArIGNvZGUgKyAnPC9jb2RlPjwvcHJlPic7XG4gIH1cbiAgLy8gZS5nLiBcImxhbmd1YWdlLWpzXCJcbiAgY29uc3QgbGFuZ0NsYXNzID0gJ2xhbmd1YWdlLScgKyBsYW5nO1xuICByZXR1cm4gKFxuICAgICc8cHJlIGNsYXNzPVwiJyArXG4gICAgbGFuZ0NsYXNzICtcbiAgICAnXCI+PGNvZGUgY2xhc3M9XCInICtcbiAgICBsYW5nQ2xhc3MgK1xuICAgICdcIj4nICtcbiAgICBjb2RlICtcbiAgICAnPC9jb2RlPjwvcHJlPidcbiAgKTtcbn07XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSBpbXBsZW1lbnRzIENvbnRlbnRSZW5kZXJlciB7XG4gIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXG4gIGFzeW5jIHJlbmRlcihjb250ZW50OiBzdHJpbmcpIHtcbiAgICBtYXJrZWQuc2V0T3B0aW9ucyh7XG4gICAgICByZW5kZXJlcixcbiAgICAgIGhpZ2hsaWdodDogKGNvZGUsIGxhbmcpID0+IHtcbiAgICAgICAgbGFuZyA9IGxhbmcgfHwgJ3R5cGVzY3JpcHQnO1xuICAgICAgICBpZiAoIVByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgVGhlIHJlcXVlc3RlZCBsYW5ndWFnZSAnJHtsYW5nfScgaXMgbm90IGF2YWlsYWJsZSB3aXRoIHRoZSBwcm92aWRlZCBzZXR1cC5cbiAgICAgIFRvIGVuYWJsZSwgaW1wb3J0IHlvdXIgbWFpbi50cyBhczpcbiAgICAgICAgaW1wb3J0ICAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgIGApO1xuICAgICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcmlzbS5oaWdobGlnaHQoY29kZSwgUHJpc20ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKTtcbiAgICAgIH0sXG4gICAgICBwZWRhbnRpYzogZmFsc2UsXG4gICAgICBnZm06IHRydWUsXG4gICAgICBicmVha3M6IGZhbHNlLFxuICAgICAgc2FuaXRpemU6IGZhbHNlLFxuICAgICAgc21hcnRMaXN0czogdHJ1ZSxcbiAgICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICAgIHhodG1sOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXJrZWQoY29udGVudCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZW5oYW5jZSgpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTWFya2Rvd25SZW5kZXJlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlciwgdXNlQ2xhc3M6IE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnRlbnQoLi4uZmVhdHVyZXM6IFByb3ZpZGVyW10pIHtcbiAgcmV0dXJuIFsuLi5mZWF0dXJlc107XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2FuYWxvZ2pzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export { injectContent } from './lib/content';
2
+ export { ContentRenderer } from './lib/content-renderer';
3
+ export { default as MarkdownComponent } from './lib/markdown.component';
4
+ export { MarkdownContentRendererService } from './lib/markdown-content-renderer.service';
5
+ export { provideContent, withMarkdownRenderer, } from './lib/markdown-content-renderer.service';
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare abstract class ContentRenderer {
3
+ render(content: string): Promise<string>;
4
+ enhance(): void;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContentRenderer, never>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<ContentRenderer>;
7
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Retrieves the static content using the provided param
3
+ *
4
+ * @param param route parameter (default: 'slug')
5
+ * @param fallback fallback text if content file is not found (default: 'No Content Found')
6
+ */
7
+ export declare function injectContent(param?: string, fallback?: string): import("rxjs").Observable<string>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Credit goes to Scully for original implementation
3
+ * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
4
+ */
5
+ import { Provider } from '@angular/core';
6
+ import 'prismjs';
7
+ import 'prismjs/plugins/toolbar/prism-toolbar';
8
+ import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
9
+ import 'prismjs/components/prism-bash';
10
+ import 'prismjs/components/prism-css';
11
+ import 'prismjs/components/prism-javascript';
12
+ import 'prismjs/components/prism-json';
13
+ import 'prismjs/components/prism-markup';
14
+ import 'prismjs/components/prism-typescript';
15
+ import { ContentRenderer } from './content-renderer';
16
+ import * as i0 from "@angular/core";
17
+ export declare class MarkdownContentRendererService implements ContentRenderer {
18
+ platformId: Object;
19
+ render(content: string): Promise<string>;
20
+ enhance(): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<MarkdownContentRendererService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<MarkdownContentRendererService>;
23
+ }
24
+ export declare function withMarkdownRenderer(): Provider;
25
+ export declare function provideContent(...features: Provider[]): Provider[];
@@ -0,0 +1,20 @@
1
+ import { AfterViewChecked, OnInit, OnChanges } from '@angular/core';
2
+ import { SafeHtml } from '@angular/platform-browser';
3
+ import { Observable } from 'rxjs';
4
+ import { ContentRenderer } from './content-renderer';
5
+ import * as i0 from "@angular/core";
6
+ export default class AnalogMarkdownComponent implements OnInit, OnChanges, AfterViewChecked {
7
+ private sanitizer;
8
+ private route;
9
+ content$: Observable<SafeHtml>;
10
+ content: string | null;
11
+ classes: string;
12
+ contentRenderer: ContentRenderer;
13
+ ngOnInit(): void;
14
+ ngOnChanges(): void;
15
+ updateContent(): void;
16
+ renderContent(content: string): Promise<string>;
17
+ ngAfterViewChecked(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalogMarkdownComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<AnalogMarkdownComponent, "analog-markdown", never, { "content": "content"; "classes": "classes"; }, {}, never, never, true, never>;
20
+ }
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@analogjs/content",
3
+ "version": "0.1.0",
4
+ "description": "Content Rendering for Analog",
5
+ "author": "Brandon Roberts <robertsbt@gmail.com>",
6
+ "keywords": [
7
+ "angular",
8
+ "markdown",
9
+ "meta-framework"
10
+ ],
11
+ "license": "MIT",
12
+ "bugs": {
13
+ "url": "https://github.com/analogjs/analog/issues"
14
+ },
15
+ "homepage": "https://analogjs.org",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/analogjs/analog.git"
19
+ },
20
+ "peerDependencies": {
21
+ "@angular/common": "^15.0.0",
22
+ "@angular/core": "^15.0.0",
23
+ "@angular/platform-browser": "^15.0.0",
24
+ "@angular/router": "^15.0.0",
25
+ "rxjs": "^6.5.0 || ^7.5.0",
26
+ "marked": "^4.2.4",
27
+ "prismjs": "^1.29.0"
28
+ },
29
+ "dependencies": {
30
+ "tslib": "^2.3.0"
31
+ },
32
+ "module": "fesm2015/analogjs-content.mjs",
33
+ "es2020": "fesm2020/analogjs-content.mjs",
34
+ "esm2020": "esm2020/analogjs-content.mjs",
35
+ "fesm2020": "fesm2020/analogjs-content.mjs",
36
+ "fesm2015": "fesm2015/analogjs-content.mjs",
37
+ "typings": "index.d.ts",
38
+ "exports": {
39
+ "./package.json": {
40
+ "default": "./package.json"
41
+ },
42
+ ".": {
43
+ "types": "./index.d.ts",
44
+ "esm2020": "./esm2020/analogjs-content.mjs",
45
+ "es2020": "./fesm2020/analogjs-content.mjs",
46
+ "es2015": "./fesm2015/analogjs-content.mjs",
47
+ "node": "./fesm2015/analogjs-content.mjs",
48
+ "default": "./fesm2020/analogjs-content.mjs"
49
+ }
50
+ },
51
+ "sideEffects": false
52
+ }