@analogjs/content 1.5.0 → 1.6.0-beta.1

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/esm2022/index.mjs CHANGED
@@ -1,11 +1,12 @@
1
1
  export { AnchorNavigationDirective } from './lib/anchor-navigation.directive';
2
2
  export { injectContent } from './lib/content';
3
- export { ContentRenderer } from './lib/content-renderer';
3
+ export { ContentRenderer, NoopContentRenderer } from './lib/content-renderer';
4
4
  export { injectContentFiles } from './lib/inject-content-files';
5
- export { MarkdownContentRendererService, provideContent, withMarkdownRenderer, MERMAID_IMPORT_TOKEN, } from './lib/markdown-content-renderer.service';
5
+ export { MarkdownContentRendererService } from './lib/markdown-content-renderer.service';
6
+ export { provideContent, withMarkdownRenderer, MERMAID_IMPORT_TOKEN, } from './lib/provide-content';
6
7
  export { default as MarkdownRouteComponent } from './lib/markdown-route.component';
7
8
  export { default as MarkdownComponent } from './lib/markdown.component';
8
9
  export { parseRawContentFile } from './lib/parse-raw-content-file';
9
10
  export { MarkedSetupService } from './lib/marked-setup.service';
10
11
  export { MarkedContentHighlighter, withHighlighter, } from './lib/marked-content-highlighter';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0seUNBQXlDLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sSUFBSSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLElBQUksaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGVBQWUsR0FDaEIsTUFBTSxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFuY2hvck5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9hbmNob3ItbmF2aWdhdGlvbi5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgaW5qZWN0Q29udGVudCB9IGZyb20gJy4vbGliL2NvbnRlbnQnO1xuZXhwb3J0IHsgQ29udGVudEZpbGUgfSBmcm9tICcuL2xpYi9jb250ZW50LWZpbGUnO1xuZXhwb3J0IHsgQ29udGVudFJlbmRlcmVyIH0gZnJvbSAnLi9saWIvY29udGVudC1yZW5kZXJlcic7XG5leHBvcnQgeyBpbmplY3RDb250ZW50RmlsZXMgfSBmcm9tICcuL2xpYi9pbmplY3QtY29udGVudC1maWxlcyc7XG5leHBvcnQge1xuICBNYXJrZG93bkNvbnRlbnRSZW5kZXJlclNlcnZpY2UsXG4gIHByb3ZpZGVDb250ZW50LFxuICB3aXRoTWFya2Rvd25SZW5kZXJlcixcbiAgTUVSTUFJRF9JTVBPUlRfVE9LRU4sXG59IGZyb20gJy4vbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcmtkb3duUm91dGVDb21wb25lbnQgfSBmcm9tICcuL2xpYi9tYXJrZG93bi1yb3V0ZS5jb21wb25lbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXJrZG93bkNvbXBvbmVudCB9IGZyb20gJy4vbGliL21hcmtkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgeyBwYXJzZVJhd0NvbnRlbnRGaWxlIH0gZnJvbSAnLi9saWIvcGFyc2UtcmF3LWNvbnRlbnQtZmlsZSc7XG5leHBvcnQgeyBNYXJrZWRTZXR1cFNlcnZpY2UgfSBmcm9tICcuL2xpYi9tYXJrZWQtc2V0dXAuc2VydmljZSc7XG5leHBvcnQge1xuICBNYXJrZWRDb250ZW50SGlnaGxpZ2h0ZXIsXG4gIHdpdGhIaWdobGlnaHRlcixcbn0gZnJvbSAnLi9saWIvbWFya2VkLWNvbnRlbnQtaGlnaGxpZ2h0ZXInO1xuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RixPQUFPLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZUFBZSxHQUNoQixNQUFNLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2FuY2hvci1uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBpbmplY3RDb250ZW50IH0gZnJvbSAnLi9saWIvY29udGVudCc7XG5leHBvcnQgeyBDb250ZW50RmlsZSB9IGZyb20gJy4vbGliL2NvbnRlbnQtZmlsZSc7XG5leHBvcnQgeyBDb250ZW50UmVuZGVyZXIsIE5vb3BDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2xpYi9jb250ZW50LXJlbmRlcmVyJztcbmV4cG9ydCB7IGluamVjdENvbnRlbnRGaWxlcyB9IGZyb20gJy4vbGliL2luamVjdC1jb250ZW50LWZpbGVzJztcbmV4cG9ydCB7IE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSB9IGZyb20gJy4vbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZSc7XG5leHBvcnQge1xuICBwcm92aWRlQ29udGVudCxcbiAgd2l0aE1hcmtkb3duUmVuZGVyZXIsXG4gIE1FUk1BSURfSU1QT1JUX1RPS0VOLFxufSBmcm9tICcuL2xpYi9wcm92aWRlLWNvbnRlbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXJrZG93blJvdXRlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvbWFya2Rvd24tcm91dGUuY29tcG9uZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWFya2Rvd25Db21wb25lbnQgfSBmcm9tICcuL2xpYi9tYXJrZG93bi5jb21wb25lbnQnO1xuZXhwb3J0IHsgcGFyc2VSYXdDb250ZW50RmlsZSB9IGZyb20gJy4vbGliL3BhcnNlLXJhdy1jb250ZW50LWZpbGUnO1xuZXhwb3J0IHsgTWFya2VkU2V0dXBTZXJ2aWNlIH0gZnJvbSAnLi9saWIvbWFya2VkLXNldHVwLnNlcnZpY2UnO1xuZXhwb3J0IHtcbiAgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyLFxuICB3aXRoSGlnaGxpZ2h0ZXIsXG59IGZyb20gJy4vbGliL21hcmtlZC1jb250ZW50LWhpZ2hsaWdodGVyJztcbiJdfQ==
@@ -1,4 +1,6 @@
1
- import { Injectable } from '@angular/core';
1
+ /// <reference types="vite/client" />
2
+ import { Injectable, TransferState, inject, makeStateKey } from '@angular/core';
3
+ import { getHeadingList } from 'marked-gfm-heading-id';
2
4
  import * as i0 from "@angular/core";
3
5
  export class ContentRenderer {
4
6
  async render(content) {
@@ -15,4 +17,37 @@ export class ContentRenderer {
15
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ContentRenderer, decorators: [{
16
18
  type: Injectable
17
19
  }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUzNDLE1BQU0sT0FBZ0IsZUFBZTtJQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsT0FBTyxLQUFJLENBQUM7OEdBVlEsZUFBZTtrSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBUYWJsZU9mQ29udGVudEl0ZW0gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxldmVsOiBudW1iZXI7IC8vIHN0YXJ0cyBhdCAxXG4gIHRleHQ6IHN0cmluZztcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZW50UmVuZGVyZXIge1xuICBhc3luYyByZW5kZXIoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldENvbnRlbnRIZWFkaW5ncygpOiBBcnJheTxUYWJsZU9mQ29udGVudEl0ZW0+IHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZW5oYW5jZSgpIHt9XG59XG4iXX0=
20
+ export class NoopContentRenderer {
21
+ constructor() {
22
+ this.transferState = inject(TransferState);
23
+ this.contentId = 0;
24
+ }
25
+ /**
26
+ * Generates a hash from the content string
27
+ * to be used with the transfer state
28
+ */
29
+ generateHash(str) {
30
+ let hash = 0;
31
+ for (let i = 0, len = str.length; i < len; i++) {
32
+ let chr = str.charCodeAt(i);
33
+ hash = (hash << 5) - hash + chr;
34
+ hash |= 0; // Convert to 32bit integer
35
+ }
36
+ return hash;
37
+ }
38
+ async render(content) {
39
+ this.contentId = this.generateHash(content);
40
+ return content;
41
+ }
42
+ enhance() { }
43
+ getContentHeadings() {
44
+ const key = makeStateKey(`content-headings-${this.contentId}`);
45
+ if (import.meta.env.SSR === true) {
46
+ const headings = getHeadingList();
47
+ this.transferState.set(key, headings);
48
+ return headings;
49
+ }
50
+ return this.transferState.get(key, []);
51
+ }
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvc3JjL2xpYi9jb250ZW50LXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUVyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFTdkQsTUFBTSxPQUFnQixlQUFlO0lBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs4R0FWUSxlQUFlO2tIQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRHBDLFVBQVU7O0FBY1gsTUFBTSxPQUFPLG1CQUFtQjtJQUFoQztRQUNtQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQUcsQ0FBQyxDQUFDO0lBbUN4QixDQUFDO0lBakNDOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxHQUFXO1FBQzlCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELE9BQU8sS0FBSSxDQUFDO0lBRVosa0JBQWtCO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FDdEIsb0JBQW9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FDckMsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0QyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ2aXRlL2NsaWVudFwiIC8+XG5cbmltcG9ydCB7IEluamVjdGFibGUsIFRyYW5zZmVyU3RhdGUsIGluamVjdCwgbWFrZVN0YXRlS2V5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRIZWFkaW5nTGlzdCB9IGZyb20gJ21hcmtlZC1nZm0taGVhZGluZy1pZCc7XG5cbmV4cG9ydCB0eXBlIFRhYmxlT2ZDb250ZW50SXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbGV2ZWw6IG51bWJlcjsgLy8gc3RhcnRzIGF0IDFcbiAgdGV4dDogc3RyaW5nO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnRlbnRSZW5kZXJlciB7XG4gIGFzeW5jIHJlbmRlcihjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgZ2V0Q29udGVudEhlYWRpbmdzKCk6IEFycmF5PFRhYmxlT2ZDb250ZW50SXRlbT4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBlbmhhbmNlKCkge31cbn1cblxuZXhwb3J0IGNsYXNzIE5vb3BDb250ZW50UmVuZGVyZXIgaW1wbGVtZW50cyBDb250ZW50UmVuZGVyZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zZmVyU3RhdGUgPSBpbmplY3QoVHJhbnNmZXJTdGF0ZSk7XG4gIHByaXZhdGUgY29udGVudElkID0gMDtcblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgaGFzaCBmcm9tIHRoZSBjb250ZW50IHN0cmluZ1xuICAgKiB0byBiZSB1c2VkIHdpdGggdGhlIHRyYW5zZmVyIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlSGFzaChzdHI6IHN0cmluZykge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgY2hyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hyO1xuICAgICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgICB9XG4gICAgcmV0dXJuIGhhc2g7XG4gIH1cblxuICBhc3luYyByZW5kZXIoY29udGVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb250ZW50SWQgPSB0aGlzLmdlbmVyYXRlSGFzaChjb250ZW50KTtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBlbmhhbmNlKCkge31cblxuICBnZXRDb250ZW50SGVhZGluZ3MoKTogQXJyYXk8VGFibGVPZkNvbnRlbnRJdGVtPiB7XG4gICAgY29uc3Qga2V5ID0gbWFrZVN0YXRlS2V5PFRhYmxlT2ZDb250ZW50SXRlbVtdPihcbiAgICAgIGBjb250ZW50LWhlYWRpbmdzLSR7dGhpcy5jb250ZW50SWR9YFxuICAgICk7XG5cbiAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LlNTUiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaGVhZGluZ3MgPSBnZXRIZWFkaW5nTGlzdCgpO1xuICAgICAgdGhpcy50cmFuc2ZlclN0YXRlLnNldChrZXksIGhlYWRpbmdzKTtcbiAgICAgIHJldHVybiBoZWFkaW5ncztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2ZlclN0YXRlLmdldChrZXksIFtdKTtcbiAgfVxufVxuIl19
@@ -16,8 +16,8 @@ export const getContentFilesList = () => import.meta.glob(['/src/content/**/*.md
16
16
  * @returns
17
17
  */
18
18
  export const getContentFiles = () => import.meta.glob(['/src/content/**/*.md'], {
19
- query: '?raw',
19
+ query: '?analog-content-file=true',
20
20
  import: 'default',
21
21
  });
22
22
  export const getAgxFiles = () => import.meta.glob(['/src/content/**/*.agx']);
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbnRlbnQtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvZ2V0LWNvbnRlbnQtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNkLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUMsRUFDakQ7SUFDRSxLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLEtBQUssRUFBRSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRTtDQUN2QyxDQUNGLENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7SUFDekMsS0FBSyxFQUFFLE1BQU07SUFDYixNQUFNLEVBQUUsU0FBUztDQUNsQixDQUFDLENBQUM7QUFFTCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY29udGVudCBmaWxlcyBieSBmaWxlbmFtZSB3aXRoID9hbmFsb2ctY29udGVudC1saXN0PXRydWUuXG4gKiBXZSB1c2UgdGhlIHF1ZXJ5IHBhcmFtIHRvIHRyYW5zZm9ybSB0aGUgcmV0dXJuIGludG8gYW4gYXJyYXkgb2ZcbiAqIGp1c3QgZnJvbnQgbWF0dGVyIGF0dHJpYnV0ZXMuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnRlbnRGaWxlc0xpc3QgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgIFsnL3NyYy9jb250ZW50LyoqLyoubWQnLCAnL3NyYy9jb250ZW50LyoqLyouYWd4J10sXG4gICAge1xuICAgICAgZWFnZXI6IHRydWUsXG4gICAgICBpbXBvcnQ6ICdkZWZhdWx0JyxcbiAgICAgIHF1ZXJ5OiB7ICdhbmFsb2ctY29udGVudC1saXN0JzogdHJ1ZSB9LFxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXp5IGxvYWRlZCBjb250ZW50IGZpbGVzIGZvciBsb29rdXBzLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50RmlsZXMgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iKFsnL3NyYy9jb250ZW50LyoqLyoubWQnXSwge1xuICAgIHF1ZXJ5OiAnP3JhdycsXG4gICAgaW1wb3J0OiAnZGVmYXVsdCcsXG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZ2V0QWd4RmlsZXMgPSAoKSA9PiBpbXBvcnQubWV0YS5nbG9iKFsnL3NyYy9jb250ZW50LyoqLyouYWd4J10pO1xuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbnRlbnQtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NyYy9saWIvZ2V0LWNvbnRlbnQtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNkLENBQUMsc0JBQXNCLEVBQUUsdUJBQXVCLENBQUMsRUFDakQ7SUFDRSxLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLEtBQUssRUFBRSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRTtDQUN2QyxDQUNGLENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7SUFDekMsS0FBSyxFQUFFLDJCQUEyQjtJQUNsQyxNQUFNLEVBQUUsU0FBUztDQUNsQixDQUFDLENBQUM7QUFFTCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY29udGVudCBmaWxlcyBieSBmaWxlbmFtZSB3aXRoID9hbmFsb2ctY29udGVudC1saXN0PXRydWUuXG4gKiBXZSB1c2UgdGhlIHF1ZXJ5IHBhcmFtIHRvIHRyYW5zZm9ybSB0aGUgcmV0dXJuIGludG8gYW4gYXJyYXkgb2ZcbiAqIGp1c3QgZnJvbnQgbWF0dGVyIGF0dHJpYnV0ZXMuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnRlbnRGaWxlc0xpc3QgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iPFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICAgIFsnL3NyYy9jb250ZW50LyoqLyoubWQnLCAnL3NyYy9jb250ZW50LyoqLyouYWd4J10sXG4gICAge1xuICAgICAgZWFnZXI6IHRydWUsXG4gICAgICBpbXBvcnQ6ICdkZWZhdWx0JyxcbiAgICAgIHF1ZXJ5OiB7ICdhbmFsb2ctY29udGVudC1saXN0JzogdHJ1ZSB9LFxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXp5IGxvYWRlZCBjb250ZW50IGZpbGVzIGZvciBsb29rdXBzLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb250ZW50RmlsZXMgPSAoKSA9PlxuICBpbXBvcnQubWV0YS5nbG9iKFsnL3NyYy9jb250ZW50LyoqLyoubWQnXSwge1xuICAgIHF1ZXJ5OiAnP2FuYWxvZy1jb250ZW50LWZpbGU9dHJ1ZScsXG4gICAgaW1wb3J0OiAnZGVmYXVsdCcsXG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZ2V0QWd4RmlsZXMgPSAoKSA9PiBpbXBvcnQubWV0YS5nbG9iKFsnL3NyYy9jb250ZW50LyoqLyouYWd4J10pO1xuIl19
@@ -1,8 +1,6 @@
1
- import { inject, Injectable, InjectionToken } from '@angular/core';
1
+ import { inject, Injectable } from '@angular/core';
2
2
  import { getHeadingList } from 'marked-gfm-heading-id';
3
- import { ContentRenderer } from './content-renderer';
4
3
  import { MarkedSetupService } from './marked-setup.service';
5
- import { RenderTaskService } from './render-task.service';
6
4
  import * as i0 from "@angular/core";
7
5
  export class MarkdownContentRendererService {
8
6
  #marked = inject(MarkedSetupService, { self: true });
@@ -23,27 +21,4 @@ export class MarkdownContentRendererService {
23
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkdownContentRendererService, decorators: [{
24
22
  type: Injectable
25
23
  }] });
26
- export function withMarkdownRenderer(options) {
27
- return [
28
- MarkedSetupService,
29
- RenderTaskService,
30
- {
31
- provide: ContentRenderer,
32
- useFactory: () => new MarkdownContentRendererService(),
33
- deps: [MarkedSetupService],
34
- },
35
- options?.loadMermaid
36
- ? [
37
- {
38
- provide: MERMAID_IMPORT_TOKEN,
39
- useFactory: options.loadMermaid,
40
- },
41
- ]
42
- : [],
43
- ];
44
- }
45
- export function provideContent(...features) {
46
- return [...features];
47
- }
48
- export const MERMAID_IMPORT_TOKEN = new InjectionToken('mermaid_import');
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxlQUFlLEVBQXNCLE1BQU0sb0JBQW9CLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzFELE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXJELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs4R0FmRCw4QkFBOEI7a0hBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVTs7QUF1QlgsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxPQUFpQztJQUVqQyxPQUFPO1FBQ0wsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQjtZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDhCQUE4QixFQUFFO1lBQ3RELElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDO1NBQzNCO1FBQ0QsT0FBTyxFQUFFLFdBQVc7WUFDbEIsQ0FBQyxDQUFDO2dCQUNFO29CQUNFLE9BQU8sRUFBRSxvQkFBb0I7b0JBQzdCLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVztpQkFDaEM7YUFDRjtZQUNILENBQUMsQ0FBQyxFQUFFO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQUcsUUFBb0I7SUFDcEQsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUVwRCxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldEhlYWRpbmdMaXN0IH0gZnJvbSAnbWFya2VkLWdmbS1oZWFkaW5nLWlkJztcblxuaW1wb3J0IHsgQ29udGVudFJlbmRlcmVyLCBUYWJsZU9mQ29udGVudEl0ZW0gfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuaW1wb3J0IHsgTWFya2VkU2V0dXBTZXJ2aWNlIH0gZnJvbSAnLi9tYXJrZWQtc2V0dXAuc2VydmljZSc7XG5pbXBvcnQgeyBSZW5kZXJUYXNrU2VydmljZSB9IGZyb20gJy4vcmVuZGVyLXRhc2suc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYXJrZG93bkNvbnRlbnRSZW5kZXJlclNlcnZpY2UgaW1wbGVtZW50cyBDb250ZW50UmVuZGVyZXIge1xuICAjbWFya2VkID0gaW5qZWN0KE1hcmtlZFNldHVwU2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gIGFzeW5jIHJlbmRlcihjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLiNtYXJrZWQuZ2V0TWFya2VkSW5zdGFuY2UoKS5wYXJzZShjb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBhZnRlciBgcmVuZGVyKClgXG4gICAqL1xuICBnZXRDb250ZW50SGVhZGluZ3MoKTogVGFibGVPZkNvbnRlbnRJdGVtW10ge1xuICAgIHJldHVybiBnZXRIZWFkaW5nTGlzdCgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGVuaGFuY2UoKSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtkb3duUmVuZGVyZXJPcHRpb25zIHtcbiAgbG9hZE1lcm1haWQ/OiAoKSA9PiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoJ21lcm1haWQnKT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTWFya2Rvd25SZW5kZXJlcihcbiAgb3B0aW9ucz86IE1hcmtkb3duUmVuZGVyZXJPcHRpb25zXG4pOiBQcm92aWRlciB7XG4gIHJldHVybiBbXG4gICAgTWFya2VkU2V0dXBTZXJ2aWNlLFxuICAgIFJlbmRlclRhc2tTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlcixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IG5ldyBNYXJrZG93bkNvbnRlbnRSZW5kZXJlclNlcnZpY2UoKSxcbiAgICAgIGRlcHM6IFtNYXJrZWRTZXR1cFNlcnZpY2VdLFxuICAgIH0sXG4gICAgb3B0aW9ucz8ubG9hZE1lcm1haWRcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE1FUk1BSURfSU1QT1JUX1RPS0VOLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogb3B0aW9ucy5sb2FkTWVybWFpZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICA6IFtdLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnRlbnQoLi4uZmVhdHVyZXM6IFByb3ZpZGVyW10pIHtcbiAgcmV0dXJuIFsuLi5mZWF0dXJlc107XG59XG5cbmV4cG9ydCBjb25zdCBNRVJNQUlEX0lNUE9SVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgUHJvbWlzZTx0eXBlb2YgaW1wb3J0KCdtZXJtYWlkJyk+XG4+KCdtZXJtYWlkX2ltcG9ydCcpO1xuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLWNvbnRlbnQtcmVuZGVyZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRzVELE1BQU0sT0FBTyw4QkFBOEI7SUFDekMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXJELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUMxQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixPQUFPLEtBQUksQ0FBQzs4R0FmRCw4QkFBOEI7a0hBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0SGVhZGluZ0xpc3QgfSBmcm9tICdtYXJrZWQtZ2ZtLWhlYWRpbmctaWQnO1xuXG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIsIFRhYmxlT2ZDb250ZW50SXRlbSB9IGZyb20gJy4vY29udGVudC1yZW5kZXJlcic7XG5pbXBvcnQgeyBNYXJrZWRTZXR1cFNlcnZpY2UgfSBmcm9tICcuL21hcmtlZC1zZXR1cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcmtkb3duQ29udGVudFJlbmRlcmVyU2VydmljZSBpbXBsZW1lbnRzIENvbnRlbnRSZW5kZXJlciB7XG4gICNtYXJrZWQgPSBpbmplY3QoTWFya2VkU2V0dXBTZXJ2aWNlLCB7IHNlbGY6IHRydWUgfSk7XG5cbiAgYXN5bmMgcmVuZGVyKGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuI21hcmtlZC5nZXRNYXJrZWRJbnN0YW5jZSgpLnBhcnNlKGNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGFmdGVyIGByZW5kZXIoKWBcbiAgICovXG4gIGdldENvbnRlbnRIZWFkaW5ncygpOiBUYWJsZU9mQ29udGVudEl0ZW1bXSB7XG4gICAgcmV0dXJuIGdldEhlYWRpbmdMaXN0KCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZW5oYW5jZSgpIHt9XG59XG4iXX0=
@@ -7,7 +7,7 @@ import { from, of } from 'rxjs';
7
7
  import { catchError, map, mergeMap } from 'rxjs/operators';
8
8
  import { AnchorNavigationDirective } from './anchor-navigation.directive';
9
9
  import { ContentRenderer } from './content-renderer';
10
- import { MERMAID_IMPORT_TOKEN } from './markdown-content-renderer.service';
10
+ import { MERMAID_IMPORT_TOKEN } from './provide-content';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "./anchor-navigation.directive";
13
13
  export default class AnalogMarkdownComponent {
@@ -97,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
97
97
  type: ViewChild,
98
98
  args: ['container', { static: true, read: ViewContainerRef }]
99
99
  }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQWUzRSxNQUFNLENBQUMsT0FBTyxPQUFPLHVCQUF1QjtJQXNCMUM7UUFuQlEsY0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDYixlQUFVLEdBQUcsTUFBTSxDQUFDLFdB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WUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7OEdBL0VrQix1QkFBdUI7a0dBQXZCLHVCQUF1QixrTkFpQkksZ0JBQWdCLCtIQXZCcEQ7Ozs7VUFJRix1REFSRSxTQUFTOzsyRkFVQSx1QkFBdUI7a0JBYjNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDcEIsY0FBYyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQzNDLG1CQUFtQixFQUFFLElBQUk7b0JBQ3pCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7Ozs7VUFJRjtpQkFDVDt3REFlVSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vYW5jaG9yLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRlbnRSZW5kZXJlciB9IGZyb20gJy4vY29udGVudC1yZW5kZXJlcic7XG5pbXBvcnQgeyBNRVJNQUlEX0lNUE9SVF9UT0tFTiB9IGZyb20gJy4vbWFya2Rvd24tY29udGVudC1yZW5kZXJlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5hbG9nLW1hcmtkb3duJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZV0sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgPGRpdlxuICAgICNjb250YWluZXJcbiAgICBbaW5uZXJIVE1MXT1cImNvbnRlbnQkIHwgYXN5bmNcIlxuICAgIFtjbGFzc109XCJjbGFzc2VzXCJcbiAgPjwvZGl2PmAsXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5hbG9nTWFya2Rvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVybWFpZEltcG9ydCA9IGluamVjdChNRVJNQUlEX0lNUE9SVF9UT0tFTiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBtZXJtYWlkOiB0eXBlb2YgaW1wb3J0KCdtZXJtYWlkJykgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnRlbnQkOiBPYnNlcnZhYmxlPFNhZmVIdG1sPiA9IHRoaXMuZ2V0Q29udGVudFNvdXJjZSgpO1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKSBjbGFzc2VzID0gJ2FuYWxvZy1tYXJrZG93bic7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcblxuICBjb250ZW50UmVuZGVyZXIgPSBpbmplY3QoQ29udGVudFJlbmRlcmVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB0aGlzLm1lcm1haWRJbXBvcnQpIHtcbiAgICAgIC8vIE1lcm1haWQgY2FuIG9ubHkgYmUgbG9hZGVkIG9uIGNsaWVudCBzaWRlXG4gICAgICB0aGlzLmxvYWRNZXJtYWlkKHRoaXMubWVybWFpZEltcG9ydCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0eXBlb2YgdGhpcy5jb250ZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbnRlbnQgYXMgYW55KTtcbiAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudCQgPSB0aGlzLmdldENvbnRlbnRTb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb250ZW50U291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJvdXRlLmRhdGEucGlwZShcbiAgICAgIG1hcDxEYXRhLCBzdHJpbmc+KChkYXRhKSA9PiB0aGlzLmNvbnRlbnQgPz8gZGF0YVsnX2FuYWxvZ0NvbnRlbnQnXSksXG4gICAgICBtZXJnZU1hcCgoY29udGVudFN0cmluZykgPT4gdGhpcy5yZW5kZXJDb250ZW50KGNvbnRlbnRTdHJpbmcpKSxcbiAgICAgIG1hcCgoY29udGVudCkgPT4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudCkpLFxuICAgICAgY2F0Y2hFcnJvcigoZSkgPT4gb2YoYFRoZXJlIHdhcyBhbiBlcnJvciAke2V9YCkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlckNvbnRlbnQoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UmVuZGVyZXIucmVuZGVyKGNvbnRlbnQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY29udGVudFJlbmRlcmVyLmVuaGFuY2UoKTtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5tZXJtYWlkPy5kZWZhdWx0LnJ1bigpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1lcm1haWQobWVybWFpZEltcG9ydDogUHJvbWlzZTx0eXBlb2YgaW1wb3J0KCdtZXJtYWlkJyk+KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAvLyBXcmFwIGludG8gYW4gb2JzZXJ2YWJsZSB0byBhdm9pZCByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb25jZVxuICAgICAgLy8gdGhlIG1hcmtkb3duIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICAgICAgZnJvbShtZXJtYWlkSW1wb3J0KVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgobWVybWFpZCkgPT4ge1xuICAgICAgICAgIHRoaXMubWVybWFpZCA9IG1lcm1haWQ7XG4gICAgICAgICAgdGhpcy5tZXJtYWlkLmRlZmF1bHQuaW5pdGlhbGl6ZSh7IHN0YXJ0T25Mb2FkOiBmYWxzZSB9KTtcbiAgICAgICAgICAvLyBFeHBsaWNpdGx5IHJ1bm5pbmcgbWVybWFpZCBhcyBuZ0FmdGVyVmlld0NoZWNrZWRcbiAgICAgICAgICAvLyBoYXMgcHJvYmFibHkgYWxyZWFkeSBiZWVuIGNhbGxlZFxuICAgICAgICAgIHRoaXMubWVybWFpZD8uZGVmYXVsdC5ydW4oKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQWV6RCxNQUFNLENBQUMsT0FBTyxPQUFPLHVCQUF1QjtJQXNCMUM7UUFuQlEsY0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDYixlQUFVLEdBQUcsTUFBTSxDQUFDLFdB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WUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7OEdBL0VrQix1QkFBdUI7a0dBQXZCLHVCQUF1QixrTkFpQkksZ0JBQWdCLCtIQXZCcEQ7Ozs7VUFJRix1REFSRSxTQUFTOzsyRkFVQSx1QkFBdUI7a0JBYjNDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDcEIsY0FBYyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQzNDLG1CQUFtQixFQUFFLElBQUk7b0JBQ3pCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUU7Ozs7VUFJRjtpQkFDVDt3REFlVSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vYW5jaG9yLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRlbnRSZW5kZXJlciB9IGZyb20gJy4vY29udGVudC1yZW5kZXJlcic7XG5pbXBvcnQgeyBNRVJNQUlEX0lNUE9SVF9UT0tFTiB9IGZyb20gJy4vcHJvdmlkZS1jb250ZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5hbG9nLW1hcmtkb3duJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbQW5jaG9yTmF2aWdhdGlvbkRpcmVjdGl2ZV0sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgPGRpdlxuICAgICNjb250YWluZXJcbiAgICBbaW5uZXJIVE1MXT1cImNvbnRlbnQkIHwgYXN5bmNcIlxuICAgIFtjbGFzc109XCJjbGFzc2VzXCJcbiAgPjwvZGl2PmAsXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5hbG9nTWFya2Rvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVybWFpZEltcG9ydCA9IGluamVjdChNRVJNQUlEX0lNUE9SVF9UT0tFTiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBtZXJtYWlkOiB0eXBlb2YgaW1wb3J0KCdtZXJtYWlkJykgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnRlbnQkOiBPYnNlcnZhYmxlPFNhZmVIdG1sPiA9IHRoaXMuZ2V0Q29udGVudFNvdXJjZSgpO1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKSBjbGFzc2VzID0gJ2FuYWxvZy1tYXJrZG93bic7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcblxuICBjb250ZW50UmVuZGVyZXIgPSBpbmplY3QoQ29udGVudFJlbmRlcmVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB0aGlzLm1lcm1haWRJbXBvcnQpIHtcbiAgICAgIC8vIE1lcm1haWQgY2FuIG9ubHkgYmUgbG9hZGVkIG9uIGNsaWVudCBzaWRlXG4gICAgICB0aGlzLmxvYWRNZXJtYWlkKHRoaXMubWVybWFpZEltcG9ydCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb250ZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0eXBlb2YgdGhpcy5jb250ZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbnRlbnQgYXMgYW55KTtcbiAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudCQgPSB0aGlzLmdldENvbnRlbnRTb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb250ZW50U291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJvdXRlLmRhdGEucGlwZShcbiAgICAgIG1hcDxEYXRhLCBzdHJpbmc+KChkYXRhKSA9PiB0aGlzLmNvbnRlbnQgPz8gZGF0YVsnX2FuYWxvZ0NvbnRlbnQnXSksXG4gICAgICBtZXJnZU1hcCgoY29udGVudFN0cmluZykgPT4gdGhpcy5yZW5kZXJDb250ZW50KGNvbnRlbnRTdHJpbmcpKSxcbiAgICAgIG1hcCgoY29udGVudCkgPT4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudCkpLFxuICAgICAgY2F0Y2hFcnJvcigoZSkgPT4gb2YoYFRoZXJlIHdhcyBhbiBlcnJvciAke2V9YCkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlckNvbnRlbnQoY29udGVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UmVuZGVyZXIucmVuZGVyKGNvbnRlbnQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY29udGVudFJlbmRlcmVyLmVuaGFuY2UoKTtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5tZXJtYWlkPy5kZWZhdWx0LnJ1bigpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE1lcm1haWQobWVybWFpZEltcG9ydDogUHJvbWlzZTx0eXBlb2YgaW1wb3J0KCdtZXJtYWlkJyk+KSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAvLyBXcmFwIGludG8gYW4gb2JzZXJ2YWJsZSB0byBhdm9pZCByZWR1bmRhbnQgaW5pdGlhbGl6YXRpb24gb25jZVxuICAgICAgLy8gdGhlIG1hcmtkb3duIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICAgICAgZnJvbShtZXJtYWlkSW1wb3J0KVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgobWVybWFpZCkgPT4ge1xuICAgICAgICAgIHRoaXMubWVybWFpZCA9IG1lcm1haWQ7XG4gICAgICAgICAgdGhpcy5tZXJtYWlkLmRlZmF1bHQuaW5pdGlhbGl6ZSh7IHN0YXJ0T25Mb2FkOiBmYWxzZSB9KTtcbiAgICAgICAgICAvLyBFeHBsaWNpdGx5IHJ1bm5pbmcgbWVybWFpZCBhcyBuZ0FmdGVyVmlld0NoZWNrZWRcbiAgICAgICAgICAvLyBoYXMgcHJvYmFibHkgYWxyZWFkeSBiZWVuIGNhbGxlZFxuICAgICAgICAgIHRoaXMubWVybWFpZD8uZGVmYXVsdC5ydW4oKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ContentRenderer, NoopContentRenderer } from './content-renderer';
3
+ import { RenderTaskService } from './render-task.service';
4
+ const CONTENT_RENDERER_PROVIDERS = [
5
+ {
6
+ provide: ContentRenderer,
7
+ useClass: NoopContentRenderer,
8
+ },
9
+ ];
10
+ export function withMarkdownRenderer(options) {
11
+ return [
12
+ CONTENT_RENDERER_PROVIDERS,
13
+ options?.loadMermaid
14
+ ? [
15
+ {
16
+ provide: MERMAID_IMPORT_TOKEN,
17
+ useFactory: options.loadMermaid,
18
+ },
19
+ ]
20
+ : [],
21
+ ];
22
+ }
23
+ export function provideContent(...features) {
24
+ return [
25
+ { provide: RenderTaskService, useClass: RenderTaskService },
26
+ ...features,
27
+ ];
28
+ }
29
+ export const MERMAID_IMPORT_TOKEN = new InjectionToken('mermaid_import');
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGVudC9zcmMvbGliL3Byb3ZpZGUtY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU0xRCxNQUFNLDBCQUEwQixHQUFlO0lBQzdDO1FBQ0UsT0FBTyxFQUFFLGVBQWU7UUFDeEIsUUFBUSxFQUFFLG1CQUFtQjtLQUM5QjtDQUNGLENBQUM7QUFFRixNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE9BQWlDO0lBRWpDLE9BQU87UUFDTCwwQkFBMEI7UUFDMUIsT0FBTyxFQUFFLFdBQVc7WUFDbEIsQ0FBQyxDQUFDO2dCQUNFO29CQUNFLE9BQU8sRUFBRSxvQkFBb0I7b0JBQzdCLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVztpQkFDaEM7YUFDRjtZQUNILENBQUMsQ0FBQyxFQUFFO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQUcsUUFBb0I7SUFDcEQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTtRQUMzRCxHQUFHLFFBQVE7S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUVwRCxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250ZW50UmVuZGVyZXIsIE5vb3BDb250ZW50UmVuZGVyZXIgfSBmcm9tICcuL2NvbnRlbnQtcmVuZGVyZXInO1xuaW1wb3J0IHsgUmVuZGVyVGFza1NlcnZpY2UgfSBmcm9tICcuL3JlbmRlci10YXNrLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtkb3duUmVuZGVyZXJPcHRpb25zIHtcbiAgbG9hZE1lcm1haWQ/OiAoKSA9PiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoJ21lcm1haWQnKT47XG59XG5cbmNvbnN0IENPTlRFTlRfUkVOREVSRVJfUFJPVklERVJTOiBQcm92aWRlcltdID0gW1xuICB7XG4gICAgcHJvdmlkZTogQ29udGVudFJlbmRlcmVyLFxuICAgIHVzZUNsYXNzOiBOb29wQ29udGVudFJlbmRlcmVyLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNYXJrZG93blJlbmRlcmVyKFxuICBvcHRpb25zPzogTWFya2Rvd25SZW5kZXJlck9wdGlvbnNcbik6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIFtcbiAgICBDT05URU5UX1JFTkRFUkVSX1BST1ZJREVSUyxcbiAgICBvcHRpb25zPy5sb2FkTWVybWFpZFxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTUVSTUFJRF9JTVBPUlRfVE9LRU4sXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBvcHRpb25zLmxvYWRNZXJtYWlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW10sXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQ29udGVudCguLi5mZWF0dXJlczogUHJvdmlkZXJbXSkge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogUmVuZGVyVGFza1NlcnZpY2UsIHVzZUNsYXNzOiBSZW5kZXJUYXNrU2VydmljZSB9LFxuICAgIC4uLmZlYXR1cmVzLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3QgTUVSTUFJRF9JTVBPUlRfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gIFByb21pc2U8dHlwZW9mIGltcG9ydCgnbWVybWFpZCcpPlxuPignbWVybWFpZF9pbXBvcnQnKTtcbiJdfQ==
@@ -1,7 +1,5 @@
1
- import { withHighlighter } from '@analogjs/content';
2
- import { PrismHighlighter } from './lib/prism-highlighter';
3
- export { PrismHighlighter };
1
+ import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
4
2
  export function withPrismHighlighter() {
5
- return withHighlighter({ useClass: PrismHighlighter });
3
+ return [{ provide: ContentRenderer, useClass: NoopContentRenderer }];
6
4
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3ByaXNtLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLENBQUM7QUFFNUIsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhIaWdobGlnaHRlciB9IGZyb20gJ0BhbmFsb2dqcy9jb250ZW50JztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmlzbUhpZ2hsaWdodGVyIH0gZnJvbSAnLi9saWIvcHJpc20taGlnaGxpZ2h0ZXInO1xuXG5leHBvcnQgeyBQcmlzbUhpZ2hsaWdodGVyIH07XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJpc21IaWdobGlnaHRlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB3aXRoSGlnaGxpZ2h0ZXIoeyB1c2VDbGFzczogUHJpc21IaWdobGlnaHRlciB9KTtcbn1cbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3ByaXNtLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekUsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRSZW5kZXJlciwgTm9vcENvbnRlbnRSZW5kZXJlciB9IGZyb20gJ0BhbmFsb2dqcy9jb250ZW50JztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJpc21IaWdobGlnaHRlcigpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFt7IHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlciwgdXNlQ2xhc3M6IE5vb3BDb250ZW50UmVuZGVyZXIgfV07XG59XG4iXX0=
@@ -1,30 +1,10 @@
1
- import { withHighlighter } from '@analogjs/content';
2
- import { defaultHighlighterOptions, SHIKI_CONTAINER_OPTION, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_HIGHLIGHTER_OPTIONS, ShikiHighlighter, } from './lib/shiki-highlighter';
3
- export { ShikiHighlighter };
4
- export function withShikiHighlighter({ highlighter = {}, highlight = {}, container = '%s', } = {}) {
5
- if (!highlighter.themes) {
6
- if (highlight.theme) {
7
- highlighter.themes = [highlight.theme];
8
- }
9
- else if (highlight.themes && typeof highlight.themes === 'object') {
10
- highlighter.themes = Object.values(highlight.themes);
11
- }
12
- else {
13
- highlighter.themes = defaultHighlighterOptions.themes;
14
- }
15
- }
16
- if (!highlighter.langs) {
17
- highlighter.langs = defaultHighlighterOptions.langs;
18
- }
19
- if (highlighter.additionalLangs) {
20
- highlighter.langs.push(...highlighter.additionalLangs);
21
- delete highlighter.additionalLangs;
22
- }
1
+ import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
2
+ export function withShikiHighlighter(_opts = {}) {
23
3
  return [
24
- { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },
25
- { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },
26
- { provide: SHIKI_CONTAINER_OPTION, useValue: container },
27
- withHighlighter({ useClass: ShikiHighlighter }),
4
+ {
5
+ provide: ContentRenderer,
6
+ useClass: NoopContentRenderer,
7
+ },
28
8
  ];
29
9
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NoaWtpLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixnQkFBZ0IsR0FHakIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQVU1QixNQUFNLFVBQVUsb0JBQW9CLENBQUMsRUFDbkMsV0FBVyxHQUFHLEVBQUUsRUFDaEIsU0FBUyxHQUFHLEVBQUUsRUFDZCxTQUFTLEdBQUcsSUFBSSxNQUNlLEVBQUU7SUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFhLENBQUM7UUFDbkUsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsTUFBTSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsV0FBVyxDQUFDLEtBQUssR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7UUFDN0QsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtRQUN6RCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO1FBQ3hELGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ2hELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aEhpZ2hsaWdodGVyIH0gZnJvbSAnQGFuYWxvZ2pzL2NvbnRlbnQnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQnVuZGxlZExhbmd1YWdlIH0gZnJvbSAnc2hpa2knO1xuaW1wb3J0IHtcbiAgZGVmYXVsdEhpZ2hsaWdodGVyT3B0aW9ucyxcbiAgU0hJS0lfQ09OVEFJTkVSX09QVElPTixcbiAgU0hJS0lfSElHSExJR0hUX09QVElPTlMsXG4gIFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsXG4gIFNoaWtpSGlnaGxpZ2h0ZXIsXG4gIHR5cGUgU2hpa2lIaWdobGlnaHRlck9wdGlvbnMsXG4gIHR5cGUgU2hpa2lIaWdobGlnaHRPcHRpb25zLFxufSBmcm9tICcuL2xpYi9zaGlraS1oaWdobGlnaHRlcic7XG5cbmV4cG9ydCB7IFNoaWtpSGlnaGxpZ2h0ZXIgfTtcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoU2hpa2lIaWdobGlnaHRlck9wdGlvbnMge1xuICBoaWdobGlnaHRlcj86IFBhcnRpYWw8U2hpa2lIaWdobGlnaHRlck9wdGlvbnM+ICYge1xuICAgIGFkZGl0aW9uYWxMYW5ncz86IEJ1bmRsZWRMYW5ndWFnZVtdO1xuICB9O1xuICBoaWdobGlnaHQ/OiBTaGlraUhpZ2hsaWdodE9wdGlvbnM7XG4gIGNvbnRhaW5lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTaGlraUhpZ2hsaWdodGVyKHtcbiAgaGlnaGxpZ2h0ZXIgPSB7fSxcbiAgaGlnaGxpZ2h0ID0ge30sXG4gIGNvbnRhaW5lciA9ICclcycsXG59OiBXaXRoU2hpa2lIaWdobGlnaHRlck9wdGlvbnMgPSB7fSk6IFByb3ZpZGVyIHtcbiAgaWYgKCFoaWdobGlnaHRlci50aGVtZXMpIHtcbiAgICBpZiAoaGlnaGxpZ2h0LnRoZW1lKSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBbaGlnaGxpZ2h0LnRoZW1lXTtcbiAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50aGVtZXMgJiYgdHlwZW9mIGhpZ2hsaWdodC50aGVtZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBPYmplY3QudmFsdWVzKGhpZ2hsaWdodC50aGVtZXMpIGFzIHN0cmluZ1tdO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRlci50aGVtZXMgPSBkZWZhdWx0SGlnaGxpZ2h0ZXJPcHRpb25zLnRoZW1lcztcbiAgICB9XG4gIH1cblxuICBpZiAoIWhpZ2hsaWdodGVyLmxhbmdzKSB7XG4gICAgaGlnaGxpZ2h0ZXIubGFuZ3MgPSBkZWZhdWx0SGlnaGxpZ2h0ZXJPcHRpb25zLmxhbmdzO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodGVyLmFkZGl0aW9uYWxMYW5ncykge1xuICAgIGhpZ2hsaWdodGVyLmxhbmdzLnB1c2goLi4uaGlnaGxpZ2h0ZXIuYWRkaXRpb25hbExhbmdzKTtcbiAgICBkZWxldGUgaGlnaGxpZ2h0ZXIuYWRkaXRpb25hbExhbmdzO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB7IHByb3ZpZGU6IFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsIHVzZVZhbHVlOiBoaWdobGlnaHRlciB9LFxuICAgIHsgcHJvdmlkZTogU0hJS0lfSElHSExJR0hUX09QVElPTlMsIHVzZVZhbHVlOiBoaWdobGlnaHQgfSxcbiAgICB7IHByb3ZpZGU6IFNISUtJX0NPTlRBSU5FUl9PUFRJT04sIHVzZVZhbHVlOiBjb250YWluZXIgfSxcbiAgICB3aXRoSGlnaGxpZ2h0ZXIoeyB1c2VDbGFzczogU2hpa2lIaWdobGlnaHRlciB9KSxcbiAgXTtcbn1cbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NoaWtpLWhpZ2hsaWdodGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFzQnpFLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBcUMsRUFBRTtJQUV2QyxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsbUJBQW1CO1NBQzlCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50UmVuZGVyZXIsIE5vb3BDb250ZW50UmVuZGVyZXIgfSBmcm9tICdAYW5hbG9nanMvY29udGVudCc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBCdW5kbGVkTGFuZ3VhZ2UsXG4gIEJ1bmRsZWRUaGVtZSxcbiAgQ29kZU9wdGlvbnNNZXRhLFxuICBDb2RlT3B0aW9uc011bHRpcGxlVGhlbWVzLFxuICBDb2RlT3B0aW9uc1NpbmdsZVRoZW1lLFxuICBDb2RlVG9IYXN0T3B0aW9uc0NvbW1vbixcbn0gZnJvbSAnc2hpa2knO1xuXG5leHBvcnQgdHlwZSBTaGlraUhpZ2hsaWdodE9wdGlvbnMgPSBQYXJ0aWFsPFxuICBPbWl0PENvZGVUb0hhc3RPcHRpb25zQ29tbW9uPEJ1bmRsZWRMYW5ndWFnZT4sICdsYW5nJz5cbj4gJlxuICBDb2RlT3B0aW9uc01ldGEgJlxuICBQYXJ0aWFsPENvZGVPcHRpb25zU2luZ2xlVGhlbWU8QnVuZGxlZFRoZW1lPj4gJlxuICBQYXJ0aWFsPENvZGVPcHRpb25zTXVsdGlwbGVUaGVtZXM8QnVuZGxlZFRoZW1lPj47XG5cbmV4cG9ydCB0eXBlIFdpdGhTaGlraUhpZ2hsaWdodGVyT3B0aW9ucyA9IFNoaWtpSGlnaGxpZ2h0T3B0aW9ucyAmIHtcbiAgY29udGFpbmVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTaGlraUhpZ2hsaWdodGVyKFxuICBfb3B0czogV2l0aFNoaWtpSGlnaGxpZ2h0ZXJPcHRpb25zID0ge31cbik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENvbnRlbnRSZW5kZXJlcixcbiAgICAgIHVzZUNsYXNzOiBOb29wQ29udGVudFJlbmRlcmVyLFxuICAgIH0sXG4gIF07XG59XG4iXX0=
@@ -1,91 +1,12 @@
1
- import { MarkedContentHighlighter, withHighlighter } from '@analogjs/content';
2
- import * as i0 from '@angular/core';
3
- import { Injectable } from '@angular/core';
4
- import { markedHighlight } from 'marked-highlight';
5
- import 'prismjs';
6
- import 'prismjs/components/prism-bash';
7
- import 'prismjs/components/prism-css';
8
- import 'prismjs/components/prism-javascript';
9
- import 'prismjs/components/prism-json';
10
- import 'prismjs/components/prism-markup';
11
- import 'prismjs/components/prism-typescript';
12
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
13
- import 'prismjs/plugins/toolbar/prism-toolbar';
14
-
15
- "use strict";
16
- (function () {
17
- if (typeof Prism === 'undefined') {
18
- return;
19
- }
20
- Prism.languages.angular = Prism.languages.extend('markup', {
21
- keyword: /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\b/,
22
- operator: /\b(?:on|when)\b/,
23
- number: {
24
- pattern: /\b(minimum|after)\s+\d+(?:s|ms|)/gi,
25
- lookbehind: true,
26
- },
27
- builtin: {
28
- pattern: /\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,
29
- },
30
- function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
31
- });
32
- Prism.languages.ng = Prism.languages.angular;
33
- })();
34
-
35
- class PrismHighlighter extends MarkedContentHighlighter {
36
- augmentCodeBlock(code, lang) {
37
- const classes = lang.startsWith('diff') && Prism.languages['diff']
38
- ? `language-${lang} diff-highlight`
39
- : `language-${lang.replace('diff-', '')}`;
40
- return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
41
- }
42
- getHighlightExtension() {
43
- return markedHighlight({
44
- async: true,
45
- highlight: (code, lang) => {
46
- let diff = lang?.startsWith('diff-');
47
- lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
48
- if (diff && !Prism.languages['diff']) {
49
- diff = false;
50
- console.warn(`Notice:
51
- ---------------------------------------------------------------------------------------
52
- The \`diff\` language and plugin are not available in the provided setup.
53
- To enable it, add the following imports your \`main.ts\`:
54
- import 'prismjs/components/prism-diff';
55
- import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
56
- ---------------------------------------------------------------------------------------
57
- `);
58
- }
59
- if (!Prism.languages[lang]) {
60
- if (lang !== 'mermaid') {
61
- console.warn(`Notice:
62
- ---------------------------------------------------------------------------------------
63
- The requested language '${lang}' is not available in the provided setup.
64
- To enable it, add the following import your \`main.ts\`:
65
- import 'prismjs/components/prism-${lang}';
66
- ---------------------------------------------------------------------------------------
67
- `);
68
- }
69
- return code;
70
- }
71
- return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
72
- },
73
- });
74
- }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
76
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter }); }
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, decorators: [{
79
- type: Injectable
80
- }] });
1
+ import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
81
2
 
82
3
  function withPrismHighlighter() {
83
- return withHighlighter({ useClass: PrismHighlighter });
4
+ return [{ provide: ContentRenderer, useClass: NoopContentRenderer }];
84
5
  }
85
6
 
86
7
  /**
87
8
  * Generated bundle index. Do not edit.
88
9
  */
89
10
 
90
- export { PrismHighlighter, withPrismHighlighter };
11
+ export { withPrismHighlighter };
91
12
  //# sourceMappingURL=analogjs-content-prism-highlighter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analogjs-content-prism-highlighter.mjs","sources":["../../../../packages/content/prism-highlighter/src/lib/prism/angular.js","../../../../packages/content/prism-highlighter/src/lib/prism-highlighter.ts","../../../../packages/content/prism-highlighter/src/index.ts","../../../../packages/content/prism-highlighter/src/analogjs-content-prism-highlighter.ts"],"sourcesContent":["(function () {\n if (typeof Prism === 'undefined') {\n return;\n }\n\n Prism.languages.angular = Prism.languages.extend('markup', {\n keyword:\n /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\\b/,\n operator: /\\b(?:on|when)\\b/,\n number: {\n pattern: /\\b(minimum|after)\\s+\\d+(?:s|ms|)/gi,\n lookbehind: true,\n },\n builtin: {\n pattern:\n /\\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,\n },\n function:\n /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n });\n\n Prism.languages.ng = Prism.languages.angular;\n})();\n","import { MarkedContentHighlighter } from '@analogjs/content';\nimport { Injectable } from '@angular/core';\nimport { markedHighlight } from 'marked-highlight';\n\nimport 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';\nimport 'prismjs/plugins/toolbar/prism-toolbar';\nimport './prism/angular';\n\ndeclare const Prism: typeof import('prismjs');\n\n@Injectable()\nexport class PrismHighlighter extends MarkedContentHighlighter {\n override augmentCodeBlock(code: string, lang: string): string {\n const classes =\n lang.startsWith('diff') && Prism.languages['diff']\n ? `language-${lang} diff-highlight`\n : `language-${lang.replace('diff-', '')}`;\n return `<pre class=\"${classes}\"><code class=\"${classes}\">${code}</code></pre>`;\n }\n\n override getHighlightExtension() {\n return markedHighlight({\n async: true,\n highlight: (code: string, lang: string) => {\n let diff = lang?.startsWith('diff-');\n lang = diff ? lang.replace('diff-', '') : lang || 'typescript';\n\n if (diff && !Prism.languages['diff']) {\n diff = false;\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The \\`diff\\` language and plugin are not available in the provided setup.\n To enable it, add the following imports your \\`main.ts\\`:\n import 'prismjs/components/prism-diff';\n import 'prismjs/plugins/diff-highlight/prism-diff-highlight';\n ---------------------------------------------------------------------------------------\n `);\n }\n\n if (!Prism.languages[lang]) {\n if (lang !== 'mermaid') {\n console.warn(`Notice:\n ---------------------------------------------------------------------------------------\n The requested language '${lang}' is not available in the provided setup.\n To enable it, add the following import your \\`main.ts\\`:\n import 'prismjs/components/prism-${lang}';\n ---------------------------------------------------------------------------------------\n `);\n }\n return code;\n }\n return Prism.highlight(\n code,\n diff ? Prism.languages['diff'] : Prism.languages[lang],\n lang\n );\n },\n });\n }\n}\n","import { withHighlighter } from '@analogjs/content';\nimport { Provider } from '@angular/core';\nimport { PrismHighlighter } from './lib/prism-highlighter';\n\nexport { PrismHighlighter };\n\nexport function withPrismHighlighter(): Provider {\n return withHighlighter({ useClass: PrismHighlighter });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,CAAC,YAAA;AACC,IAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;QAChC,OAAO;KACR;AAED,IAAA,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzD,QAAA,OAAO,EACL,qEAAqE;AACvE,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EACL,qEAAqE;AACxE,SAAA;AACD,QAAA,QAAQ,EACN,mGAAmG;AACtG,KAAA,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;AAC/C,CAAC,GAAG;;ACJE,MAAO,gBAAiB,SAAQ,wBAAwB,CAAA;IACnD,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAA;AAClD,QAAA,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;cAC9C,CAAY,SAAA,EAAA,IAAI,CAAiB,eAAA,CAAA;cACjC,CAAY,SAAA,EAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAE,CAAC;AAC9C,QAAA,OAAO,eAAe,OAAO,CAAA,eAAA,EAAkB,OAAO,CAAK,EAAA,EAAA,IAAI,eAAe,CAAC;KAChF;IAEQ,qBAAqB,GAAA;AAC5B,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,SAAS,EAAE,CAAC,IAAY,EAAE,IAAY,KAAI;gBACxC,IAAI,IAAI,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrC,gBAAA,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;gBAE/D,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;oBACpC,IAAI,GAAG,KAAK,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,CAAA;;;;;;;AAOV,YAAA,CAAA,CAAC,CAAC;iBACN;gBAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AAC1B,oBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;;8BAEK,IAAI,CAAA;;yCAEO,IAAI,CAAA;;AAE9B,cAAA,CAAA,CAAC,CAAC;qBACN;AACD,oBAAA,OAAO,IAAI,CAAC;iBACb;AACD,gBAAA,OAAO,KAAK,CAAC,SAAS,CACpB,IAAI,EACJ,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EACtD,IAAI,CACL,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACJ;8GA/CU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;SCXK,oBAAoB,GAAA;IAClC,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACzD;;ACRA;;AAEG;;;;"}
1
+ {"version":3,"file":"analogjs-content-prism-highlighter.mjs","sources":["../../../../packages/content/prism-highlighter/src/index.ts","../../../../packages/content/prism-highlighter/src/analogjs-content-prism-highlighter.ts"],"sourcesContent":["import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';\nimport { Provider } from '@angular/core';\n\nexport function withPrismHighlighter(): Provider[] {\n return [{ provide: ContentRenderer, useClass: NoopContentRenderer }];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;SAGgB,oBAAoB,GAAA;IAClC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,CAAC;AACvE;;ACLA;;AAEG;;;;"}
@@ -1,87 +1,11 @@
1
- import { MarkedContentHighlighter, MERMAID_IMPORT_TOKEN, withHighlighter } from '@analogjs/content';
2
- import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, Injectable } from '@angular/core';
4
- import markedShiki from 'marked-shiki';
5
- import { getHighlighter } from 'shiki';
1
+ import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';
6
2
 
7
- const defaultHighlighterOptions = {
8
- langs: [
9
- 'json',
10
- 'ts',
11
- 'tsx',
12
- 'js',
13
- 'jsx',
14
- 'html',
15
- 'css',
16
- 'angular-html',
17
- 'angular-ts',
18
- ],
19
- themes: ['github-dark', 'github-light'],
20
- };
21
- const [SHIKI_HIGHLIGHTER_OPTIONS, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_CONTAINER_OPTION,] = [
22
- new InjectionToken('SHIKI_HIGHLIGHTER_OPTIONS'),
23
- new InjectionToken('SHIKI_HIGHLIGHT_OPTIONS'),
24
- new InjectionToken('SHIKI_CONTAINER_OPTION'),
25
- ];
26
- class ShikiHighlighter extends MarkedContentHighlighter {
27
- constructor() {
28
- super(...arguments);
29
- this.highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);
30
- this.highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);
31
- this.highlighterContainer = inject(SHIKI_CONTAINER_OPTION);
32
- this.hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {
33
- optional: true,
34
- });
35
- this.highlighter = getHighlighter(this.highlighterOptions);
36
- }
37
- getHighlightExtension() {
38
- return markedShiki({
39
- container: this.highlighterContainer,
40
- highlight: async (code, lang, props) => {
41
- if (this.hasLoadMermaid && lang === 'mermaid') {
42
- return `<pre class="mermaid">${code}</pre>`;
43
- }
44
- const { codeToHtml } = await this.highlighter;
45
- return codeToHtml(code, Object.assign({
46
- lang,
47
- // required by `transformerMeta*`
48
- meta: { __raw: props.join(' ') },
49
- themes: { dark: 'github-dark', light: 'github-light' },
50
- }, this.highlightOptions));
51
- },
52
- });
53
- }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
55
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter }); }
56
- }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, decorators: [{
58
- type: Injectable
59
- }] });
60
-
61
- function withShikiHighlighter({ highlighter = {}, highlight = {}, container = '%s', } = {}) {
62
- if (!highlighter.themes) {
63
- if (highlight.theme) {
64
- highlighter.themes = [highlight.theme];
65
- }
66
- else if (highlight.themes && typeof highlight.themes === 'object') {
67
- highlighter.themes = Object.values(highlight.themes);
68
- }
69
- else {
70
- highlighter.themes = defaultHighlighterOptions.themes;
71
- }
72
- }
73
- if (!highlighter.langs) {
74
- highlighter.langs = defaultHighlighterOptions.langs;
75
- }
76
- if (highlighter.additionalLangs) {
77
- highlighter.langs.push(...highlighter.additionalLangs);
78
- delete highlighter.additionalLangs;
79
- }
3
+ function withShikiHighlighter(_opts = {}) {
80
4
  return [
81
- { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },
82
- { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },
83
- { provide: SHIKI_CONTAINER_OPTION, useValue: container },
84
- withHighlighter({ useClass: ShikiHighlighter }),
5
+ {
6
+ provide: ContentRenderer,
7
+ useClass: NoopContentRenderer,
8
+ },
85
9
  ];
86
10
  }
87
11
 
@@ -89,5 +13,5 @@ function withShikiHighlighter({ highlighter = {}, highlight = {}, container = '%
89
13
  * Generated bundle index. Do not edit.
90
14
  */
91
15
 
92
- export { ShikiHighlighter, withShikiHighlighter };
16
+ export { withShikiHighlighter };
93
17
  //# sourceMappingURL=analogjs-content-shiki-highlighter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analogjs-content-shiki-highlighter.mjs","sources":["../../../../packages/content/shiki-highlighter/src/lib/shiki-highlighter.ts","../../../../packages/content/shiki-highlighter/src/index.ts","../../../../packages/content/shiki-highlighter/src/analogjs-content-shiki-highlighter.ts"],"sourcesContent":["import {\n MarkedContentHighlighter,\n MERMAID_IMPORT_TOKEN,\n} from '@analogjs/content';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\nimport markedShiki from 'marked-shiki';\nimport {\n type BundledLanguage,\n type BundledTheme,\n type CodeOptionsMeta,\n type CodeOptionsMultipleThemes,\n type CodeOptionsSingleTheme,\n type CodeToHastOptionsCommon,\n getHighlighter,\n} from 'shiki';\n\nexport type ShikiHighlighterOptions = Parameters<typeof getHighlighter>[0];\nexport type ShikiHighlightOptions = Partial<\n Omit<CodeToHastOptionsCommon<BundledLanguage>, 'lang'>\n> &\n CodeOptionsMeta &\n Partial<CodeOptionsSingleTheme<BundledTheme>> &\n Partial<CodeOptionsMultipleThemes<BundledTheme>>;\n\nexport const defaultHighlighterOptions = {\n langs: [\n 'json',\n 'ts',\n 'tsx',\n 'js',\n 'jsx',\n 'html',\n 'css',\n 'angular-html',\n 'angular-ts',\n ],\n themes: ['github-dark', 'github-light'],\n};\n\nexport const [\n SHIKI_HIGHLIGHTER_OPTIONS,\n SHIKI_HIGHLIGHT_OPTIONS,\n SHIKI_CONTAINER_OPTION,\n] = [\n new InjectionToken<ShikiHighlighterOptions>('SHIKI_HIGHLIGHTER_OPTIONS'),\n new InjectionToken<ShikiHighlightOptions>('SHIKI_HIGHLIGHT_OPTIONS'),\n new InjectionToken<string>('SHIKI_CONTAINER_OPTION'),\n];\n\n@Injectable()\nexport class ShikiHighlighter extends MarkedContentHighlighter {\n private readonly highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);\n private readonly highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);\n private readonly highlighterContainer = inject(SHIKI_CONTAINER_OPTION);\n private readonly hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {\n optional: true,\n });\n private readonly highlighter = getHighlighter(this.highlighterOptions);\n\n override getHighlightExtension() {\n return markedShiki({\n container: this.highlighterContainer,\n highlight: async (code, lang, props) => {\n if (this.hasLoadMermaid && lang === 'mermaid') {\n return `<pre class=\"mermaid\">${code}</pre>`;\n }\n\n const { codeToHtml } = await this.highlighter;\n return codeToHtml(\n code,\n Object.assign(\n {\n lang,\n // required by `transformerMeta*`\n meta: { __raw: props.join(' ') },\n themes: { dark: 'github-dark', light: 'github-light' },\n },\n this.highlightOptions\n )\n );\n },\n });\n }\n}\n","import { withHighlighter } from '@analogjs/content';\nimport { Provider } from '@angular/core';\nimport type { BundledLanguage } from 'shiki';\nimport {\n defaultHighlighterOptions,\n SHIKI_CONTAINER_OPTION,\n SHIKI_HIGHLIGHT_OPTIONS,\n SHIKI_HIGHLIGHTER_OPTIONS,\n ShikiHighlighter,\n type ShikiHighlighterOptions,\n type ShikiHighlightOptions,\n} from './lib/shiki-highlighter';\n\nexport { ShikiHighlighter };\n\nexport interface WithShikiHighlighterOptions {\n highlighter?: Partial<ShikiHighlighterOptions> & {\n additionalLangs?: BundledLanguage[];\n };\n highlight?: ShikiHighlightOptions;\n container?: string;\n}\n\nexport function withShikiHighlighter({\n highlighter = {},\n highlight = {},\n container = '%s',\n}: WithShikiHighlighterOptions = {}): Provider {\n if (!highlighter.themes) {\n if (highlight.theme) {\n highlighter.themes = [highlight.theme];\n } else if (highlight.themes && typeof highlight.themes === 'object') {\n highlighter.themes = Object.values(highlight.themes) as string[];\n } else {\n highlighter.themes = defaultHighlighterOptions.themes;\n }\n }\n\n if (!highlighter.langs) {\n highlighter.langs = defaultHighlighterOptions.langs;\n }\n\n if (highlighter.additionalLangs) {\n highlighter.langs.push(...highlighter.additionalLangs);\n delete highlighter.additionalLangs;\n }\n\n return [\n { provide: SHIKI_HIGHLIGHTER_OPTIONS, useValue: highlighter },\n { provide: SHIKI_HIGHLIGHT_OPTIONS, useValue: highlight },\n { provide: SHIKI_CONTAINER_OPTION, useValue: container },\n withHighlighter({ useClass: ShikiHighlighter }),\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAwBO,MAAM,yBAAyB,GAAG;AACvC,IAAA,KAAK,EAAE;QACL,MAAM;QACN,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,KAAK;QACL,MAAM;QACN,KAAK;QACL,cAAc;QACd,YAAY;AACb,KAAA;AACD,IAAA,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;CACxC,CAAC;AAEK,MAAM,CACX,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACvB,GAAG;IACF,IAAI,cAAc,CAA0B,2BAA2B,CAAC;IACxE,IAAI,cAAc,CAAwB,yBAAyB,CAAC;IACpE,IAAI,cAAc,CAAS,wBAAwB,CAAC;CACrD,CAAC;AAGI,MAAO,gBAAiB,SAAQ,wBAAwB,CAAA;AAD9D,IAAA,WAAA,GAAA;;AAEmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE;AAC7D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AA0BxE,KAAA;IAxBU,qBAAqB,GAAA;AAC5B,QAAA,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,oBAAoB;YACpC,SAAS,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,KAAK,KAAI;gBACrC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,KAAK,SAAS,EAAE;oBAC7C,OAAO,CAAA,qBAAA,EAAwB,IAAI,CAAA,MAAA,CAAQ,CAAC;iBAC7C;gBAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;AAC9C,gBAAA,OAAO,UAAU,CACf,IAAI,EACJ,MAAM,CAAC,MAAM,CACX;oBACE,IAAI;;oBAEJ,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAChC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;AACvD,iBAAA,EACD,IAAI,CAAC,gBAAgB,CACtB,CACF,CAAC;aACH;AACF,SAAA,CAAC,CAAC;KACJ;8GAhCU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;SC1BK,oBAAoB,CAAC,EACnC,WAAW,GAAG,EAAE,EAChB,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,IAAI,MACe,EAAE,EAAA;AACjC,IAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvB,QAAA,IAAI,SAAS,CAAC,KAAK,EAAE;YACnB,WAAW,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACxC;aAAM,IAAI,SAAS,CAAC,MAAM,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE;YACnE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAa,CAAC;SAClE;aAAM;AACL,YAAA,WAAW,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC;SACvD;KACF;AAED,IAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACtB,QAAA,WAAW,CAAC,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC;KACrD;AAED,IAAA,IAAI,WAAW,CAAC,eAAe,EAAE;QAC/B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QACvD,OAAO,WAAW,CAAC,eAAe,CAAC;KACpC;IAED,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC7D,QAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACzD,QAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACxD,QAAA,eAAe,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;KAChD,CAAC;AACJ;;ACrDA;;AAEG;;;;"}
1
+ {"version":3,"file":"analogjs-content-shiki-highlighter.mjs","sources":["../../../../packages/content/shiki-highlighter/src/index.ts","../../../../packages/content/shiki-highlighter/src/analogjs-content-shiki-highlighter.ts"],"sourcesContent":["import { ContentRenderer, NoopContentRenderer } from '@analogjs/content';\nimport { Provider } from '@angular/core';\nimport type {\n BundledLanguage,\n BundledTheme,\n CodeOptionsMeta,\n CodeOptionsMultipleThemes,\n CodeOptionsSingleTheme,\n CodeToHastOptionsCommon,\n} from 'shiki';\n\nexport type ShikiHighlightOptions = Partial<\n Omit<CodeToHastOptionsCommon<BundledLanguage>, 'lang'>\n> &\n CodeOptionsMeta &\n Partial<CodeOptionsSingleTheme<BundledTheme>> &\n Partial<CodeOptionsMultipleThemes<BundledTheme>>;\n\nexport type WithShikiHighlighterOptions = ShikiHighlightOptions & {\n container?: string;\n};\n\nexport function withShikiHighlighter(\n _opts: WithShikiHighlighterOptions = {}\n): Provider[] {\n return [\n {\n provide: ContentRenderer,\n useClass: NoopContentRenderer,\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAsBgB,SAAA,oBAAoB,CAClC,KAAA,GAAqC,EAAE,EAAA;IAEvC,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,QAAQ,EAAE,mBAAmB;AAC9B,SAAA;KACF,CAAC;AACJ;;AC/BA;;AAEG;;;;"}
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Directive, HostListener, InjectionToken, ɵPendingTasks as _PendingTasks, Injectable, Component, ViewEncapsulation, Input, NgZone, PLATFORM_ID, ViewContainerRef, ViewChild } from '@angular/core';
2
+ import { inject, Directive, HostListener, InjectionToken, ɵPendingTasks as _PendingTasks, Injectable, TransferState, makeStateKey, Component, ViewEncapsulation, Input, NgZone, PLATFORM_ID, ViewContainerRef, ViewChild } from '@angular/core';
3
3
  import { DOCUMENT, Location, AsyncPipe, isPlatformBrowser } from '@angular/common';
4
4
  import { Router, ActivatedRoute } from '@angular/router';
5
5
  import { isObservable, firstValueFrom, of, Observable, from } from 'rxjs';
6
6
  import { map, switchMap, tap, mergeMap, catchError } from 'rxjs/operators';
7
7
  import fm from 'front-matter';
8
- import { gfmHeadingId, getHeadingList } from 'marked-gfm-heading-id';
8
+ import { getHeadingList, gfmHeadingId } from 'marked-gfm-heading-id';
9
9
  import { marked } from 'marked';
10
10
  import { mangle } from 'marked-mangle';
11
11
  import { DomSanitizer } from '@angular/platform-browser';
@@ -71,7 +71,7 @@ const getContentFilesList = () => import.meta.glob(['/src/content/**/*.md', '/sr
71
71
  * @returns
72
72
  */
73
73
  const getContentFiles = () => import.meta.glob(['/src/content/**/*.md'], {
74
- query: '?raw',
74
+ query: '?analog-content-file=true',
75
75
  import: 'default',
76
76
  });
77
77
  const getAgxFiles = () => import.meta.glob(['/src/content/**/*.agx']);
@@ -229,6 +229,7 @@ function injectContent(param = 'slug', fallback = 'No Content Found') {
229
229
  }
230
230
  }
231
231
 
232
+ /// <reference types="vite/client" />
232
233
  class ContentRenderer {
233
234
  async render(content) {
234
235
  return content;
@@ -244,6 +245,39 @@ class ContentRenderer {
244
245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ContentRenderer, decorators: [{
245
246
  type: Injectable
246
247
  }] });
248
+ class NoopContentRenderer {
249
+ constructor() {
250
+ this.transferState = inject(TransferState);
251
+ this.contentId = 0;
252
+ }
253
+ /**
254
+ * Generates a hash from the content string
255
+ * to be used with the transfer state
256
+ */
257
+ generateHash(str) {
258
+ let hash = 0;
259
+ for (let i = 0, len = str.length; i < len; i++) {
260
+ let chr = str.charCodeAt(i);
261
+ hash = (hash << 5) - hash + chr;
262
+ hash |= 0; // Convert to 32bit integer
263
+ }
264
+ return hash;
265
+ }
266
+ async render(content) {
267
+ this.contentId = this.generateHash(content);
268
+ return content;
269
+ }
270
+ enhance() { }
271
+ getContentHeadings() {
272
+ const key = makeStateKey(`content-headings-${this.contentId}`);
273
+ if (import.meta.env.SSR === true) {
274
+ const headings = getHeadingList();
275
+ this.transferState.set(key, headings);
276
+ return headings;
277
+ }
278
+ return this.transferState.get(key, []);
279
+ }
280
+ }
247
281
 
248
282
  function injectContentFiles(filterFn) {
249
283
  const renderTaskService = inject(RenderTaskService);
@@ -333,15 +367,16 @@ class MarkdownContentRendererService {
333
367
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: MarkdownContentRendererService, decorators: [{
334
368
  type: Injectable
335
369
  }] });
370
+
371
+ const CONTENT_RENDERER_PROVIDERS = [
372
+ {
373
+ provide: ContentRenderer,
374
+ useClass: NoopContentRenderer,
375
+ },
376
+ ];
336
377
  function withMarkdownRenderer(options) {
337
378
  return [
338
- MarkedSetupService,
339
- RenderTaskService,
340
- {
341
- provide: ContentRenderer,
342
- useFactory: () => new MarkdownContentRendererService(),
343
- deps: [MarkedSetupService],
344
- },
379
+ CONTENT_RENDERER_PROVIDERS,
345
380
  options?.loadMermaid
346
381
  ? [
347
382
  {
@@ -353,7 +388,10 @@ function withMarkdownRenderer(options) {
353
388
  ];
354
389
  }
355
390
  function provideContent(...features) {
356
- return [...features];
391
+ return [
392
+ { provide: RenderTaskService, useClass: RenderTaskService },
393
+ ...features,
394
+ ];
357
395
  }
358
396
  const MERMAID_IMPORT_TOKEN = new InjectionToken('mermaid_import');
359
397
 
@@ -478,5 +516,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
478
516
  * Generated bundle index. Do not edit.
479
517
  */
480
518
 
481
- export { AnchorNavigationDirective, ContentRenderer, MERMAID_IMPORT_TOKEN, AnalogMarkdownComponent as MarkdownComponent, MarkdownContentRendererService, AnalogMarkdownRouteComponent as MarkdownRouteComponent, MarkedContentHighlighter, MarkedSetupService, injectContent, injectContentFiles, parseRawContentFile, provideContent, withHighlighter, withMarkdownRenderer };
519
+ export { AnchorNavigationDirective, ContentRenderer, MERMAID_IMPORT_TOKEN, AnalogMarkdownComponent as MarkdownComponent, MarkdownContentRendererService, AnalogMarkdownRouteComponent as MarkdownRouteComponent, MarkedContentHighlighter, MarkedSetupService, NoopContentRenderer, injectContent, injectContentFiles, parseRawContentFile, provideContent, withHighlighter, withMarkdownRenderer };
482
520
  //# sourceMappingURL=analogjs-content.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analogjs-content.mjs","sources":["../../../../packages/content/src/lib/anchor-navigation.directive.ts","../../../../packages/content/src/lib/get-content-files.ts","../../../../packages/content/src/lib/content-files-list-token.ts","../../../../packages/content/src/lib/content-files-token.ts","../../../../packages/content/src/lib/parse-raw-content-file.ts","../../../../packages/content/src/lib/utils/zone-wait-for.ts","../../../../packages/content/src/lib/render-task.service.ts","../../../../packages/content/src/lib/content.ts","../../../../packages/content/src/lib/content-renderer.ts","../../../../packages/content/src/lib/inject-content-files.ts","../../../../packages/content/src/lib/marked-content-highlighter.ts","../../../../packages/content/src/lib/marked-setup.service.ts","../../../../packages/content/src/lib/markdown-content-renderer.service.ts","../../../../packages/content/src/lib/markdown-route.component.ts","../../../../packages/content/src/lib/markdown.component.ts","../../../../packages/content/src/analogjs-content.ts"],"sourcesContent":["import { Directive, HostListener, inject } from '@angular/core';\nimport { DOCUMENT, Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Directive({\n selector: '[analogAnchorNavigation]',\n standalone: true,\n})\nexport class AnchorNavigationDirective {\n private readonly document = inject(DOCUMENT);\n private readonly location = inject(Location);\n private readonly router = inject(Router);\n\n @HostListener('click', ['$event.target'])\n handleNavigation(element: HTMLElement): boolean {\n if (\n element instanceof HTMLAnchorElement &&\n isInternalUrl(element, this.document) &&\n hasTargetSelf(element) &&\n !hasDownloadAttribute(element)\n ) {\n const { pathname, search, hash } = element;\n const url = this.location.normalize(`${pathname}${search}${hash}`);\n this.router.navigateByUrl(url);\n\n return false;\n }\n\n return true;\n }\n}\n\nfunction hasDownloadAttribute(anchorElement: HTMLAnchorElement): boolean {\n return anchorElement.getAttribute('download') !== null;\n}\n\nfunction hasTargetSelf(anchorElement: HTMLAnchorElement): boolean {\n return !anchorElement.target || anchorElement.target === '_self';\n}\n\nfunction isInternalUrl(\n anchorElement: HTMLAnchorElement,\n document: Document\n): boolean {\n return (\n anchorElement.host === document.location.host &&\n anchorElement.protocol === document.location.protocol\n );\n}\n","/**\n * Returns the list of content files by filename with ?analog-content-list=true.\n * We use the query param to transform the return into an array of\n * just front matter attributes.\n *\n * @returns\n */\nexport const getContentFilesList = () =>\n import.meta.glob<Record<string, any>>(\n ['/src/content/**/*.md', '/src/content/**/*.agx'],\n {\n eager: true,\n import: 'default',\n query: { 'analog-content-list': true },\n }\n );\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = () =>\n import.meta.glob(['/src/content/**/*.md'], {\n query: '?raw',\n import: 'default',\n });\n\nexport const getAgxFiles = () => import.meta.glob(['/src/content/**/*.agx']);\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n const parts = filename.match(/^(\\\\|\\/)(.+(\\\\|\\/))*(.+)\\.(.+)$/);\n return parts?.length ? parts[4] : '';\n}\n\nexport const CONTENT_FILES_LIST_TOKEN = new InjectionToken<ContentFile[]>(\n '@analogjs/content Content Files List',\n {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFilesList();\n\n return Object.keys(contentFiles).map((filename) => {\n const attributes = contentFiles[filename];\n const slug = attributes['slug'];\n\n return {\n filename,\n attributes,\n slug: slug ? encodeURI(slug) : encodeURI(getSlug(filename)),\n };\n });\n },\n }\n);\n","import { InjectionToken, inject } from '@angular/core';\n\nimport { getAgxFiles, getContentFiles } from './get-content-files';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport const CONTENT_FILES_TOKEN = new InjectionToken<\n Record<string, () => Promise<string>>\n>('@analogjs/content Content Files', {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFiles();\n const agxFiles = getAgxFiles();\n const allFiles = { ...contentFiles, ...agxFiles };\n const contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n const lookup: Record<string, string> = {};\n contentFilesList.forEach((item) => {\n const fileParts = item.filename.split('/');\n const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n const fileNameParts = fileParts[fileParts.length - 1].split('.');\n lookup[item.filename] = `${filePath}/${item.slug}.${\n fileNameParts[fileNameParts.length - 1]\n }`;\n });\n\n const objectUsingSlugAttribute: Record<string, () => Promise<string>> = {};\n Object.entries(allFiles).forEach((entry) => {\n const filename = entry[0];\n const value = entry[1];\n\n const newFilename = lookup[filename];\n if (newFilename !== undefined) {\n objectUsingSlugAttribute[newFilename] = value as () => Promise<string>;\n }\n });\n\n return objectUsingSlugAttribute;\n },\n});\n","import fm from 'front-matter';\n\nexport function parseRawContentFile<Attributes extends Record<string, any>>(\n rawContentFile: string\n): { content: string; attributes: Attributes } {\n const { body, attributes } = fm<Attributes>(rawContentFile);\n return { content: body, attributes };\n}\n","import { firstValueFrom, isObservable, Observable } from 'rxjs';\n\ndeclare const Zone: any;\n\nexport async function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T> {\n if (isObservable(prom)) {\n prom = firstValueFrom(prom);\n }\n const macroTask = Zone.current.scheduleMacroTask(\n `AnalogContentResolve-${Math.random()}`,\n () => {},\n {},\n () => {}\n );\n return prom.then((p: T) => {\n macroTask.invoke();\n return p;\n });\n}\n","import {\n Injectable,\n inject,\n ɵPendingTasks as PendingTasks,\n} from '@angular/core';\n\n@Injectable()\nexport class RenderTaskService {\n #pendingTasks = inject(PendingTasks);\n\n addRenderTask() {\n return this.#pendingTasks.add();\n }\n\n clearRenderTask(id: number) {\n this.#pendingTasks.remove(id);\n }\n}\n","/// <reference types=\"vite/client\" />\n\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { parseRawContentFile } from './parse-raw-content-file';\nimport { waitFor } from './utils/zone-wait-for';\nimport { RenderTaskService } from './render-task.service';\n\nfunction getContentFile<\n Attributes extends Record<string, any> = Record<string, any>\n>(\n contentFiles: Record<string, () => Promise<string>>,\n prefix: string,\n slug: string,\n fallback: string\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n const filePath = `/src/content/${prefix}${slug}`;\n const contentFile =\n contentFiles[`${filePath}.md`] ?? contentFiles[`${filePath}.agx`];\n if (!contentFile) {\n return of({\n filename: filePath,\n attributes: {},\n slug: '',\n content: fallback,\n });\n }\n\n return new Observable<string | { default: any; metadata: any }>(\n (observer) => {\n const contentResolver = contentFile();\n\n if (import.meta.env.SSR === true) {\n waitFor(contentResolver).then((content) => {\n observer.next(content);\n observer.complete();\n });\n } else {\n contentResolver.then((content) => {\n observer.next(content);\n observer.complete();\n });\n }\n }\n ).pipe(\n map((contentFile) => {\n if (typeof contentFile === 'string') {\n const { content, attributes } =\n parseRawContentFile<Attributes>(contentFile);\n\n return {\n filename: filePath,\n slug,\n attributes,\n content,\n };\n }\n return {\n filename: filePath,\n slug,\n attributes: contentFile.metadata,\n content: contentFile.default,\n };\n })\n );\n}\n\n/**\n * Retrieves the static content using the provided param and/or prefix.\n *\n * @param param route parameter (default: 'slug')\n * @param fallback fallback text if content file is not found (default: 'No Content Found')\n */\nexport function injectContent<\n Attributes extends Record<string, any> = Record<string, any>\n>(\n param:\n | string\n | {\n param: string;\n subdirectory: string;\n }\n | {\n customFilename: string;\n } = 'slug',\n fallback = 'No Content Found'\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n const contentFiles = inject(CONTENT_FILES_TOKEN);\n const renderTaskService = inject(RenderTaskService);\n const task = renderTaskService.addRenderTask();\n\n if (typeof param === 'string' || 'param' in param) {\n const prefix = typeof param === 'string' ? '' : `${param.subdirectory}/`;\n const route = inject(ActivatedRoute);\n const paramKey = typeof param === 'string' ? param : param.param;\n return route.paramMap.pipe(\n map((params) => params.get(paramKey)),\n switchMap((slug) => {\n if (slug) {\n return getContentFile<Attributes>(\n contentFiles,\n prefix,\n slug,\n fallback\n );\n }\n return of({\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n });\n }),\n tap(() => renderTaskService.clearRenderTask(task))\n );\n } else {\n return getContentFile<Attributes>(\n contentFiles,\n '',\n param.customFilename,\n fallback\n ).pipe(tap(() => renderTaskService.clearRenderTask(task)));\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type TableOfContentItem = {\n id: string;\n level: number; // starts at 1\n text: string;\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n async render(content: string): Promise<string> {\n return content;\n }\n\n getContentHeadings(): Array<TableOfContentItem> {\n return [];\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n","import { ContentFile } from './content-file';\nimport { inject } from '@angular/core';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\nimport { RenderTaskService } from './render-task.service';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes>\n): ContentFile<Attributes>[] {\n const renderTaskService = inject(RenderTaskService);\n const task = renderTaskService.addRenderTask();\n const allContentFiles = inject(\n CONTENT_FILES_LIST_TOKEN\n ) as ContentFile<Attributes>[];\n renderTaskService.clearRenderTask(task);\n\n if (filterFn) {\n const filteredContentFiles = allContentFiles.filter(filterFn);\n\n return filteredContentFiles;\n }\n\n return allContentFiles;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n value: ContentFile<T>,\n index: number,\n array: ContentFile<T>[]\n) => boolean;\n","import {\n AbstractType,\n Injectable,\n Provider,\n ProviderToken,\n Type,\n} from '@angular/core';\n\nexport interface MarkedContentHighlighter {\n augmentCodeBlock?(code: string, lang: string): string;\n}\n\n@Injectable()\nexport abstract class MarkedContentHighlighter {\n abstract getHighlightExtension(): import('marked').marked.MarkedExtension;\n}\n\nexport function withHighlighter(\n provider: (\n | { useValue: MarkedContentHighlighter }\n | {\n useClass:\n | Type<MarkedContentHighlighter>\n | AbstractType<MarkedContentHighlighter>;\n }\n | { useFactory: (...deps: any[]) => MarkedContentHighlighter }\n ) & { deps?: ProviderToken<any>[] }\n): Provider {\n return { provide: MarkedContentHighlighter, ...provider } as Provider;\n}\n","/**\n * Credit goes to Scully for original implementation\n * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts\n */\nimport { inject, Injectable } from '@angular/core';\nimport { marked } from 'marked';\nimport { gfmHeadingId } from 'marked-gfm-heading-id';\nimport { mangle } from 'marked-mangle';\nimport { MarkedContentHighlighter } from './marked-content-highlighter';\n\n@Injectable()\nexport class MarkedSetupService {\n private readonly marked: typeof marked;\n private readonly highlighter = inject(MarkedContentHighlighter, {\n optional: true,\n });\n\n constructor() {\n const renderer = new marked.Renderer();\n renderer.code = (code: string, lang: string) => {\n // Let's do a language based detection like on GitHub\n // So we can still have non-interpreted mermaid code\n if (lang === 'mermaid') {\n return '<pre class=\"mermaid\">' + code + '</pre>';\n }\n\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n\n if (this.highlighter?.augmentCodeBlock) {\n return this.highlighter?.augmentCodeBlock(code, lang);\n }\n\n return `<pre class=\"language-${lang}\"><code class=\"language-${lang}\">${code}</code></pre>`;\n };\n\n const extensions = [gfmHeadingId(), mangle()];\n\n if (this.highlighter) {\n extensions.push(this.highlighter.getHighlightExtension());\n }\n\n marked.use(...extensions, {\n renderer,\n pedantic: false,\n gfm: true,\n breaks: false,\n });\n\n this.marked = marked;\n }\n\n getMarkedInstance(): typeof marked {\n return this.marked;\n }\n}\n","import { inject, Injectable, InjectionToken, Provider } from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nimport { ContentRenderer, TableOfContentItem } from './content-renderer';\nimport { MarkedSetupService } from './marked-setup.service';\nimport { RenderTaskService } from './render-task.service';\n\n@Injectable()\nexport class MarkdownContentRendererService implements ContentRenderer {\n #marked = inject(MarkedSetupService, { self: true });\n\n async render(content: string): Promise<string> {\n return this.#marked.getMarkedInstance().parse(content);\n }\n\n /**\n * The method is meant to be called after `render()`\n */\n getContentHeadings(): TableOfContentItem[] {\n return getHeadingList();\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n\nexport interface MarkdownRendererOptions {\n loadMermaid?: () => Promise<typeof import('mermaid')>;\n}\n\nexport function withMarkdownRenderer(\n options?: MarkdownRendererOptions\n): Provider {\n return [\n MarkedSetupService,\n RenderTaskService,\n {\n provide: ContentRenderer,\n useFactory: () => new MarkdownContentRendererService(),\n deps: [MarkedSetupService],\n },\n options?.loadMermaid\n ? [\n {\n provide: MERMAID_IMPORT_TOKEN,\n useFactory: options.loadMermaid,\n },\n ]\n : [],\n ];\n}\n\nexport function provideContent(...features: Provider[]) {\n return [...features];\n}\n\nexport const MERMAID_IMPORT_TOKEN = new InjectionToken<\n Promise<typeof import('mermaid')>\n>('mermaid_import');\n","import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n inject,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ContentRenderer } from './content-renderer';\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\n\n@Component({\n selector: 'analog-markdown-route',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content\" [class]=\"classes\"></div>`,\n})\nexport default class AnalogMarkdownRouteComponent implements AfterViewChecked {\n private sanitizer = inject(DomSanitizer);\n private route = inject(ActivatedRoute);\n contentRenderer = inject(ContentRenderer);\n\n protected content: SafeHtml = this.sanitizer.bypassSecurityTrustHtml(\n this.route.snapshot.data['renderedAnalogContent']\n );\n\n @Input() classes = 'analog-markdown-route';\n\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n }\n}\n","import { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n PLATFORM_ID,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, from, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\nimport { ContentRenderer } from './content-renderer';\nimport { MERMAID_IMPORT_TOKEN } from './markdown-content-renderer.service';\n\n@Component({\n selector: 'analog-markdown',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div\n #container\n [innerHTML]=\"content$ | async\"\n [class]=\"classes\"\n ></div>`,\n})\nexport default class AnalogMarkdownComponent\n implements OnInit, OnChanges, AfterViewChecked\n{\n private sanitizer = inject(DomSanitizer);\n private route = inject(ActivatedRoute);\n private zone = inject(NgZone);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly mermaidImport = inject(MERMAID_IMPORT_TOKEN, {\n optional: true,\n });\n private mermaid: typeof import('mermaid') | undefined;\n\n public content$: Observable<SafeHtml> = this.getContentSource();\n\n @Input() content!: string | object | undefined | null;\n @Input() classes = 'analog-markdown';\n\n @ViewChild('container', { static: true, read: ViewContainerRef })\n container!: ViewContainerRef;\n\n contentRenderer = inject(ContentRenderer);\n\n constructor() {\n if (isPlatformBrowser(this.platformId) && this.mermaidImport) {\n // Mermaid can only be loaded on client side\n this.loadMermaid(this.mermaidImport);\n }\n }\n\n ngOnInit(): void {\n this.updateContent();\n }\n\n ngOnChanges(): void {\n this.updateContent();\n }\n\n updateContent() {\n if (this.content && typeof this.content !== 'string') {\n this.container.clear();\n const componentRef = this.container.createComponent(this.content as any);\n componentRef.changeDetectorRef.detectChanges();\n } else {\n this.content$ = this.getContentSource();\n }\n }\n\n getContentSource() {\n return this.route.data.pipe(\n map<Data, string>((data) => this.content ?? data['_analogContent']),\n mergeMap((contentString) => this.renderContent(contentString)),\n map((content) => this.sanitizer.bypassSecurityTrustHtml(content)),\n catchError((e) => of(`There was an error ${e}`))\n );\n }\n\n async renderContent(content: string): Promise<string> {\n return this.contentRenderer.render(content);\n }\n\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n this.zone.runOutsideAngular(() => this.mermaid?.default.run());\n }\n\n private loadMermaid(mermaidImport: Promise<typeof import('mermaid')>) {\n this.zone.runOutsideAngular(() =>\n // Wrap into an observable to avoid redundant initialization once\n // the markdown component is destroyed before the promise is resolved.\n from(mermaidImport)\n .pipe(takeUntilDestroyed())\n .subscribe((mermaid) => {\n this.mermaid = mermaid;\n this.mermaid.default.initialize({ startOnLoad: false });\n // Explicitly running mermaid as ngAfterViewChecked\n // has probably already been called\n this.mermaid?.default.run();\n })\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PendingTasks","i1.AnchorNavigationDirective"],"mappings":";;;;;;;;;;;;;MAQa,yBAAyB,CAAA;AAJtC,IAAA,WAAA,GAAA;AAKmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAmB1C,KAAA;AAhBC,IAAA,gBAAgB,CAAC,OAAoB,EAAA;QACnC,IACE,OAAO,YAAY,iBAAiB;AACpC,YAAA,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YACrC,aAAa,CAAC,OAAO,CAAC;AACtB,YAAA,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAC9B;YACA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAC3C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAG,EAAA,QAAQ,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAE/B,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,OAAO,IAAI,CAAC;KACb;8GArBU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;8BAOC,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAA;;AAmB1C,SAAS,oBAAoB,CAAC,aAAgC,EAAA;IAC5D,OAAO,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,aAAa,CAAC,aAAgC,EAAA;IACrD,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CACpB,aAAgC,EAChC,QAAkB,EAAA;IAElB,QACE,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC7C,aAAa,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EACrD;AACJ;;AChDA;;;;;;AAMG;AACI,MAAM,mBAAmB,GAAG,MACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CACd,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,EACjD;AACE,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE;AACvC,CAAA,CACF,CAAC;AAEJ;;;;AAIG;AACI,MAAM,eAAe,GAAG,MAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE;AACzC,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,MAAM,EAAE,SAAS;AAClB,CAAA,CAAC,CAAC;AAEE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAAC,CAAC;;ACxB5E,SAAS,OAAO,CAAC,QAAgB,EAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAChE,IAAA,OAAO,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACvC,CAAC;AAEM,MAAM,wBAAwB,GAAG,IAAI,cAAc,CACxD,sCAAsC,EACtC;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,GAAA;AACL,QAAA,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;AAE3C,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAChD,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAEhC,OAAO;gBACL,QAAQ;gBACR,UAAU;AACV,gBAAA,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aAC5D,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AACF,CAAA,CACF;;ACvBM,MAAM,mBAAmB,GAAG,IAAI,cAAc,CAEnD,iCAAiC,EAAE;AACnC,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,GAAA;AACL,QAAA,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AACvC,QAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClD,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAE1D,MAAM,MAAM,GAA2B,EAAE,CAAC;AAC1C,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAC9C,CAAA,EAAA,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CACxC,CAAA,CAAE,CAAC;AACL,SAAC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAA0C,EAAE,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACzC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvB,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,YAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,gBAAA,wBAAwB,CAAC,WAAW,CAAC,GAAG,KAA8B,CAAC;aACxE;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,wBAAwB,CAAC;KACjC;AACF,CAAA,CAAC;;ACpCI,SAAU,mBAAmB,CACjC,cAAsB,EAAA;IAEtB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAa,cAAc,CAAC,CAAC;AAC5D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACvC;;ACHO,eAAe,OAAO,CAAI,IAAgC,EAAA;AAC/D,IAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACtB,QAAA,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;KAC7B;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC9C,CAAA,qBAAA,EAAwB,IAAI,CAAC,MAAM,EAAE,CAAE,CAAA,EACvC,MAAO,GAAC,EACR,EAAE,EACF,MAAK,GAAG,CACT,CAAC;AACF,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAI,KAAI;QACxB,SAAS,CAAC,MAAM,EAAE,CAAC;AACnB,QAAA,OAAO,CAAC,CAAC;AACX,KAAC,CAAC,CAAC;AACL;;MCXa,iBAAiB,CAAA;AAC5B,IAAA,aAAa,GAAG,MAAM,CAACA,aAAY,CAAC,CAAC;IAErC,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;KACjC;AAED,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC/B;8GATU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA,EAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;ACNX;AAaA,SAAS,cAAc,CAGrB,YAAmD,EACnD,MAAc,EACd,IAAY,EACZ,QAAgB,EAAA;AAEhB,IAAA,MAAM,QAAQ,GAAG,CAAA,aAAA,EAAgB,MAAM,CAAG,EAAA,IAAI,EAAE,CAAC;AACjD,IAAA,MAAM,WAAW,GACf,YAAY,CAAC,GAAG,QAAQ,CAAA,GAAA,CAAK,CAAC,IAAI,YAAY,CAAC,CAAA,EAAG,QAAQ,CAAA,IAAA,CAAM,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,OAAO,EAAE,CAAC;AACR,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,IAAI,UAAU,CACnB,CAAC,QAAQ,KAAI;AACX,QAAA,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;QAEtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE;YAChC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACxC,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACtB,aAAC,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AAC/B,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACtB,aAAC,CAAC,CAAC;SACJ;KACF,CACF,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,WAAW,KAAI;AAClB,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACnC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAC3B,mBAAmB,CAAa,WAAW,CAAC,CAAC;YAE/C,OAAO;AACL,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,IAAI;gBACJ,UAAU;gBACV,OAAO;aACR,CAAC;SACH;QACD,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ;YAClB,IAAI;YACJ,UAAU,EAAE,WAAW,CAAC,QAAQ;YAChC,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;AAKG;AACG,SAAU,aAAa,CAG3B,KAAA,GAQQ,MAAM,EACd,QAAQ,GAAG,kBAAkB,EAAA;AAE7B,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACjD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACpD,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;IAE/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE;AACjD,QAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAA,EAAG,KAAK,CAAC,YAAY,GAAG,CAAC;AACzE,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACjE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CACxB,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EACrC,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,IAAI,IAAI,EAAE;gBACR,OAAO,cAAc,CACnB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,QAAQ,CACT,CAAC;aACH;AACD,YAAA,OAAO,EAAE,CAAC;AACR,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,EACF,GAAG,CAAC,MAAM,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CACnD,CAAC;KACH;SAAM;AACL,QAAA,OAAO,cAAc,CACnB,YAAY,EACZ,EAAE,EACF,KAAK,CAAC,cAAc,EACpB,QAAQ,CACT,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5D;AACH;;MCvHsB,eAAe,CAAA;IACnC,MAAM,MAAM,CAAC,OAAe,EAAA;AAC1B,QAAA,OAAO,OAAO,CAAC;KAChB;IAED,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE,CAAC;KACX;;AAGD,IAAA,OAAO,MAAK;8GAVQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;ACHL,SAAU,kBAAkB,CAChC,QAAuD,EAAA;AAEvD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACpD,IAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC;AAC/C,IAAA,MAAM,eAAe,GAAG,MAAM,CAC5B,wBAAwB,CACI,CAAC;AAC/B,IAAA,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,QAAQ,EAAE;QACZ,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE9D,QAAA,OAAO,oBAAoB,CAAC;KAC7B;AAED,IAAA,OAAO,eAAe,CAAC;AACzB;;MCTsB,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA,EAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;;AAKL,SAAU,eAAe,CAC7B,QAQmC,EAAA;IAEnC,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,QAAQ,EAAc,CAAC;AACxE;;AC7BA;;;AAGG;MAQU,kBAAkB,CAAA;AAM7B,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,EAAE;AAC9D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AAGD,QAAA,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,KAAI;;;AAG7C,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,gBAAA,OAAO,uBAAuB,GAAG,IAAI,GAAG,QAAQ,CAAC;aAClD;YAED,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,aAAa,GAAG,IAAI,GAAG,eAAe,CAAC;aAC/C;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;gBACtC,OAAO,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACvD;AAED,YAAA,OAAO,wBAAwB,IAAI,CAAA,wBAAA,EAA2B,IAAI,CAAK,EAAA,EAAA,IAAI,eAAe,CAAC;AAC7F,SAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE9C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC;SAC3D;AAED,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE;YACxB,QAAQ;AACR,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;8GA5CU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;MCFE,8BAA8B,CAAA;IACzC,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,MAAM,MAAM,CAAC,OAAe,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACxD;AAED;;AAEG;IACH,kBAAkB,GAAA;QAChB,OAAO,cAAc,EAAE,CAAC;KACzB;;AAGD,IAAA,OAAO,MAAK;8GAfD,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAA9B,8BAA8B,EAAA,CAAA,CAAA,EAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;;AAuBL,SAAU,oBAAoB,CAClC,OAAiC,EAAA;IAEjC,OAAO;QACL,kBAAkB;QAClB,iBAAiB;AACjB,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,MAAM,IAAI,8BAA8B,EAAE;YACtD,IAAI,EAAE,CAAC,kBAAkB,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,EAAE,WAAW;AAClB,cAAE;AACE,gBAAA;AACE,oBAAA,OAAO,EAAE,oBAAoB;oBAC7B,UAAU,EAAE,OAAO,CAAC,WAAW;AAChC,iBAAA;AACF,aAAA;AACH,cAAE,EAAE;KACP,CAAC;AACJ,CAAC;AAEe,SAAA,cAAc,CAAC,GAAG,QAAoB,EAAA;AACpD,IAAA,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC;MAEY,oBAAoB,GAAG,IAAI,cAAc,CAEpD,gBAAgB;;ACnCJ,MAAO,4BAA4B,CAAA;AATjD,IAAA,WAAA,GAAA;AAUU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAClD,CAAC;QAEO,IAAO,CAAA,OAAA,GAAG,uBAAuB,CAAC;AAK5C,KAAA;IAHC,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;KAChC;8GAbkB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,6KAFrC,CAAqD,mDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAE5C,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAThD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,cAAc,EAAE,CAAC,yBAAyB,CAAC;AAC3C,oBAAA,mBAAmB,EAAE,IAAI;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAqD,mDAAA,CAAA;AAChE,iBAAA,CAAA;8BAUU,OAAO,EAAA,CAAA;sBAAf,KAAK;;;ACKM,MAAO,uBAAuB,CAAA;AAsB1C,IAAA,WAAA,GAAA;AAnBQ,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACb,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,EAAE;AAC5D,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;AAGI,QAAA,IAAA,CAAA,QAAQ,GAAyB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAGvD,IAAO,CAAA,OAAA,GAAG,iBAAiB,CAAC;AAKrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAGxC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;;AAE5D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACtC;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,aAAa,GAAA;QACX,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,OAAc,CAAC,CAAC;AACzE,YAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SAChD;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzC;KACF;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACzB,GAAG,CAAe,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EACnE,QAAQ,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAC9D,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,EACjE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,sBAAsB,CAAC,CAAA,CAAE,CAAC,CAAC,CACjD,CAAC;KACH;IAED,MAAM,aAAa,CAAC,OAAe,EAAA;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC7C;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KAChE;AAEO,IAAA,WAAW,CAAC,aAAgD,EAAA;AAClE,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;QAG1B,IAAI,CAAC,aAAa,CAAC;aAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAGxD,YAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7B,CAAC,CACL,CAAC;KACH;8GA/EkB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAiBI,gBAAgB,EAvBpD,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIF,SAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EARE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAUA,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAb3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,cAAc,EAAE,CAAC,yBAAyB,CAAC;AAC3C,oBAAA,mBAAmB,EAAE,IAAI;oBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAA;;;;AAIF,SAAA,CAAA;AACT,iBAAA,CAAA;wDAeU,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;;;ACtDlE;;AAEG;;;;"}
1
+ {"version":3,"file":"analogjs-content.mjs","sources":["../../../../packages/content/src/lib/anchor-navigation.directive.ts","../../../../packages/content/src/lib/get-content-files.ts","../../../../packages/content/src/lib/content-files-list-token.ts","../../../../packages/content/src/lib/content-files-token.ts","../../../../packages/content/src/lib/parse-raw-content-file.ts","../../../../packages/content/src/lib/utils/zone-wait-for.ts","../../../../packages/content/src/lib/render-task.service.ts","../../../../packages/content/src/lib/content.ts","../../../../packages/content/src/lib/content-renderer.ts","../../../../packages/content/src/lib/inject-content-files.ts","../../../../packages/content/src/lib/marked-content-highlighter.ts","../../../../packages/content/src/lib/marked-setup.service.ts","../../../../packages/content/src/lib/markdown-content-renderer.service.ts","../../../../packages/content/src/lib/provide-content.ts","../../../../packages/content/src/lib/markdown-route.component.ts","../../../../packages/content/src/lib/markdown.component.ts","../../../../packages/content/src/analogjs-content.ts"],"sourcesContent":["import { Directive, HostListener, inject } from '@angular/core';\nimport { DOCUMENT, Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n@Directive({\n selector: '[analogAnchorNavigation]',\n standalone: true,\n})\nexport class AnchorNavigationDirective {\n private readonly document = inject(DOCUMENT);\n private readonly location = inject(Location);\n private readonly router = inject(Router);\n\n @HostListener('click', ['$event.target'])\n handleNavigation(element: HTMLElement): boolean {\n if (\n element instanceof HTMLAnchorElement &&\n isInternalUrl(element, this.document) &&\n hasTargetSelf(element) &&\n !hasDownloadAttribute(element)\n ) {\n const { pathname, search, hash } = element;\n const url = this.location.normalize(`${pathname}${search}${hash}`);\n this.router.navigateByUrl(url);\n\n return false;\n }\n\n return true;\n }\n}\n\nfunction hasDownloadAttribute(anchorElement: HTMLAnchorElement): boolean {\n return anchorElement.getAttribute('download') !== null;\n}\n\nfunction hasTargetSelf(anchorElement: HTMLAnchorElement): boolean {\n return !anchorElement.target || anchorElement.target === '_self';\n}\n\nfunction isInternalUrl(\n anchorElement: HTMLAnchorElement,\n document: Document\n): boolean {\n return (\n anchorElement.host === document.location.host &&\n anchorElement.protocol === document.location.protocol\n );\n}\n","/**\n * Returns the list of content files by filename with ?analog-content-list=true.\n * We use the query param to transform the return into an array of\n * just front matter attributes.\n *\n * @returns\n */\nexport const getContentFilesList = () =>\n import.meta.glob<Record<string, any>>(\n ['/src/content/**/*.md', '/src/content/**/*.agx'],\n {\n eager: true,\n import: 'default',\n query: { 'analog-content-list': true },\n }\n );\n\n/**\n * Returns the lazy loaded content files for lookups.\n *\n * @returns\n */\nexport const getContentFiles = () =>\n import.meta.glob(['/src/content/**/*.md'], {\n query: '?analog-content-file=true',\n import: 'default',\n });\n\nexport const getAgxFiles = () => import.meta.glob(['/src/content/**/*.agx']);\n","import { InjectionToken } from '@angular/core';\nimport { ContentFile } from './content-file';\nimport { getContentFilesList } from './get-content-files';\n\nfunction getSlug(filename: string) {\n const parts = filename.match(/^(\\\\|\\/)(.+(\\\\|\\/))*(.+)\\.(.+)$/);\n return parts?.length ? parts[4] : '';\n}\n\nexport const CONTENT_FILES_LIST_TOKEN = new InjectionToken<ContentFile[]>(\n '@analogjs/content Content Files List',\n {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFilesList();\n\n return Object.keys(contentFiles).map((filename) => {\n const attributes = contentFiles[filename];\n const slug = attributes['slug'];\n\n return {\n filename,\n attributes,\n slug: slug ? encodeURI(slug) : encodeURI(getSlug(filename)),\n };\n });\n },\n }\n);\n","import { InjectionToken, inject } from '@angular/core';\n\nimport { getAgxFiles, getContentFiles } from './get-content-files';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\n\nexport const CONTENT_FILES_TOKEN = new InjectionToken<\n Record<string, () => Promise<string>>\n>('@analogjs/content Content Files', {\n providedIn: 'root',\n factory() {\n const contentFiles = getContentFiles();\n const agxFiles = getAgxFiles();\n const allFiles = { ...contentFiles, ...agxFiles };\n const contentFilesList = inject(CONTENT_FILES_LIST_TOKEN);\n\n const lookup: Record<string, string> = {};\n contentFilesList.forEach((item) => {\n const fileParts = item.filename.split('/');\n const filePath = fileParts.slice(0, fileParts.length - 1).join('/');\n const fileNameParts = fileParts[fileParts.length - 1].split('.');\n lookup[item.filename] = `${filePath}/${item.slug}.${\n fileNameParts[fileNameParts.length - 1]\n }`;\n });\n\n const objectUsingSlugAttribute: Record<string, () => Promise<string>> = {};\n Object.entries(allFiles).forEach((entry) => {\n const filename = entry[0];\n const value = entry[1];\n\n const newFilename = lookup[filename];\n if (newFilename !== undefined) {\n objectUsingSlugAttribute[newFilename] = value as () => Promise<string>;\n }\n });\n\n return objectUsingSlugAttribute;\n },\n});\n","import fm from 'front-matter';\n\nexport function parseRawContentFile<Attributes extends Record<string, any>>(\n rawContentFile: string\n): { content: string; attributes: Attributes } {\n const { body, attributes } = fm<Attributes>(rawContentFile);\n return { content: body, attributes };\n}\n","import { firstValueFrom, isObservable, Observable } from 'rxjs';\n\ndeclare const Zone: any;\n\nexport async function waitFor<T>(prom: Promise<T> | Observable<T>): Promise<T> {\n if (isObservable(prom)) {\n prom = firstValueFrom(prom);\n }\n const macroTask = Zone.current.scheduleMacroTask(\n `AnalogContentResolve-${Math.random()}`,\n () => {},\n {},\n () => {}\n );\n return prom.then((p: T) => {\n macroTask.invoke();\n return p;\n });\n}\n","import {\n Injectable,\n inject,\n ɵPendingTasks as PendingTasks,\n} from '@angular/core';\n\n@Injectable()\nexport class RenderTaskService {\n #pendingTasks = inject(PendingTasks);\n\n addRenderTask() {\n return this.#pendingTasks.add();\n }\n\n clearRenderTask(id: number) {\n this.#pendingTasks.remove(id);\n }\n}\n","/// <reference types=\"vite/client\" />\n\nimport { inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\n\nimport { ContentFile } from './content-file';\nimport { CONTENT_FILES_TOKEN } from './content-files-token';\nimport { parseRawContentFile } from './parse-raw-content-file';\nimport { waitFor } from './utils/zone-wait-for';\nimport { RenderTaskService } from './render-task.service';\n\nfunction getContentFile<\n Attributes extends Record<string, any> = Record<string, any>\n>(\n contentFiles: Record<string, () => Promise<string>>,\n prefix: string,\n slug: string,\n fallback: string\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n const filePath = `/src/content/${prefix}${slug}`;\n const contentFile =\n contentFiles[`${filePath}.md`] ?? contentFiles[`${filePath}.agx`];\n if (!contentFile) {\n return of({\n filename: filePath,\n attributes: {},\n slug: '',\n content: fallback,\n });\n }\n\n return new Observable<string | { default: any; metadata: any }>(\n (observer) => {\n const contentResolver = contentFile();\n\n if (import.meta.env.SSR === true) {\n waitFor(contentResolver).then((content) => {\n observer.next(content);\n observer.complete();\n });\n } else {\n contentResolver.then((content) => {\n observer.next(content);\n observer.complete();\n });\n }\n }\n ).pipe(\n map((contentFile) => {\n if (typeof contentFile === 'string') {\n const { content, attributes } =\n parseRawContentFile<Attributes>(contentFile);\n\n return {\n filename: filePath,\n slug,\n attributes,\n content,\n };\n }\n return {\n filename: filePath,\n slug,\n attributes: contentFile.metadata,\n content: contentFile.default,\n };\n })\n );\n}\n\n/**\n * Retrieves the static content using the provided param and/or prefix.\n *\n * @param param route parameter (default: 'slug')\n * @param fallback fallback text if content file is not found (default: 'No Content Found')\n */\nexport function injectContent<\n Attributes extends Record<string, any> = Record<string, any>\n>(\n param:\n | string\n | {\n param: string;\n subdirectory: string;\n }\n | {\n customFilename: string;\n } = 'slug',\n fallback = 'No Content Found'\n): Observable<ContentFile<Attributes | Record<string, never>>> {\n const contentFiles = inject(CONTENT_FILES_TOKEN);\n const renderTaskService = inject(RenderTaskService);\n const task = renderTaskService.addRenderTask();\n\n if (typeof param === 'string' || 'param' in param) {\n const prefix = typeof param === 'string' ? '' : `${param.subdirectory}/`;\n const route = inject(ActivatedRoute);\n const paramKey = typeof param === 'string' ? param : param.param;\n return route.paramMap.pipe(\n map((params) => params.get(paramKey)),\n switchMap((slug) => {\n if (slug) {\n return getContentFile<Attributes>(\n contentFiles,\n prefix,\n slug,\n fallback\n );\n }\n return of({\n filename: '',\n slug: '',\n attributes: {},\n content: fallback,\n });\n }),\n tap(() => renderTaskService.clearRenderTask(task))\n );\n } else {\n return getContentFile<Attributes>(\n contentFiles,\n '',\n param.customFilename,\n fallback\n ).pipe(tap(() => renderTaskService.clearRenderTask(task)));\n }\n}\n","/// <reference types=\"vite/client\" />\n\nimport { Injectable, TransferState, inject, makeStateKey } from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nexport type TableOfContentItem = {\n id: string;\n level: number; // starts at 1\n text: string;\n};\n\n@Injectable()\nexport abstract class ContentRenderer {\n async render(content: string): Promise<string> {\n return content;\n }\n\n getContentHeadings(): Array<TableOfContentItem> {\n return [];\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n\nexport class NoopContentRenderer implements ContentRenderer {\n private readonly transferState = inject(TransferState);\n private contentId = 0;\n\n /**\n * Generates a hash from the content string\n * to be used with the transfer state\n */\n private generateHash(str: string) {\n let hash = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n }\n\n async render(content: string) {\n this.contentId = this.generateHash(content);\n return content;\n }\n enhance() {}\n\n getContentHeadings(): Array<TableOfContentItem> {\n const key = makeStateKey<TableOfContentItem[]>(\n `content-headings-${this.contentId}`\n );\n\n if (import.meta.env.SSR === true) {\n const headings = getHeadingList();\n this.transferState.set(key, headings);\n return headings;\n }\n\n return this.transferState.get(key, []);\n }\n}\n","import { ContentFile } from './content-file';\nimport { inject } from '@angular/core';\nimport { CONTENT_FILES_LIST_TOKEN } from './content-files-list-token';\nimport { RenderTaskService } from './render-task.service';\n\nexport function injectContentFiles<Attributes extends Record<string, any>>(\n filterFn?: InjectContentFilesFilterFunction<Attributes>\n): ContentFile<Attributes>[] {\n const renderTaskService = inject(RenderTaskService);\n const task = renderTaskService.addRenderTask();\n const allContentFiles = inject(\n CONTENT_FILES_LIST_TOKEN\n ) as ContentFile<Attributes>[];\n renderTaskService.clearRenderTask(task);\n\n if (filterFn) {\n const filteredContentFiles = allContentFiles.filter(filterFn);\n\n return filteredContentFiles;\n }\n\n return allContentFiles;\n}\n\nexport type InjectContentFilesFilterFunction<T extends Record<string, any>> = (\n value: ContentFile<T>,\n index: number,\n array: ContentFile<T>[]\n) => boolean;\n","import {\n AbstractType,\n Injectable,\n Provider,\n ProviderToken,\n Type,\n} from '@angular/core';\n\nexport interface MarkedContentHighlighter {\n augmentCodeBlock?(code: string, lang: string): string;\n}\n\n@Injectable()\nexport abstract class MarkedContentHighlighter {\n abstract getHighlightExtension(): import('marked').marked.MarkedExtension;\n}\n\nexport function withHighlighter(\n provider: (\n | { useValue: MarkedContentHighlighter }\n | {\n useClass:\n | Type<MarkedContentHighlighter>\n | AbstractType<MarkedContentHighlighter>;\n }\n | { useFactory: (...deps: any[]) => MarkedContentHighlighter }\n ) & { deps?: ProviderToken<any>[] }\n): Provider {\n return { provide: MarkedContentHighlighter, ...provider } as Provider;\n}\n","/**\n * Credit goes to Scully for original implementation\n * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts\n */\nimport { inject, Injectable } from '@angular/core';\nimport { marked } from 'marked';\nimport { gfmHeadingId } from 'marked-gfm-heading-id';\nimport { mangle } from 'marked-mangle';\nimport { MarkedContentHighlighter } from './marked-content-highlighter';\n\n@Injectable()\nexport class MarkedSetupService {\n private readonly marked: typeof marked;\n private readonly highlighter = inject(MarkedContentHighlighter, {\n optional: true,\n });\n\n constructor() {\n const renderer = new marked.Renderer();\n renderer.code = (code: string, lang: string) => {\n // Let's do a language based detection like on GitHub\n // So we can still have non-interpreted mermaid code\n if (lang === 'mermaid') {\n return '<pre class=\"mermaid\">' + code + '</pre>';\n }\n\n if (!lang) {\n return '<pre><code>' + code + '</code></pre>';\n }\n\n if (this.highlighter?.augmentCodeBlock) {\n return this.highlighter?.augmentCodeBlock(code, lang);\n }\n\n return `<pre class=\"language-${lang}\"><code class=\"language-${lang}\">${code}</code></pre>`;\n };\n\n const extensions = [gfmHeadingId(), mangle()];\n\n if (this.highlighter) {\n extensions.push(this.highlighter.getHighlightExtension());\n }\n\n marked.use(...extensions, {\n renderer,\n pedantic: false,\n gfm: true,\n breaks: false,\n });\n\n this.marked = marked;\n }\n\n getMarkedInstance(): typeof marked {\n return this.marked;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { getHeadingList } from 'marked-gfm-heading-id';\n\nimport { ContentRenderer, TableOfContentItem } from './content-renderer';\nimport { MarkedSetupService } from './marked-setup.service';\n\n@Injectable()\nexport class MarkdownContentRendererService implements ContentRenderer {\n #marked = inject(MarkedSetupService, { self: true });\n\n async render(content: string): Promise<string> {\n return this.#marked.getMarkedInstance().parse(content);\n }\n\n /**\n * The method is meant to be called after `render()`\n */\n getContentHeadings(): TableOfContentItem[] {\n return getHeadingList();\n }\n\n // eslint-disable-next-line\n enhance() {}\n}\n","import { Provider, InjectionToken } from '@angular/core';\nimport { ContentRenderer, NoopContentRenderer } from './content-renderer';\nimport { RenderTaskService } from './render-task.service';\n\nexport interface MarkdownRendererOptions {\n loadMermaid?: () => Promise<typeof import('mermaid')>;\n}\n\nconst CONTENT_RENDERER_PROVIDERS: Provider[] = [\n {\n provide: ContentRenderer,\n useClass: NoopContentRenderer,\n },\n];\n\nexport function withMarkdownRenderer(\n options?: MarkdownRendererOptions\n): Provider {\n return [\n CONTENT_RENDERER_PROVIDERS,\n options?.loadMermaid\n ? [\n {\n provide: MERMAID_IMPORT_TOKEN,\n useFactory: options.loadMermaid,\n },\n ]\n : [],\n ];\n}\n\nexport function provideContent(...features: Provider[]) {\n return [\n { provide: RenderTaskService, useClass: RenderTaskService },\n ...features,\n ];\n}\n\nexport const MERMAID_IMPORT_TOKEN = new InjectionToken<\n Promise<typeof import('mermaid')>\n>('mermaid_import');\n","import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n inject,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ContentRenderer } from './content-renderer';\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\n\n@Component({\n selector: 'analog-markdown-route',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div [innerHTML]=\"content\" [class]=\"classes\"></div>`,\n})\nexport default class AnalogMarkdownRouteComponent implements AfterViewChecked {\n private sanitizer = inject(DomSanitizer);\n private route = inject(ActivatedRoute);\n contentRenderer = inject(ContentRenderer);\n\n protected content: SafeHtml = this.sanitizer.bypassSecurityTrustHtml(\n this.route.snapshot.data['renderedAnalogContent']\n );\n\n @Input() classes = 'analog-markdown-route';\n\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n }\n}\n","import { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewChecked,\n Component,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n PLATFORM_ID,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, from, of } from 'rxjs';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\n\nimport { AnchorNavigationDirective } from './anchor-navigation.directive';\nimport { ContentRenderer } from './content-renderer';\nimport { MERMAID_IMPORT_TOKEN } from './provide-content';\n\n@Component({\n selector: 'analog-markdown',\n standalone: true,\n imports: [AsyncPipe],\n hostDirectives: [AnchorNavigationDirective],\n preserveWhitespaces: true,\n encapsulation: ViewEncapsulation.None,\n template: `<div\n #container\n [innerHTML]=\"content$ | async\"\n [class]=\"classes\"\n ></div>`,\n})\nexport default class AnalogMarkdownComponent\n implements OnInit, OnChanges, AfterViewChecked\n{\n private sanitizer = inject(DomSanitizer);\n private route = inject(ActivatedRoute);\n private zone = inject(NgZone);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly mermaidImport = inject(MERMAID_IMPORT_TOKEN, {\n optional: true,\n });\n private mermaid: typeof import('mermaid') | undefined;\n\n public content$: Observable<SafeHtml> = this.getContentSource();\n\n @Input() content!: string | object | undefined | null;\n @Input() classes = 'analog-markdown';\n\n @ViewChild('container', { static: true, read: ViewContainerRef })\n container!: ViewContainerRef;\n\n contentRenderer = inject(ContentRenderer);\n\n constructor() {\n if (isPlatformBrowser(this.platformId) && this.mermaidImport) {\n // Mermaid can only be loaded on client side\n this.loadMermaid(this.mermaidImport);\n }\n }\n\n ngOnInit(): void {\n this.updateContent();\n }\n\n ngOnChanges(): void {\n this.updateContent();\n }\n\n updateContent() {\n if (this.content && typeof this.content !== 'string') {\n this.container.clear();\n const componentRef = this.container.createComponent(this.content as any);\n componentRef.changeDetectorRef.detectChanges();\n } else {\n this.content$ = this.getContentSource();\n }\n }\n\n getContentSource() {\n return this.route.data.pipe(\n map<Data, string>((data) => this.content ?? data['_analogContent']),\n mergeMap((contentString) => this.renderContent(contentString)),\n map((content) => this.sanitizer.bypassSecurityTrustHtml(content)),\n catchError((e) => of(`There was an error ${e}`))\n );\n }\n\n async renderContent(content: string): Promise<string> {\n return this.contentRenderer.render(content);\n }\n\n ngAfterViewChecked() {\n this.contentRenderer.enhance();\n this.zone.runOutsideAngular(() => this.mermaid?.default.run());\n }\n\n private loadMermaid(mermaidImport: Promise<typeof import('mermaid')>) {\n this.zone.runOutsideAngular(() =>\n // Wrap into an observable to avoid redundant initialization once\n // the markdown component is destroyed before the promise is resolved.\n from(mermaidImport)\n .pipe(takeUntilDestroyed())\n .subscribe((mermaid) => {\n this.mermaid = mermaid;\n this.mermaid.default.initialize({ startOnLoad: false });\n // Explicitly running mermaid as ngAfterViewChecked\n // has probably already been called\n this.mermaid?.default.run();\n })\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PendingTasks","i1.AnchorNavigationDirective"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  export { AnchorNavigationDirective } from './lib/anchor-navigation.directive';
2
2
  export { injectContent } from './lib/content';
3
3
  export { ContentFile } from './lib/content-file';
4
- export { ContentRenderer } from './lib/content-renderer';
4
+ export { ContentRenderer, NoopContentRenderer } from './lib/content-renderer';
5
5
  export { injectContentFiles } from './lib/inject-content-files';
6
- export { MarkdownContentRendererService, provideContent, withMarkdownRenderer, MERMAID_IMPORT_TOKEN, } from './lib/markdown-content-renderer.service';
6
+ export { MarkdownContentRendererService } from './lib/markdown-content-renderer.service';
7
+ export { provideContent, withMarkdownRenderer, MERMAID_IMPORT_TOKEN, } from './lib/provide-content';
7
8
  export { default as MarkdownRouteComponent } from './lib/markdown-route.component';
8
9
  export { default as MarkdownComponent } from './lib/markdown.component';
9
10
  export { parseRawContentFile } from './lib/parse-raw-content-file';
@@ -11,3 +11,15 @@ export declare abstract class ContentRenderer {
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<ContentRenderer, never>;
12
12
  static ɵprov: i0.ɵɵInjectableDeclaration<ContentRenderer>;
13
13
  }
14
+ export declare class NoopContentRenderer implements ContentRenderer {
15
+ private readonly transferState;
16
+ private contentId;
17
+ /**
18
+ * Generates a hash from the content string
19
+ * to be used with the transfer state
20
+ */
21
+ private generateHash;
22
+ render(content: string): Promise<string>;
23
+ enhance(): void;
24
+ getContentHeadings(): Array<TableOfContentItem>;
25
+ }
@@ -1,4 +1,3 @@
1
- import { InjectionToken, Provider } from '@angular/core';
2
1
  import { ContentRenderer, TableOfContentItem } from './content-renderer';
3
2
  import * as i0 from "@angular/core";
4
3
  export declare class MarkdownContentRendererService implements ContentRenderer {
@@ -12,9 +11,3 @@ export declare class MarkdownContentRendererService implements ContentRenderer {
12
11
  static ɵfac: i0.ɵɵFactoryDeclaration<MarkdownContentRendererService, never>;
13
12
  static ɵprov: i0.ɵɵInjectableDeclaration<MarkdownContentRendererService>;
14
13
  }
15
- export interface MarkdownRendererOptions {
16
- loadMermaid?: () => Promise<typeof import('mermaid')>;
17
- }
18
- export declare function withMarkdownRenderer(options?: MarkdownRendererOptions): Provider;
19
- export declare function provideContent(...features: Provider[]): Provider[];
20
- export declare const MERMAID_IMPORT_TOKEN: InjectionToken<Promise<typeof import("mermaid")>>;
@@ -0,0 +1,7 @@
1
+ import { Provider, InjectionToken } from '@angular/core';
2
+ export interface MarkdownRendererOptions {
3
+ loadMermaid?: () => Promise<typeof import('mermaid')>;
4
+ }
5
+ export declare function withMarkdownRenderer(options?: MarkdownRendererOptions): Provider;
6
+ export declare function provideContent(...features: Provider[]): Provider[];
7
+ export declare const MERMAID_IMPORT_TOKEN: InjectionToken<Promise<typeof import("mermaid")>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/content",
3
- "version": "1.5.0",
3
+ "version": "1.6.0-beta.1",
4
4
  "description": "Content Rendering for Analog",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -1,4 +1,2 @@
1
1
  import { Provider } from '@angular/core';
2
- import { PrismHighlighter } from './lib/prism-highlighter';
3
- export { PrismHighlighter };
4
- export declare function withPrismHighlighter(): Provider;
2
+ export declare function withPrismHighlighter(): Provider[];
@@ -1,12 +1,7 @@
1
1
  import { Provider } from '@angular/core';
2
- import type { BundledLanguage } from 'shiki';
3
- import { ShikiHighlighter, type ShikiHighlighterOptions, type ShikiHighlightOptions } from './lib/shiki-highlighter';
4
- export { ShikiHighlighter };
5
- export interface WithShikiHighlighterOptions {
6
- highlighter?: Partial<ShikiHighlighterOptions> & {
7
- additionalLangs?: BundledLanguage[];
8
- };
9
- highlight?: ShikiHighlightOptions;
2
+ import type { BundledLanguage, BundledTheme, CodeOptionsMeta, CodeOptionsMultipleThemes, CodeOptionsSingleTheme, CodeToHastOptionsCommon } from 'shiki';
3
+ export type ShikiHighlightOptions = Partial<Omit<CodeToHastOptionsCommon<BundledLanguage>, 'lang'>> & CodeOptionsMeta & Partial<CodeOptionsSingleTheme<BundledTheme>> & Partial<CodeOptionsMultipleThemes<BundledTheme>>;
4
+ export type WithShikiHighlighterOptions = ShikiHighlightOptions & {
10
5
  container?: string;
11
- }
12
- export declare function withShikiHighlighter({ highlighter, highlight, container, }?: WithShikiHighlighterOptions): Provider;
6
+ };
7
+ export declare function withShikiHighlighter(_opts?: WithShikiHighlighterOptions): Provider[];
@@ -1,20 +0,0 @@
1
- "use strict";
2
- (function () {
3
- if (typeof Prism === 'undefined') {
4
- return;
5
- }
6
- Prism.languages.angular = Prism.languages.extend('markup', {
7
- keyword: /(?:@if|@for|@switch|@defer|@loading|@error|@placeholder|prefetch)\b/,
8
- operator: /\b(?:on|when)\b/,
9
- number: {
10
- pattern: /\b(minimum|after)\s+\d+(?:s|ms|)/gi,
11
- lookbehind: true,
12
- },
13
- builtin: {
14
- pattern: /\b(?:viewport|timer|minimum|after|hover|idle|immediate|interaction)/,
15
- },
16
- function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
17
- });
18
- Prism.languages.ng = Prism.languages.angular;
19
- })();
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRlbnQvcHJpc20taGlnaGxpZ2h0ZXIvc3JjL2xpYi9wcmlzbS9hbmd1bGFyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxDQUFDO0lBQ0MsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxPQUFPO0lBQ1QsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUN6RCxPQUFPLEVBQ0wscUVBQXFFO1FBQ3ZFLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUFFLG9DQUFvQztZQUM3QyxVQUFVLEVBQUUsSUFBSTtTQUNqQjtRQUNELE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFDTCxxRUFBcUU7U0FDeEU7UUFDRCxRQUFRLEVBQ04sbUdBQW1HO0tBQ3RHLENBQUMsQ0FBQztJQUVILEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIFByaXNtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFByaXNtLmxhbmd1YWdlcy5hbmd1bGFyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuICAgIGtleXdvcmQ6XG4gICAgICAvKD86QGlmfEBmb3J8QHN3aXRjaHxAZGVmZXJ8QGxvYWRpbmd8QGVycm9yfEBwbGFjZWhvbGRlcnxwcmVmZXRjaClcXGIvLFxuICAgIG9wZXJhdG9yOiAvXFxiKD86b258d2hlbilcXGIvLFxuICAgIG51bWJlcjoge1xuICAgICAgcGF0dGVybjogL1xcYihtaW5pbXVtfGFmdGVyKVxccytcXGQrKD86c3xtc3wpL2dpLFxuICAgICAgbG9va2JlaGluZDogdHJ1ZSxcbiAgICB9LFxuICAgIGJ1aWx0aW46IHtcbiAgICAgIHBhdHRlcm46XG4gICAgICAgIC9cXGIoPzp2aWV3cG9ydHx0aW1lcnxtaW5pbXVtfGFmdGVyfGhvdmVyfGlkbGV8aW1tZWRpYXRlfGludGVyYWN0aW9uKS8sXG4gICAgfSxcbiAgICBmdW5jdGlvbjpcbiAgICAgIC8jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqKD86XFwuXFxzKig/OmFwcGx5fGJpbmR8Y2FsbClcXHMqKT9cXCgpLyxcbiAgfSk7XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLm5nID0gUHJpc20ubGFuZ3VhZ2VzLmFuZ3VsYXI7XG59KSgpO1xuIl19
@@ -1,61 +0,0 @@
1
- import { MarkedContentHighlighter } from '@analogjs/content';
2
- import { Injectable } from '@angular/core';
3
- import { markedHighlight } from 'marked-highlight';
4
- import 'prismjs';
5
- import 'prismjs/components/prism-bash';
6
- import 'prismjs/components/prism-css';
7
- import 'prismjs/components/prism-javascript';
8
- import 'prismjs/components/prism-json';
9
- import 'prismjs/components/prism-markup';
10
- import 'prismjs/components/prism-typescript';
11
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
12
- import 'prismjs/plugins/toolbar/prism-toolbar';
13
- import './prism/angular';
14
- import * as i0 from "@angular/core";
15
- export class PrismHighlighter extends MarkedContentHighlighter {
16
- augmentCodeBlock(code, lang) {
17
- const classes = lang.startsWith('diff') && Prism.languages['diff']
18
- ? `language-${lang} diff-highlight`
19
- : `language-${lang.replace('diff-', '')}`;
20
- return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
21
- }
22
- getHighlightExtension() {
23
- return markedHighlight({
24
- async: true,
25
- highlight: (code, lang) => {
26
- let diff = lang?.startsWith('diff-');
27
- lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
28
- if (diff && !Prism.languages['diff']) {
29
- diff = false;
30
- console.warn(`Notice:
31
- ---------------------------------------------------------------------------------------
32
- The \`diff\` language and plugin are not available in the provided setup.
33
- To enable it, add the following imports your \`main.ts\`:
34
- import 'prismjs/components/prism-diff';
35
- import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
36
- ---------------------------------------------------------------------------------------
37
- `);
38
- }
39
- if (!Prism.languages[lang]) {
40
- if (lang !== 'mermaid') {
41
- console.warn(`Notice:
42
- ---------------------------------------------------------------------------------------
43
- The requested language '${lang}' is not available in the provided setup.
44
- To enable it, add the following import your \`main.ts\`:
45
- import 'prismjs/components/prism-${lang}';
46
- ---------------------------------------------------------------------------------------
47
- `);
48
- }
49
- return code;
50
- }
51
- return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
52
- },
53
- });
54
- }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
56
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter }); }
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: PrismHighlighter, decorators: [{
59
- type: Injectable
60
- }] });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20taGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3ByaXNtLWhpZ2hsaWdodGVyL3NyYy9saWIvcHJpc20taGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxTQUFTLENBQUM7QUFDakIsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8scUNBQXFDLENBQUM7QUFDN0MsT0FBTywyREFBMkQsQ0FBQztBQUNuRSxPQUFPLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8saUJBQWlCLENBQUM7O0FBS3pCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSx3QkFBd0I7SUFDbkQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDbEQsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNoRCxDQUFDLENBQUMsWUFBWSxJQUFJLGlCQUFpQjtZQUNuQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sZUFBZSxPQUFPLGtCQUFrQixPQUFPLEtBQUssSUFBSSxlQUFlLENBQUM7SUFDakYsQ0FBQztJQUVRLHFCQUFxQjtRQUM1QixPQUFPLGVBQWUsQ0FBQztZQUNyQixLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUM7Z0JBRS9ELElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7YUFPVixDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQzs7OEJBRUssSUFBSTs7eUNBRU8sSUFBSTs7ZUFFOUIsQ0FBQyxDQUFDO29CQUNQLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ3RELElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBL0NVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIH0gZnJvbSAnQGFuYWxvZ2pzL2NvbnRlbnQnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFya2VkSGlnaGxpZ2h0IH0gZnJvbSAnbWFya2VkLWhpZ2hsaWdodCc7XG5cbmltcG9ydCAncHJpc21qcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1iYXNoJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWNzcyc7XG5pbXBvcnQgJ3ByaXNtanMvY29tcG9uZW50cy9wcmlzbS1qYXZhc2NyaXB0JztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWpzb24nO1xuaW1wb3J0ICdwcmlzbWpzL2NvbXBvbmVudHMvcHJpc20tbWFya3VwJztcbmltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLXR5cGVzY3JpcHQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvY29weS10by1jbGlwYm9hcmQvcHJpc20tY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvdG9vbGJhci9wcmlzbS10b29sYmFyJztcbmltcG9ydCAnLi9wcmlzbS9hbmd1bGFyJztcblxuZGVjbGFyZSBjb25zdCBQcmlzbTogdHlwZW9mIGltcG9ydCgncHJpc21qcycpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJpc21IaWdobGlnaHRlciBleHRlbmRzIE1hcmtlZENvbnRlbnRIaWdobGlnaHRlciB7XG4gIG92ZXJyaWRlIGF1Z21lbnRDb2RlQmxvY2soY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPVxuICAgICAgbGFuZy5zdGFydHNXaXRoKCdkaWZmJykgJiYgUHJpc20ubGFuZ3VhZ2VzWydkaWZmJ11cbiAgICAgICAgPyBgbGFuZ3VhZ2UtJHtsYW5nfSBkaWZmLWhpZ2hsaWdodGBcbiAgICAgICAgOiBgbGFuZ3VhZ2UtJHtsYW5nLnJlcGxhY2UoJ2RpZmYtJywgJycpfWA7XG4gICAgcmV0dXJuIGA8cHJlIGNsYXNzPVwiJHtjbGFzc2VzfVwiPjxjb2RlIGNsYXNzPVwiJHtjbGFzc2VzfVwiPiR7Y29kZX08L2NvZGU+PC9wcmU+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldEhpZ2hsaWdodEV4dGVuc2lvbigpIHtcbiAgICByZXR1cm4gbWFya2VkSGlnaGxpZ2h0KHtcbiAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgaGlnaGxpZ2h0OiAoY29kZTogc3RyaW5nLCBsYW5nOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbGV0IGRpZmYgPSBsYW5nPy5zdGFydHNXaXRoKCdkaWZmLScpO1xuICAgICAgICBsYW5nID0gZGlmZiA/IGxhbmcucmVwbGFjZSgnZGlmZi0nLCAnJykgOiBsYW5nIHx8ICd0eXBlc2NyaXB0JztcblxuICAgICAgICBpZiAoZGlmZiAmJiAhUHJpc20ubGFuZ3VhZ2VzWydkaWZmJ10pIHtcbiAgICAgICAgICBkaWZmID0gZmFsc2U7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBOb3RpY2U6XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgVGhlIFxcYGRpZmZcXGAgbGFuZ3VhZ2UgYW5kIHBsdWdpbiBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgcHJvdmlkZWQgc2V0dXAuXG4gICAgVG8gZW5hYmxlIGl0LCBhZGQgdGhlIGZvbGxvd2luZyBpbXBvcnRzIHlvdXIgXFxgbWFpbi50c1xcYDpcbiAgICAgIGltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLWRpZmYnO1xuICAgICAgaW1wb3J0ICdwcmlzbWpzL3BsdWdpbnMvZGlmZi1oaWdobGlnaHQvcHJpc20tZGlmZi1oaWdobGlnaHQnO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuICAgICAgICAgIGlmIChsYW5nICE9PSAnbWVybWFpZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm90aWNlOlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIFRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgJyR7bGFuZ30nIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNldHVwLlxuICAgIFRvIGVuYWJsZSBpdCwgYWRkIHRoZSBmb2xsb3dpbmcgaW1wb3J0IHlvdXIgXFxgbWFpbi50c1xcYDpcbiAgICAgIGltcG9ydCAncHJpc21qcy9jb21wb25lbnRzL3ByaXNtLSR7bGFuZ30nO1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByaXNtLmhpZ2hsaWdodChcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIGRpZmYgPyBQcmlzbS5sYW5ndWFnZXNbJ2RpZmYnXSA6IFByaXNtLmxhbmd1YWdlc1tsYW5nXSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,59 +0,0 @@
1
- import { MarkedContentHighlighter, MERMAID_IMPORT_TOKEN, } from '@analogjs/content';
2
- import { inject, Injectable, InjectionToken } from '@angular/core';
3
- import markedShiki from 'marked-shiki';
4
- import { getHighlighter, } from 'shiki';
5
- import * as i0 from "@angular/core";
6
- export const defaultHighlighterOptions = {
7
- langs: [
8
- 'json',
9
- 'ts',
10
- 'tsx',
11
- 'js',
12
- 'jsx',
13
- 'html',
14
- 'css',
15
- 'angular-html',
16
- 'angular-ts',
17
- ],
18
- themes: ['github-dark', 'github-light'],
19
- };
20
- export const [SHIKI_HIGHLIGHTER_OPTIONS, SHIKI_HIGHLIGHT_OPTIONS, SHIKI_CONTAINER_OPTION,] = [
21
- new InjectionToken('SHIKI_HIGHLIGHTER_OPTIONS'),
22
- new InjectionToken('SHIKI_HIGHLIGHT_OPTIONS'),
23
- new InjectionToken('SHIKI_CONTAINER_OPTION'),
24
- ];
25
- export class ShikiHighlighter extends MarkedContentHighlighter {
26
- constructor() {
27
- super(...arguments);
28
- this.highlighterOptions = inject(SHIKI_HIGHLIGHTER_OPTIONS);
29
- this.highlightOptions = inject(SHIKI_HIGHLIGHT_OPTIONS);
30
- this.highlighterContainer = inject(SHIKI_CONTAINER_OPTION);
31
- this.hasLoadMermaid = inject(MERMAID_IMPORT_TOKEN, {
32
- optional: true,
33
- });
34
- this.highlighter = getHighlighter(this.highlighterOptions);
35
- }
36
- getHighlightExtension() {
37
- return markedShiki({
38
- container: this.highlighterContainer,
39
- highlight: async (code, lang, props) => {
40
- if (this.hasLoadMermaid && lang === 'mermaid') {
41
- return `<pre class="mermaid">${code}</pre>`;
42
- }
43
- const { codeToHtml } = await this.highlighter;
44
- return codeToHtml(code, Object.assign({
45
- lang,
46
- // required by `transformerMeta*`
47
- meta: { __raw: props.join(' ') },
48
- themes: { dark: 'github-dark', light: 'github-light' },
49
- }, this.highlightOptions));
50
- },
51
- });
52
- }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
54
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter }); }
55
- }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ShikiHighlighter, decorators: [{
57
- type: Injectable
58
- }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpa2ktaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZW50L3NoaWtpLWhpZ2hsaWdodGVyL3NyYy9saWIvc2hpa2ktaGlnaGxpZ2h0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsR0FDckIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFPTCxjQUFjLEdBQ2YsTUFBTSxPQUFPLENBQUM7O0FBVWYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDdkMsS0FBSyxFQUFFO1FBQ0wsTUFBTTtRQUNOLElBQUk7UUFDSixLQUFLO1FBQ0wsSUFBSTtRQUNKLEtBQUs7UUFDTCxNQUFNO1FBQ04sS0FBSztRQUNMLGNBQWM7UUFDZCxZQUFZO0tBQ2I7SUFDRCxNQUFNLEVBQUUsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDO0NBQ3hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxDQUNYLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3ZCLEdBQUc7SUFDRixJQUFJLGNBQWMsQ0FBMEIsMkJBQTJCLENBQUM7SUFDeEUsSUFBSSxjQUFjLENBQXdCLHlCQUF5QixDQUFDO0lBQ3BFLElBQUksY0FBYyxDQUFTLHdCQUF3QixDQUFDO0NBQ3JELENBQUM7QUFHRixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBRDlEOztRQUVtQix1QkFBa0IsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2RCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRCx5QkFBb0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0RCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUM3RCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUNjLGdCQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBMEJ4RTtJQXhCVSxxQkFBcUI7UUFDNUIsT0FBTyxXQUFXLENBQUM7WUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDcEMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUM5QyxPQUFPLHdCQUF3QixJQUFJLFFBQVEsQ0FBQztnQkFDOUMsQ0FBQztnQkFFRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM5QyxPQUFPLFVBQVUsQ0FDZixJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU0sQ0FDWDtvQkFDRSxJQUFJO29CQUNKLGlDQUFpQztvQkFDakMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtpQkFDdkQsRUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWhDVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1hcmtlZENvbnRlbnRIaWdobGlnaHRlcixcbiAgTUVSTUFJRF9JTVBPUlRfVE9LRU4sXG59IGZyb20gJ0BhbmFsb2dqcy9jb250ZW50JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtYXJrZWRTaGlraSBmcm9tICdtYXJrZWQtc2hpa2knO1xuaW1wb3J0IHtcbiAgdHlwZSBCdW5kbGVkTGFuZ3VhZ2UsXG4gIHR5cGUgQnVuZGxlZFRoZW1lLFxuICB0eXBlIENvZGVPcHRpb25zTWV0YSxcbiAgdHlwZSBDb2RlT3B0aW9uc011bHRpcGxlVGhlbWVzLFxuICB0eXBlIENvZGVPcHRpb25zU2luZ2xlVGhlbWUsXG4gIHR5cGUgQ29kZVRvSGFzdE9wdGlvbnNDb21tb24sXG4gIGdldEhpZ2hsaWdodGVyLFxufSBmcm9tICdzaGlraSc7XG5cbmV4cG9ydCB0eXBlIFNoaWtpSGlnaGxpZ2h0ZXJPcHRpb25zID0gUGFyYW1ldGVyczx0eXBlb2YgZ2V0SGlnaGxpZ2h0ZXI+WzBdO1xuZXhwb3J0IHR5cGUgU2hpa2lIaWdobGlnaHRPcHRpb25zID0gUGFydGlhbDxcbiAgT21pdDxDb2RlVG9IYXN0T3B0aW9uc0NvbW1vbjxCdW5kbGVkTGFuZ3VhZ2U+LCAnbGFuZyc+XG4+ICZcbiAgQ29kZU9wdGlvbnNNZXRhICZcbiAgUGFydGlhbDxDb2RlT3B0aW9uc1NpbmdsZVRoZW1lPEJ1bmRsZWRUaGVtZT4+ICZcbiAgUGFydGlhbDxDb2RlT3B0aW9uc011bHRpcGxlVGhlbWVzPEJ1bmRsZWRUaGVtZT4+O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEhpZ2hsaWdodGVyT3B0aW9ucyA9IHtcbiAgbGFuZ3M6IFtcbiAgICAnanNvbicsXG4gICAgJ3RzJyxcbiAgICAndHN4JyxcbiAgICAnanMnLFxuICAgICdqc3gnLFxuICAgICdodG1sJyxcbiAgICAnY3NzJyxcbiAgICAnYW5ndWxhci1odG1sJyxcbiAgICAnYW5ndWxhci10cycsXG4gIF0sXG4gIHRoZW1lczogWydnaXRodWItZGFyaycsICdnaXRodWItbGlnaHQnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBbXG4gIFNISUtJX0hJR0hMSUdIVEVSX09QVElPTlMsXG4gIFNISUtJX0hJR0hMSUdIVF9PUFRJT05TLFxuICBTSElLSV9DT05UQUlORVJfT1BUSU9OLFxuXSA9IFtcbiAgbmV3IEluamVjdGlvblRva2VuPFNoaWtpSGlnaGxpZ2h0ZXJPcHRpb25zPignU0hJS0lfSElHSExJR0hURVJfT1BUSU9OUycpLFxuICBuZXcgSW5qZWN0aW9uVG9rZW48U2hpa2lIaWdobGlnaHRPcHRpb25zPignU0hJS0lfSElHSExJR0hUX09QVElPTlMnKSxcbiAgbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1NISUtJX0NPTlRBSU5FUl9PUFRJT04nKSxcbl07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGlraUhpZ2hsaWdodGVyIGV4dGVuZHMgTWFya2VkQ29udGVudEhpZ2hsaWdodGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRlck9wdGlvbnMgPSBpbmplY3QoU0hJS0lfSElHSExJR0hURVJfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0T3B0aW9ucyA9IGluamVjdChTSElLSV9ISUdITElHSFRfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZXJDb250YWluZXIgPSBpbmplY3QoU0hJS0lfQ09OVEFJTkVSX09QVElPTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFzTG9hZE1lcm1haWQgPSBpbmplY3QoTUVSTUFJRF9JTVBPUlRfVE9LRU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZXIgPSBnZXRIaWdobGlnaHRlcih0aGlzLmhpZ2hsaWdodGVyT3B0aW9ucyk7XG5cbiAgb3ZlcnJpZGUgZ2V0SGlnaGxpZ2h0RXh0ZW5zaW9uKCkge1xuICAgIHJldHVybiBtYXJrZWRTaGlraSh7XG4gICAgICBjb250YWluZXI6IHRoaXMuaGlnaGxpZ2h0ZXJDb250YWluZXIsXG4gICAgICBoaWdobGlnaHQ6IGFzeW5jIChjb2RlLCBsYW5nLCBwcm9wcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNMb2FkTWVybWFpZCAmJiBsYW5nID09PSAnbWVybWFpZCcpIHtcbiAgICAgICAgICByZXR1cm4gYDxwcmUgY2xhc3M9XCJtZXJtYWlkXCI+JHtjb2RlfTwvcHJlPmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGNvZGVUb0h0bWwgfSA9IGF3YWl0IHRoaXMuaGlnaGxpZ2h0ZXI7XG4gICAgICAgIHJldHVybiBjb2RlVG9IdG1sKFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYnkgYHRyYW5zZm9ybWVyTWV0YSpgXG4gICAgICAgICAgICAgIG1ldGE6IHsgX19yYXc6IHByb3BzLmpvaW4oJyAnKSB9LFxuICAgICAgICAgICAgICB0aGVtZXM6IHsgZGFyazogJ2dpdGh1Yi1kYXJrJywgbGlnaHQ6ICdnaXRodWItbGlnaHQnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRPcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
File without changes
@@ -1,18 +0,0 @@
1
- import { MarkedContentHighlighter } from '@analogjs/content';
2
- import 'prismjs';
3
- import 'prismjs/components/prism-bash';
4
- import 'prismjs/components/prism-css';
5
- import 'prismjs/components/prism-javascript';
6
- import 'prismjs/components/prism-json';
7
- import 'prismjs/components/prism-markup';
8
- import 'prismjs/components/prism-typescript';
9
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard';
10
- import 'prismjs/plugins/toolbar/prism-toolbar';
11
- import './prism/angular';
12
- import * as i0 from "@angular/core";
13
- export declare class PrismHighlighter extends MarkedContentHighlighter {
14
- augmentCodeBlock(code: string, lang: string): string;
15
- getHighlightExtension(): import("marked").marked.MarkedExtension;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<PrismHighlighter, never>;
17
- static ɵprov: i0.ɵɵInjectableDeclaration<PrismHighlighter>;
18
- }
@@ -1,21 +0,0 @@
1
- import { MarkedContentHighlighter } from '@analogjs/content';
2
- import { InjectionToken } from '@angular/core';
3
- import { type BundledLanguage, type BundledTheme, type CodeOptionsMeta, type CodeOptionsMultipleThemes, type CodeOptionsSingleTheme, type CodeToHastOptionsCommon, getHighlighter } from 'shiki';
4
- import * as i0 from "@angular/core";
5
- export type ShikiHighlighterOptions = Parameters<typeof getHighlighter>[0];
6
- export type ShikiHighlightOptions = Partial<Omit<CodeToHastOptionsCommon<BundledLanguage>, 'lang'>> & CodeOptionsMeta & Partial<CodeOptionsSingleTheme<BundledTheme>> & Partial<CodeOptionsMultipleThemes<BundledTheme>>;
7
- export declare const defaultHighlighterOptions: {
8
- langs: string[];
9
- themes: string[];
10
- };
11
- export declare const SHIKI_HIGHLIGHTER_OPTIONS: InjectionToken<import("shiki/index.mjs").BundledHighlighterOptions<BundledLanguage, BundledTheme>>, SHIKI_HIGHLIGHT_OPTIONS: InjectionToken<ShikiHighlightOptions>, SHIKI_CONTAINER_OPTION: InjectionToken<string>;
12
- export declare class ShikiHighlighter extends MarkedContentHighlighter {
13
- private readonly highlighterOptions;
14
- private readonly highlightOptions;
15
- private readonly highlighterContainer;
16
- private readonly hasLoadMermaid;
17
- private readonly highlighter;
18
- getHighlightExtension(): MarkedExtension;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<ShikiHighlighter, never>;
20
- static ɵprov: i0.ɵɵInjectableDeclaration<ShikiHighlighter>;
21
- }