@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 +5 -0
- package/esm2020/analogjs-content.mjs +5 -0
- package/esm2020/index.mjs +6 -0
- package/esm2020/lib/content-renderer.mjs +15 -0
- package/esm2020/lib/content.mjs +20 -0
- package/esm2020/lib/markdown-content-renderer.service.mjs +82 -0
- package/esm2020/lib/markdown.component.mjs +50 -0
- package/fesm2015/analogjs-content.mjs +169 -0
- package/fesm2015/analogjs-content.mjs.map +1 -0
- package/fesm2020/analogjs-content.mjs +166 -0
- package/fesm2020/analogjs-content.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/content-renderer.d.ts +7 -0
- package/lib/content.d.ts +7 -0
- package/lib/markdown-content-renderer.service.d.ts +25 -0
- package/lib/markdown.component.d.ts +20 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -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":";;;;;;;;;;;;;;;;;;;AAAA;AAIA,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE;AACpE,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,KAAK,EAAE,IAAI;AACd,CAAA,CAAC,CAAC;AACH;;;;;AAKG;AACG,SAAU,aAAa,CAAC,KAAK,GAAG,MAAM,EAAE,QAAQ,GAAG,kBAAkB,EAAA;AACvE,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACrC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAK,GAAA,CAAA,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;AACpJ,IAAA,OAAO,OAAO,CAAC;AACnB;;MChBa,eAAe,CAAA;AAClB,IAAA,MAAM,CAAC,OAAO,EAAA;;AAChB,YAAA,OAAO,OAAO,CAAC;SAClB,CAAA,CAAA;AAAA,KAAA;;AAED,IAAA,OAAO,MAAM;AAChB,CAAA;AACD,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAChL,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AACnI,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC7G,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC,EAAE,CAAC;;ACLC,MAAO,uBAAuB,CAAA;AACxC,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;KAClD;IACD,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IACD,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IACD,aAAa,GAAA;QACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA,mBAAA,EAAsB,CAAC,CAAE,CAAA,CAAC,CAAC,CAAC,CAAC;KACzV;AACK,IAAA,aAAa,CAAC,OAAO,EAAA;;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC/C,CAAA,CAAA;AAAA,KAAA;IACD,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;KAClC;AACJ,CAAA;AACD,uBAAuB,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/L,uBAAuB,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA,4DAAA,CAA8D,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5e,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACrH,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,CAAC;AACC,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,CAAC,SAAS,CAAC;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,mBAAmB,EAAE,IAAI;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAA8D,4DAAA,CAAA;iBAC3E,CAAC;AACT,SAAA,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC;AACxB,gBAAA,IAAI,EAAE,KAAK;aACd,CAAC,EAAE,OAAO,EAAE,CAAC;AACV,gBAAA,IAAI,EAAE,KAAK;aACd,CAAC,EAAE,EAAE,CAAC;;AC/BnB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvC;AACA,QAAQ,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE,IAAI,EAAA;;IAEhC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE;AACP,QAAA,OAAO,aAAa,GAAG,IAAI,GAAG,eAAe,CAAC;AACjD,KAAA;;AAED,IAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC;AACrC,IAAA,QAAQ,cAAc;QAClB,SAAS;QACT,iBAAiB;QACjB,SAAS;QACT,IAAI;QACJ,IAAI;AACJ,QAAA,eAAe,EAAE;AACzB,CAAC,CAAC;AACF;MACa,8BAA8B,CAAA;AACvC,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;KACzC;AACK,IAAA,MAAM,CAAC,OAAO,EAAA;;YAChB,MAAM,CAAC,UAAU,CAAC;gBACd,QAAQ;AACR,gBAAA,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,KAAI;AACtB,oBAAA,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;AAC5B,oBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBACxB,OAAO,CAAC,IAAI,CAAC,CAAA;;gCAED,IAAI,CAAA;;4CAEQ,IAAI,CAAA;;AAErC,UAAA,CAAA,CAAC,CAAC;AACO,wBAAA,OAAO,IAAI,CAAC;AACf,qBAAA;AACD,oBAAA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC7D;AACD,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,GAAG,EAAE,IAAI;AACT,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,KAAK,EAAE,KAAK;AACf,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;SAC1B,CAAA,CAAA;AAAA,KAAA;;AAED,IAAA,OAAO,MAAM;AAChB,CAAA;AACD,8BAA8B,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC9M,8BAA8B,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC;AACjK,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC,EAAE,CAAC,CAAC;SACE,oBAAoB,GAAA;IAChC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAC;AAClF,CAAC;AACe,SAAA,cAAc,CAAC,GAAG,QAAQ,EAAA;AACtC,IAAA,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACzB;;AChFA;;AAEG;;;;"}
|
|
@@ -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
|
+
}
|
package/lib/content.d.ts
ADDED
|
@@ -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
|
+
}
|