@covalent/flavored-markdown 0.0.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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # markdown-flavored
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test markdown-flavored` to execute the unit tests.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@covalent/flavored-markdown" />
5
+ export * from './public_api';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtZmxhdm9yZWQtbWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL21hcmtkb3duLWZsYXZvcmVkL3NyYy9jb3ZhbGVudC1mbGF2b3JlZC1tYXJrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -0,0 +1,60 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/list";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/material/core";
6
+ import * as i4 from "@angular/material/divider";
7
+ function TdFlavoredListComponent_ng_template_1_p_3_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵelementStart(0, "p", 1);
9
+ i0.ɵɵtext(1);
10
+ i0.ɵɵelementEnd();
11
+ } if (rf & 2) {
12
+ const subline_r5 = ctx.$implicit;
13
+ i0.ɵɵadvance(1);
14
+ i0.ɵɵtextInterpolate1(" ", subline_r5, " ");
15
+ } }
16
+ function TdFlavoredListComponent_ng_template_1_mat_divider_4_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelement(0, "mat-divider");
18
+ } }
19
+ function TdFlavoredListComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelementStart(0, "mat-list-item");
21
+ i0.ɵɵelementStart(1, "h4", 1);
22
+ i0.ɵɵtext(2);
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵtemplate(3, TdFlavoredListComponent_ng_template_1_p_3_Template, 2, 1, "p", 2);
25
+ i0.ɵɵtemplate(4, TdFlavoredListComponent_ng_template_1_mat_divider_4_Template, 1, 0, "mat-divider", 3);
26
+ i0.ɵɵelementEnd();
27
+ } if (rf & 2) {
28
+ const line_r1 = ctx.$implicit;
29
+ const last_r2 = ctx.last;
30
+ i0.ɵɵadvance(2);
31
+ i0.ɵɵtextInterpolate1(" ", line_r1.line, " ");
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵproperty("ngForOf", line_r1.sublines);
34
+ i0.ɵɵadvance(1);
35
+ i0.ɵɵproperty("ngIf", !last_r2);
36
+ } }
37
+ export class TdFlavoredListComponent {
38
+ constructor() {
39
+ this.dense = false;
40
+ }
41
+ }
42
+ TdFlavoredListComponent.ɵfac = function TdFlavoredListComponent_Factory(t) { return new (t || TdFlavoredListComponent)(); };
43
+ TdFlavoredListComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdFlavoredListComponent, selectors: [["td-cfm-list"]], inputs: { lines: "lines", dense: "dense" }, decls: 2, vars: 2, consts: [["ngFor", "", 3, "ngForOf"], ["matLine", ""], ["matLine", "", 4, "ngFor", "ngForOf"], [4, "ngIf"]], template: function TdFlavoredListComponent_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "mat-list");
45
+ i0.ɵɵtemplate(1, TdFlavoredListComponent_ng_template_1_Template, 5, 3, "ng-template", 0);
46
+ i0.ɵɵelementEnd();
47
+ } if (rf & 2) {
48
+ i0.ɵɵattribute("dense", ctx.dense ? true : null);
49
+ i0.ɵɵadvance(1);
50
+ i0.ɵɵproperty("ngForOf", ctx.lines);
51
+ } }, directives: [i1.MatList, i2.NgForOf, i1.MatListItem, i3.MatLine, i2.NgIf, i4.MatDivider], styles: [""] });
52
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredListComponent, [{
53
+ type: Component,
54
+ args: [{ selector: 'td-cfm-list', template: "<mat-list [attr.dense]=\"dense ? true : null\">\n <ng-template let-line let-last=\"last\" ngFor [ngForOf]=\"lines\">\n <mat-list-item>\n <h4 matLine>\n {{ line.line }}\n </h4>\n <p *ngFor=\"let subline of line.sublines\" matLine>\n {{ subline }}\n </p>\n <mat-divider *ngIf=\"!last\"></mat-divider>\n </mat-list-item>\n </ng-template>\n</mat-list>\n", styles: [""] }]
55
+ }], null, { lines: [{
56
+ type: Input
57
+ }], dense: [{
58
+ type: Input
59
+ }] }); })();
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ZtLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi1mbGF2b3JlZC9zcmMvbGliL2NmbS1saXN0L2NmbS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tZmxhdm9yZWQvc3JjL2xpYi9jZm0tbGlzdC9jZm0tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ00zQyw0QkFBaUQ7SUFDL0MsWUFDRjtJQUFBLGlCQUFJOzs7SUFERixlQUNGO0lBREUsMkNBQ0Y7OztJQUNBLDhCQUF5Qzs7O0lBUDNDLHFDQUFlO0lBQ2IsNkJBQVk7SUFDVixZQUNGO0lBQUEsaUJBQUs7SUFDTCxrRkFFSTtJQUNKLHNHQUF5QztJQUMzQyxpQkFBZ0I7Ozs7SUFOWixlQUNGO0lBREUsNkNBQ0Y7SUFDdUIsZUFBZ0I7SUFBaEIsMENBQWdCO0lBR3pCLGVBQVc7SUFBWCwrQkFBVzs7QURHL0IsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQU9XLFVBQUssR0FBRyxLQUFLLENBQUM7S0FDeEI7OzhGQUhZLHVCQUF1QjswRUFBdkIsdUJBQXVCO1FDWnBDLGdDQUE2QztRQUMzQyx3RkFVYztRQUNoQixpQkFBVzs7UUFaRCxnREFBa0M7UUFDRSxlQUFpQjtRQUFqQixtQ0FBaUI7O3VGRFdsRCx1QkFBdUI7Y0FMbkMsU0FBUzsyQkFDRSxhQUFhO2dCQUtkLEtBQUs7a0JBQWIsS0FBSztZQUNHLEtBQUs7a0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRmxhdm9yZWRMaXN0SXRlbSB7XG4gIGxpbmU6IHN0cmluZztcbiAgc3VibGluZXM/OiBzdHJpbmdbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtY2ZtLWxpc3QnLFxuICBzdHlsZVVybHM6IFsnLi9jZm0tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vY2ZtLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZEZsYXZvcmVkTGlzdENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxpbmVzITogSUZsYXZvcmVkTGlzdEl0ZW1bXTtcbiAgQElucHV0KCkgZGVuc2UgPSBmYWxzZTtcbn1cbiIsIjxtYXQtbGlzdCBbYXR0ci5kZW5zZV09XCJkZW5zZSA/IHRydWUgOiBudWxsXCI+XG4gIDxuZy10ZW1wbGF0ZSBsZXQtbGluZSBsZXQtbGFzdD1cImxhc3RcIiBuZ0ZvciBbbmdGb3JPZl09XCJsaW5lc1wiPlxuICAgIDxtYXQtbGlzdC1pdGVtPlxuICAgICAgPGg0IG1hdExpbmU+XG4gICAgICAgIHt7IGxpbmUubGluZSB9fVxuICAgICAgPC9oND5cbiAgICAgIDxwICpuZ0Zvcj1cImxldCBzdWJsaW5lIG9mIGxpbmUuc3VibGluZXNcIiBtYXRMaW5lPlxuICAgICAgICB7eyBzdWJsaW5lIH19XG4gICAgICA8L3A+XG4gICAgICA8bWF0LWRpdmlkZXIgKm5nSWY9XCIhbGFzdFwiPjwvbWF0LWRpdmlkZXI+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbGlzdD5cbiJdfQ==
@@ -0,0 +1,104 @@
1
+ import { Component, Input, ChangeDetectorRef, Output, EventEmitter, ChangeDetectionStrategy, } from '@angular/core';
2
+ import { TdMarkdownLoaderService } from '@covalent/markdown';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@covalent/markdown";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/progress-bar";
7
+ import * as i4 from "../flavored-markdown.component";
8
+ function TdFlavoredMarkdownLoaderComponent_mat_progress_bar_0_Template(rf, ctx) { if (rf & 1) {
9
+ i0.ɵɵelement(0, "mat-progress-bar", 2);
10
+ } if (rf & 2) {
11
+ i0.ɵɵproperty("ngClass", "delay");
12
+ } }
13
+ function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template(rf, ctx) { if (rf & 1) {
14
+ const _r3 = i0.ɵɵgetCurrentView();
15
+ i0.ɵɵelementStart(0, "td-flavored-markdown", 3);
16
+ i0.ɵɵlistener("contentReady", function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template_td_flavored_markdown_contentReady_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return ctx_r2.contentReady.emit(); })("buttonClicked", function TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template_td_flavored_markdown_buttonClicked_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r4 = i0.ɵɵnextContext(); return ctx_r4.buttonClicked.emit($event); });
17
+ i0.ɵɵelementEnd();
18
+ } if (rf & 2) {
19
+ const ctx_r1 = i0.ɵɵnextContext();
20
+ let tmp_1_0;
21
+ let tmp_2_0;
22
+ i0.ɵɵproperty("content", ctx_r1.content)("hostedUrl", (tmp_1_0 = ctx_r1.url) !== null && tmp_1_0 !== undefined ? tmp_1_0 : "")("anchor", (tmp_2_0 = ctx_r1.anchor) !== null && tmp_2_0 !== undefined ? tmp_2_0 : "")("copyCodeToClipboard", ctx_r1.copyCodeToClipboard)("copyCodeTooltips", ctx_r1.copyCodeTooltips);
23
+ } }
24
+ // TODO: make a td-markdown-loader component
25
+ export class TdFlavoredMarkdownLoaderComponent {
26
+ constructor(_changeDetectorRef, _markdownUrlLoaderService) {
27
+ this._changeDetectorRef = _changeDetectorRef;
28
+ this._markdownUrlLoaderService = _markdownUrlLoaderService;
29
+ /**
30
+ * copyCodeToClipboard?: boolean
31
+ *
32
+ * Display copy button on code snippets to copy code to clipboard.
33
+ *
34
+ */
35
+ this.copyCodeToClipboard = false;
36
+ /**
37
+ * copyCodeTooltips?: ICopyCodeTooltips
38
+ *
39
+ * Tooltips for copy button to copy and upon copying.
40
+ */
41
+ this.copyCodeTooltips = {};
42
+ /**
43
+ * contentReady: void
44
+ * Emitted when markdown rendering is finished.
45
+ */
46
+ this.contentReady = new EventEmitter();
47
+ /**
48
+ * loadFailed: Error
49
+ * Emitted when loading of markdown file fails.
50
+ */
51
+ this.loadFailed = new EventEmitter();
52
+ this.buttonClicked = new EventEmitter();
53
+ this.loading = true;
54
+ }
55
+ ngOnChanges(changes) {
56
+ if (changes['url'] || changes['httpOptions']) {
57
+ this.loadMarkdown();
58
+ }
59
+ }
60
+ async loadMarkdown() {
61
+ this.loading = true;
62
+ this._changeDetectorRef.markForCheck();
63
+ try {
64
+ this.content = await this._markdownUrlLoaderService.load(this.url ?? '', this.httpOptions);
65
+ }
66
+ catch (error) {
67
+ this.loadFailed.emit(error);
68
+ }
69
+ finally {
70
+ this.loading = false;
71
+ this._changeDetectorRef.markForCheck();
72
+ }
73
+ }
74
+ }
75
+ TdFlavoredMarkdownLoaderComponent.ɵfac = function TdFlavoredMarkdownLoaderComponent_Factory(t) { return new (t || TdFlavoredMarkdownLoaderComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.TdMarkdownLoaderService)); };
76
+ TdFlavoredMarkdownLoaderComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdFlavoredMarkdownLoaderComponent, selectors: [["td-flavored-markdown-loader"]], inputs: { url: "url", httpOptions: "httpOptions", anchor: "anchor", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, outputs: { contentReady: "contentReady", loadFailed: "loadFailed", buttonClicked: "buttonClicked" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mode", "indeterminate", "color", "accent", "class", "sticky", 3, "ngClass", 4, "ngIf"], [3, "content", "hostedUrl", "anchor", "copyCodeToClipboard", "copyCodeTooltips", "contentReady", "buttonClicked", 4, "ngIf"], ["mode", "indeterminate", "color", "accent", 1, "sticky", 3, "ngClass"], [3, "content", "hostedUrl", "anchor", "copyCodeToClipboard", "copyCodeTooltips", "contentReady", "buttonClicked"]], template: function TdFlavoredMarkdownLoaderComponent_Template(rf, ctx) { if (rf & 1) {
77
+ i0.ɵɵtemplate(0, TdFlavoredMarkdownLoaderComponent_mat_progress_bar_0_Template, 1, 1, "mat-progress-bar", 0);
78
+ i0.ɵɵtemplate(1, TdFlavoredMarkdownLoaderComponent_td_flavored_markdown_1_Template, 1, 5, "td-flavored-markdown", 1);
79
+ } if (rf & 2) {
80
+ i0.ɵɵproperty("ngIf", ctx.loading);
81
+ i0.ɵɵadvance(1);
82
+ i0.ɵɵproperty("ngIf", !ctx.loading);
83
+ } }, directives: [i2.NgIf, i3.MatProgressBar, i2.NgClass, i4.TdFlavoredMarkdownComponent], styles: ["[_nghost-%COMP%]{display:block}.sticky[_ngcontent-%COMP%]{position:absolute;top:0}.delay[_ngcontent-%COMP%]{animation:delay-animation;animation-duration:.6s}@keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}"], changeDetection: 0 });
84
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownLoaderComponent, [{
85
+ type: Component,
86
+ args: [{ selector: 'td-flavored-markdown-loader', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-progress-bar\n [ngClass]=\"'delay'\"\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n color=\"accent\"\n class=\"sticky\"\n></mat-progress-bar>\n<td-flavored-markdown\n *ngIf=\"!loading\"\n [content]=\"content\"\n [hostedUrl]=\"url ?? ''\"\n [anchor]=\"anchor ?? ''\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n (contentReady)=\"contentReady.emit()\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n></td-flavored-markdown>\n", styles: [":host{display:block}.sticky{position:absolute;top:0}.delay{animation:delay-animation;animation-duration:.6s}@keyframes delay-animation{0%{opacity:0}99%{opacity:0}to{opacity:1}}\n"] }]
87
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TdMarkdownLoaderService }]; }, { url: [{
88
+ type: Input
89
+ }], httpOptions: [{
90
+ type: Input
91
+ }], anchor: [{
92
+ type: Input
93
+ }], copyCodeToClipboard: [{
94
+ type: Input
95
+ }], copyCodeTooltips: [{
96
+ type: Input
97
+ }], contentReady: [{
98
+ type: Output
99
+ }], loadFailed: [{
100
+ type: Output
101
+ }], buttonClicked: [{
102
+ type: Output
103
+ }] }); })();
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tZmxhdm9yZWQvc3JjL2xpYi9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIvZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tZmxhdm9yZWQvc3JjL2xpYi9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIvZmxhdm9yZWQtbWFya2Rvd24tbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLGlCQUFpQixFQUdqQixNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztJQ1Y3RCxzQ0FNb0I7O0lBTGxCLGlDQUFtQjs7OztJQU1yQiwrQ0FTQztJQUZDLDJOQUFnQiwwQkFBbUIsSUFBQyxzTkFDbkIsaUNBQTBCLElBRFA7SUFFckMsaUJBQXVCOzs7OztJQVB0Qix3Q0FBbUIsc0ZBQUEsc0ZBQUEsbURBQUEsNkNBQUE7O0FES3JCLDRDQUE0QztBQVE1QyxNQUFNLE9BQU8saUNBQWlDO0lBb0Q1QyxZQUNVLGtCQUFxQyxFQUNyQyx5QkFBa0Q7UUFEbEQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyw4QkFBeUIsR0FBekIseUJBQXlCLENBQXlCO1FBbkM1RDs7Ozs7V0FLRztRQUNNLHdCQUFtQixHQUFJLEtBQUssQ0FBQztRQUV0Qzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQXVCLEVBQUUsQ0FBQztRQUVuRDs7O1dBR0c7UUFDTyxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhFOzs7V0FHRztRQUNPLGVBQVUsR0FBd0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVyRCxrQkFBYSxHQUNyQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3JCLFlBQU8sR0FBRyxJQUFJLENBQUM7SUFLWixDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLElBQUk7WUFDRixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FDdEQsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFjLENBQUMsQ0FBQztTQUN0QztnQkFBUztZQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7O2tIQTdFVSxpQ0FBaUM7b0ZBQWpDLGlDQUFpQztRQ3RCOUMsNEdBTW9CO1FBQ3BCLG9IQVN3Qjs7UUFkckIsa0NBQWE7UUFNYixlQUFjO1FBQWQsbUNBQWM7O3VGRGNKLGlDQUFpQztjQU43QyxTQUFTOzJCQUNFLDZCQUE2QixtQkFHdEIsdUJBQXVCLENBQUMsTUFBTTswR0FPdEMsR0FBRztrQkFBWCxLQUFLO1lBTUcsV0FBVztrQkFBbkIsS0FBSztZQU1HLE1BQU07a0JBQWQsS0FBSztZQVFHLG1CQUFtQjtrQkFBM0IsS0FBSztZQU9HLGdCQUFnQjtrQkFBeEIsS0FBSztZQU1JLFlBQVk7a0JBQXJCLE1BQU07WUFNRyxVQUFVO2tCQUFuQixNQUFNO1lBRUcsYUFBYTtrQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZE1hcmtkb3duTG9hZGVyU2VydmljZSB9IGZyb20gJ0Bjb3ZhbGVudC9tYXJrZG93bic7XG5pbXBvcnQgeyBJVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ2xpY2tFdmVudCB9IGZyb20gJy4uL2ZsYXZvcmVkLW1hcmtkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQ29weUNvZGVUb29sdGlwcyB9IGZyb20gJ0Bjb3ZhbGVudC9oaWdobGlnaHQnO1xuXG4vLyBUT0RPOiBtYWtlIGEgdGQtbWFya2Rvd24tbG9hZGVyIGNvbXBvbmVudFxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXInLFxuICBzdHlsZVVybHM6IFsnLi9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZsYXZvcmVkLW1hcmtkb3duLWxvYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZEZsYXZvcmVkTWFya2Rvd25Mb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogdXJsOiBzdHJpbmdcbiAgICogVGhlIHVybCBvZiB0aGUgbWFya2Rvd24gZmlsZS5cbiAgICovXG4gIEBJbnB1dCgpIHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogaHR0cE9wdGlvbnM6IG9iamVjdFxuICAgKiBIVFRQIG9wdGlvbnMgdGhhdCBjYW4gYmUgcGFydCBvZiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIEBJbnB1dCgpIGh0dHBPcHRpb25zPzogb2JqZWN0O1xuXG4gIC8qKlxuICAgKiBhbmNob3I6IHN0cmluZ1xuICAgKiBBbmNob3IgdG8ganVtcCB0by5cbiAgICovXG4gIEBJbnB1dCgpIGFuY2hvcj86IHN0cmluZztcblxuICAvKipcbiAgICogY29weUNvZGVUb0NsaXBib2FyZD86IGJvb2xlYW5cbiAgICpcbiAgICogRGlzcGxheSBjb3B5IGJ1dHRvbiBvbiBjb2RlIHNuaXBwZXRzIHRvIGNvcHkgY29kZSB0byBjbGlwYm9hcmQuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvQ2xpcGJvYXJkPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHNcbiAgICpcbiAgICogVG9vbHRpcHMgZm9yIGNvcHkgYnV0dG9uIHRvIGNvcHkgYW5kIHVwb24gY29weWluZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBjb250ZW50UmVhZHk6IHZvaWRcbiAgICogRW1pdHRlZCB3aGVuIG1hcmtkb3duIHJlbmRlcmluZyBpcyBmaW5pc2hlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBjb250ZW50UmVhZHk6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogbG9hZEZhaWxlZDogRXJyb3JcbiAgICogRW1pdHRlZCB3aGVuIGxvYWRpbmcgb2YgbWFya2Rvd24gZmlsZSBmYWlscy5cbiAgICovXG4gIEBPdXRwdXQoKSBsb2FkRmFpbGVkOiBFdmVudEVtaXR0ZXI8RXJyb3I+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8SVRkRmxhdm9yZWRNYXJrZG93bkJ1dHRvbkNsaWNrRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29udGVudCE6IHN0cmluZztcbiAgbG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX21hcmtkb3duVXJsTG9hZGVyU2VydmljZTogVGRNYXJrZG93bkxvYWRlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndXJsJ10gfHwgY2hhbmdlc1snaHR0cE9wdGlvbnMnXSkge1xuICAgICAgdGhpcy5sb2FkTWFya2Rvd24oKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTWFya2Rvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jb250ZW50ID0gYXdhaXQgdGhpcy5fbWFya2Rvd25VcmxMb2FkZXJTZXJ2aWNlLmxvYWQoXG4gICAgICAgIHRoaXMudXJsID8/ICcnLFxuICAgICAgICB0aGlzLmh0dHBPcHRpb25zXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvYWRGYWlsZWQuZW1pdChlcnJvciBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LXByb2dyZXNzLWJhclxuICBbbmdDbGFzc109XCInZGVsYXknXCJcbiAgKm5nSWY9XCJsb2FkaW5nXCJcbiAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICBjb2xvcj1cImFjY2VudFwiXG4gIGNsYXNzPVwic3RpY2t5XCJcbj48L21hdC1wcm9ncmVzcy1iYXI+XG48dGQtZmxhdm9yZWQtbWFya2Rvd25cbiAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICBbaG9zdGVkVXJsXT1cInVybCA/PyAnJ1wiXG4gIFthbmNob3JdPVwiYW5jaG9yID8/ICcnXCJcbiAgW2NvcHlDb2RlVG9DbGlwYm9hcmRdPVwiY29weUNvZGVUb0NsaXBib2FyZFwiXG4gIFtjb3B5Q29kZVRvb2x0aXBzXT1cImNvcHlDb2RlVG9vbHRpcHNcIlxuICAoY29udGVudFJlYWR5KT1cImNvbnRlbnRSZWFkeS5lbWl0KClcIlxuICAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25DbGlja2VkLmVtaXQoJGV2ZW50KVwiXG4+PC90ZC1mbGF2b3JlZC1tYXJrZG93bj5cbiJdfQ==
@@ -0,0 +1,492 @@
1
+ import { Component, Directive, Input, Renderer2, ChangeDetectorRef, EventEmitter, Output, ViewContainerRef, ComponentFactoryResolver, Injector, ViewChild, ChangeDetectionStrategy, ElementRef, HostBinding, } from '@angular/core';
2
+ import { MatCheckbox } from '@angular/material/checkbox';
3
+ import { MatSort } from '@angular/material/sort';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import { TdFlavoredListComponent, } from './cfm-list/cfm-list.component';
6
+ import { TdHighlightComponent } from '@covalent/highlight';
7
+ import { TdMarkdownComponent, scrollToAnchor } from '@covalent/markdown';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/material/table";
10
+ import * as i2 from "@angular/material/sort";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@angular/material/button";
13
+ function TdFlavoredMarkdownTableComponent_ng_template_1_mat_header_cell_1_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "mat-header-cell", 7);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const column_r3 = i0.ɵɵnextContext().$implicit;
19
+ i0.ɵɵadvance(1);
20
+ i0.ɵɵtextInterpolate(column_r3.label);
21
+ } }
22
+ function TdFlavoredMarkdownTableComponent_ng_template_1_mat_cell_2_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "mat-cell");
24
+ i0.ɵɵtext(1);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const row_r7 = ctx.$implicit;
28
+ const column_r3 = i0.ɵɵnextContext().$implicit;
29
+ i0.ɵɵadvance(1);
30
+ i0.ɵɵtextInterpolate(row_r7[column_r3.name]);
31
+ } }
32
+ function TdFlavoredMarkdownTableComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelementContainerStart(0, 4);
34
+ i0.ɵɵtemplate(1, TdFlavoredMarkdownTableComponent_ng_template_1_mat_header_cell_1_Template, 2, 1, "mat-header-cell", 5);
35
+ i0.ɵɵtemplate(2, TdFlavoredMarkdownTableComponent_ng_template_1_mat_cell_2_Template, 2, 1, "mat-cell", 6);
36
+ i0.ɵɵelementContainerEnd();
37
+ } if (rf & 2) {
38
+ const column_r3 = ctx.$implicit;
39
+ i0.ɵɵproperty("matColumnDef", column_r3.name);
40
+ } }
41
+ function TdFlavoredMarkdownTableComponent_mat_header_row_2_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelement(0, "mat-header-row");
43
+ } }
44
+ function TdFlavoredMarkdownTableComponent_mat_row_3_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelement(0, "mat-row");
46
+ } }
47
+ const _c0 = ["*"];
48
+ export class TdFlavoredMarkdownTableComponent {
49
+ constructor() {
50
+ this.columnDefs = [];
51
+ }
52
+ ngOnInit() {
53
+ this.displayedColumns = this.columnDefs.map((c) => c.name);
54
+ this.dataSource = new MatTableDataSource(this.data);
55
+ }
56
+ ngAfterViewInit() {
57
+ this.dataSource.sort = this.sort;
58
+ }
59
+ }
60
+ TdFlavoredMarkdownTableComponent.ɵfac = function TdFlavoredMarkdownTableComponent_Factory(t) { return new (t || TdFlavoredMarkdownTableComponent)(); };
61
+ TdFlavoredMarkdownTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdFlavoredMarkdownTableComponent, selectors: [["ng-component"]], viewQuery: function TdFlavoredMarkdownTableComponent_Query(rf, ctx) { if (rf & 1) {
62
+ i0.ɵɵviewQuery(MatSort, 5);
63
+ } if (rf & 2) {
64
+ let _t;
65
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sort = _t.first);
66
+ } }, inputs: { columnDefs: "columnDefs", data: "data" }, decls: 4, vars: 4, consts: [["matSort", "", 3, "dataSource"], ["ngFor", "", 3, "ngForOf"], [4, "matHeaderRowDef"], [4, "matRowDef", "matRowDefColumns"], [3, "matColumnDef"], ["mat-sort-header", "", 4, "matHeaderCellDef"], [4, "matCellDef"], ["mat-sort-header", ""]], template: function TdFlavoredMarkdownTableComponent_Template(rf, ctx) { if (rf & 1) {
67
+ i0.ɵɵelementStart(0, "mat-table", 0);
68
+ i0.ɵɵtemplate(1, TdFlavoredMarkdownTableComponent_ng_template_1_Template, 3, 1, "ng-template", 1);
69
+ i0.ɵɵtemplate(2, TdFlavoredMarkdownTableComponent_mat_header_row_2_Template, 1, 0, "mat-header-row", 2);
70
+ i0.ɵɵtemplate(3, TdFlavoredMarkdownTableComponent_mat_row_3_Template, 1, 0, "mat-row", 3);
71
+ i0.ɵɵelementEnd();
72
+ } if (rf & 2) {
73
+ i0.ɵɵproperty("dataSource", ctx.dataSource);
74
+ i0.ɵɵadvance(1);
75
+ i0.ɵɵproperty("ngForOf", ctx.columnDefs);
76
+ i0.ɵɵadvance(1);
77
+ i0.ɵɵproperty("matHeaderRowDef", ctx.displayedColumns);
78
+ i0.ɵɵadvance(1);
79
+ i0.ɵɵproperty("matRowDefColumns", ctx.displayedColumns);
80
+ } }, directives: [i1.MatTable, i2.MatSort, i3.NgForOf, i1.MatColumnDef, i1.MatHeaderCellDef, i1.MatHeaderCell, i2.MatSortHeader, i1.MatCellDef, i1.MatCell, i1.MatHeaderRowDef, i1.MatHeaderRow, i1.MatRowDef, i1.MatRow], encapsulation: 2 });
81
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownTableComponent, [{
82
+ type: Component,
83
+ args: [{
84
+ template: `
85
+ <mat-table [dataSource]="dataSource" matSort>
86
+ <!-- Column Definition -->
87
+ <ng-template ngFor let-column [ngForOf]="columnDefs">
88
+ <ng-container [matColumnDef]="column.name">
89
+ <mat-header-cell *matHeaderCellDef mat-sort-header>{{
90
+ column.label
91
+ }}</mat-header-cell>
92
+ <mat-cell *matCellDef="let row">{{ row[column.name] }}</mat-cell>
93
+ </ng-container>
94
+ </ng-template>
95
+ <!-- Header and Row Declarations -->
96
+ <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
97
+ <mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
98
+ </mat-table>
99
+ `,
100
+ }]
101
+ }], null, { columnDefs: [{
102
+ type: Input
103
+ }], data: [{
104
+ type: Input
105
+ }], sort: [{
106
+ type: ViewChild,
107
+ args: [MatSort]
108
+ }] }); })();
109
+ export class TdFlavoredMarkdownButtonComponent {
110
+ constructor() {
111
+ this.display = 'inline-block';
112
+ this.text = '';
113
+ this.data = '';
114
+ this.clicked = new EventEmitter();
115
+ }
116
+ emitClick() {
117
+ this.clicked.emit({ text: this.text, data: this.data });
118
+ }
119
+ }
120
+ TdFlavoredMarkdownButtonComponent.ɵfac = function TdFlavoredMarkdownButtonComponent_Factory(t) { return new (t || TdFlavoredMarkdownButtonComponent)(); };
121
+ TdFlavoredMarkdownButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdFlavoredMarkdownButtonComponent, selectors: [["ng-component"]], hostVars: 2, hostBindings: function TdFlavoredMarkdownButtonComponent_HostBindings(rf, ctx) { if (rf & 2) {
122
+ i0.ɵɵstyleProp("display", ctx.display);
123
+ } }, inputs: { text: "text", data: "data" }, outputs: { clicked: "clicked" }, decls: 2, vars: 1, consts: [["mat-raised-button", "", 3, "click"]], template: function TdFlavoredMarkdownButtonComponent_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelementStart(0, "button", 0);
125
+ i0.ɵɵlistener("click", function TdFlavoredMarkdownButtonComponent_Template_button_click_0_listener() { return ctx.emitClick(); });
126
+ i0.ɵɵtext(1);
127
+ i0.ɵɵelementEnd();
128
+ } if (rf & 2) {
129
+ i0.ɵɵadvance(1);
130
+ i0.ɵɵtextInterpolate1(" ", ctx.text, " ");
131
+ } }, directives: [i4.MatButton], encapsulation: 2 });
132
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownButtonComponent, [{
133
+ type: Component,
134
+ args: [{
135
+ template: `
136
+ <button mat-raised-button (click)="emitClick()">
137
+ {{ text }}
138
+ </button>
139
+ `,
140
+ }]
141
+ }], null, { display: [{
142
+ type: HostBinding,
143
+ args: ['style.display']
144
+ }], text: [{
145
+ type: Input
146
+ }], data: [{
147
+ type: Input
148
+ }], clicked: [{
149
+ type: Output
150
+ }] }); })();
151
+ export class TdFlavoredMarkdownContainerDirective {
152
+ constructor(viewContainerRef, _renderer) {
153
+ this.viewContainerRef = viewContainerRef;
154
+ this._renderer = _renderer;
155
+ }
156
+ clear() {
157
+ this._renderer.setProperty(this.viewContainerRef.element.nativeElement, 'innerHTML', '');
158
+ this.viewContainerRef.clear();
159
+ }
160
+ }
161
+ TdFlavoredMarkdownContainerDirective.ɵfac = function TdFlavoredMarkdownContainerDirective_Factory(t) { return new (t || TdFlavoredMarkdownContainerDirective)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i0.Renderer2)); };
162
+ TdFlavoredMarkdownContainerDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TdFlavoredMarkdownContainerDirective, selectors: [["", "tdFlavoredMarkdownContainer", ""]] });
163
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownContainerDirective, [{
164
+ type: Directive,
165
+ args: [{
166
+ selector: '[tdFlavoredMarkdownContainer]',
167
+ }]
168
+ }], function () { return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }]; }, null); })();
169
+ export class TdFlavoredMarkdownComponent {
170
+ constructor(_componentFactoryResolver, _renderer, _changeDetectorRef, _injector, _elementRef) {
171
+ this._componentFactoryResolver = _componentFactoryResolver;
172
+ this._renderer = _renderer;
173
+ this._changeDetectorRef = _changeDetectorRef;
174
+ this._injector = _injector;
175
+ this._elementRef = _elementRef;
176
+ this._simpleLineBreaks = false;
177
+ this._components = {};
178
+ this._viewInit = false;
179
+ /**
180
+ * copyCodeToClipboard?: boolean
181
+ *
182
+ * Display copy button on code snippets to copy code to clipboard.
183
+ *
184
+ */
185
+ this.copyCodeToClipboard = false;
186
+ /**
187
+ * copyCodeTooltips?: ICopyCodeTooltips
188
+ *
189
+ * Tooltips for copy button to copy and upon copying.
190
+ */
191
+ this.copyCodeTooltips = {};
192
+ /**
193
+ * contentReady?: function
194
+ * Event emitted after the markdown content rendering is finished.
195
+ */
196
+ this.contentReady = new EventEmitter();
197
+ /**
198
+ * buttonClicked?: ITdFlavoredMarkdownButtonClickEvent
199
+ * Event emitted when a button is clicked
200
+ * Is an object containing text and data of button
201
+ */
202
+ this.buttonClicked = new EventEmitter();
203
+ }
204
+ /**
205
+ * content?: string
206
+ *
207
+ * Markdown format content to be parsed as material/covalent markup.
208
+ *
209
+ * e.g. README.md content.
210
+ */
211
+ set content(content) {
212
+ this._content = content;
213
+ }
214
+ /**
215
+ * simpleLineBreaks?: string
216
+ *
217
+ * Sets whether newline characters inside paragraphs and spans are parsed as <br/>.
218
+ * Defaults to false.
219
+ */
220
+ set simpleLineBreaks(simpleLineBreaks) {
221
+ this._simpleLineBreaks = simpleLineBreaks;
222
+ }
223
+ /**
224
+ * hostedUrl?: string
225
+ *
226
+ * If markdown contains relative paths, this is required to generate correct urls
227
+ *
228
+ */
229
+ set hostedUrl(hostedUrl) {
230
+ this._hostedUrl = hostedUrl;
231
+ }
232
+ /**
233
+ * anchor?: string
234
+ *
235
+ * Anchor to jump to
236
+ *
237
+ */
238
+ set anchor(anchor) {
239
+ this._anchor = anchor;
240
+ }
241
+ ngOnChanges(changes) {
242
+ // only anchor changed
243
+ if (changes['anchor'] &&
244
+ !changes['content'] &&
245
+ !changes['simpleLineBreaks'] &&
246
+ !changes['hostedUrl']) {
247
+ scrollToAnchor(this._elementRef.nativeElement, this._anchor, false);
248
+ }
249
+ else {
250
+ this.refresh();
251
+ }
252
+ }
253
+ ngAfterViewInit() {
254
+ if (!this._content) {
255
+ this._loadContent(this.container.viewContainerRef.element.nativeElement
256
+ .textContent ?? '');
257
+ Promise.resolve().then(() => {
258
+ this._viewInit = true;
259
+ this._changeDetectorRef.markForCheck();
260
+ });
261
+ }
262
+ }
263
+ refresh() {
264
+ if (this._content) {
265
+ this._loadContent(this._content);
266
+ }
267
+ else if (this._viewInit) {
268
+ this._loadContent(this.container.viewContainerRef.element.nativeElement
269
+ .textContent ?? '');
270
+ }
271
+ this._changeDetectorRef.markForCheck();
272
+ }
273
+ _loadContent(markdown) {
274
+ if (markdown && markdown.trim().length > 0) {
275
+ this.container.clear();
276
+ markdown = markdown
277
+ .replace(/^(\s|\t)*\n+/g, '')
278
+ .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
279
+ // Split markdown by line characters
280
+ let lines = markdown.split('\n');
281
+ // check how much indentation is used by the first actual markdown line
282
+ const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
283
+ const firstLineWhitespace = firstLineWhitespaceMatch
284
+ ? firstLineWhitespaceMatch[0]
285
+ : null;
286
+ // Remove all indentation spaces so markdown can be parsed correctly
287
+ const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
288
+ lines = lines.map(function (line) {
289
+ return line.replace(startingWhitespaceRegex, '');
290
+ });
291
+ // Join lines again with line characters
292
+ markdown = [...lines, '', ''].join('\n');
293
+ markdown = this._replaceCodeBlocks(markdown);
294
+ markdown = this._replaceCheckbox(markdown);
295
+ markdown = this._replaceTables(markdown);
296
+ markdown = this._replaceLists(markdown);
297
+ markdown = this._replaceButtons(markdown);
298
+ const keys = Object.keys(this._components);
299
+ // need to sort the placeholders in order of encounter in markdown content
300
+ keys.sort((compA, compB) => {
301
+ return markdown.indexOf(compA) > markdown.indexOf(compB) ? 1 : -1;
302
+ });
303
+ this._render(markdown, keys[0], keys);
304
+ // TODO: timeout required since resizing of html elements occurs which causes a change in the scroll position
305
+ setTimeout(() => scrollToAnchor(this._elementRef.nativeElement, this._anchor, false), 250);
306
+ this.contentReady.emit();
307
+ Promise.resolve().then(() => {
308
+ this._changeDetectorRef.markForCheck();
309
+ });
310
+ }
311
+ }
312
+ _render(markdown, key, keys) {
313
+ if (!markdown) {
314
+ return;
315
+ }
316
+ if (key && markdown.indexOf(key) > -1) {
317
+ const markdownParts = markdown.split(key);
318
+ keys.shift();
319
+ this._render(markdownParts[0], '', []);
320
+ this.container.viewContainerRef.insert(this._components[key].hostView, this.container.viewContainerRef.length);
321
+ delete this._components[key];
322
+ this._render(markdownParts[1], keys[0], keys);
323
+ }
324
+ else {
325
+ const contentRef = this._componentFactoryResolver
326
+ .resolveComponentFactory(TdMarkdownComponent)
327
+ .create(this._injector);
328
+ contentRef.instance.content = markdown;
329
+ contentRef.instance.hostedUrl = this._hostedUrl;
330
+ contentRef.instance.simpleLineBreaks = this._simpleLineBreaks;
331
+ contentRef.instance.refresh();
332
+ this.container.viewContainerRef.insert(contentRef.hostView, this.container.viewContainerRef.length);
333
+ }
334
+ }
335
+ _replaceComponent(markdown, type, regExp, replacerFunc) {
336
+ let componentIndex = 0;
337
+ return markdown.replace(regExp, (...args) => {
338
+ const componentFactory = this._componentFactoryResolver.resolveComponentFactory(type);
339
+ const componentRef = componentFactory.create(this._injector);
340
+ replacerFunc(componentRef, ...args);
341
+ const key = '[' +
342
+ componentFactory.selector +
343
+ '-placeholder-' +
344
+ componentIndex++ +
345
+ ']';
346
+ this._components[key] = componentRef;
347
+ return key;
348
+ });
349
+ }
350
+ _replaceCheckbox(markdown) {
351
+ const checkboxRegExp = /(?:^|\n)- \[(x| )\](.*)/gi;
352
+ return this._replaceComponent(markdown, MatCheckbox, checkboxRegExp, (componentRef, match, checked, label) => {
353
+ componentRef.instance.checked = !!checked.trim();
354
+ componentRef.instance.disabled = true;
355
+ componentRef.instance.labelPosition = 'after';
356
+ this._renderer.setProperty((componentRef.instance._elementRef.nativeElement).getElementsByClassName('mat-checkbox-label')[0], 'innerHTML', label);
357
+ });
358
+ }
359
+ _replaceButtons(markdown) {
360
+ const buttonRegExp = /\[([^[]+)\](\(#data=(.*)\))/i;
361
+ const globalButtonRegExp = new RegExp(buttonRegExp.source, buttonRegExp.flags + 'g');
362
+ return this._replaceComponent(markdown, TdFlavoredMarkdownButtonComponent, globalButtonRegExp, (componentRef, match) => {
363
+ const matches = buttonRegExp.exec(match);
364
+ if (!matches) {
365
+ return;
366
+ }
367
+ const text = matches[1];
368
+ const data = matches[3];
369
+ componentRef.instance.text = text;
370
+ componentRef.instance.data = data;
371
+ componentRef.instance.clicked.subscribe((clickEvent) => this.buttonClicked.emit(clickEvent));
372
+ });
373
+ }
374
+ _replaceCodeBlocks(markdown) {
375
+ const codeBlockRegExp = /(?:^|\n)```(.*)\n([\s\S]*?)\n```/g;
376
+ return this._replaceComponent(markdown, TdHighlightComponent, codeBlockRegExp, (componentRef, match, language, codeblock) => {
377
+ if (language) {
378
+ componentRef.instance.codeLang = language;
379
+ }
380
+ componentRef.instance.copyCodeToClipboard = this.copyCodeToClipboard;
381
+ componentRef.instance.copyCodeTooltips = this.copyCodeTooltips;
382
+ componentRef.instance.content = codeblock;
383
+ });
384
+ }
385
+ _replaceTables(markdown) {
386
+ const tableRgx = /^ {0,3}\|?.+\|.+\n[ \t]{0,3}\|?[ \t]*:?[ \t]*(?:-|=){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:-|=){2,}[\s\S]+?(?:\n\n|~0)/gm;
387
+ return this._replaceComponent(markdown, TdFlavoredMarkdownTableComponent, tableRgx, (componentRef, match) => {
388
+ const dataTableLines = match
389
+ .replace(/(\s|\t)*\n+(\s|\t)*$/g, '')
390
+ .split('\n');
391
+ const columns = dataTableLines[0]
392
+ .split('|')
393
+ .filter((col) => {
394
+ return col;
395
+ })
396
+ .map((s) => {
397
+ return s.trim();
398
+ });
399
+ const alignment = dataTableLines[1]
400
+ .split('|')
401
+ .filter((v) => {
402
+ return v;
403
+ })
404
+ .map((s) => {
405
+ return s.trim();
406
+ });
407
+ const data = [];
408
+ for (let i = 2; i < dataTableLines.length; i++) {
409
+ const rowSplit = dataTableLines[i]
410
+ .split('|')
411
+ .filter((cell) => {
412
+ return cell;
413
+ })
414
+ .map((s) => {
415
+ return s.trim();
416
+ });
417
+ const row = {};
418
+ columns.forEach((col, index) => {
419
+ const rowSplitCell = rowSplit[index];
420
+ if (rowSplitCell) {
421
+ row[col.toLowerCase().trim()] = rowSplitCell.replace(/`(.*)`/, (m, value) => {
422
+ return value;
423
+ });
424
+ }
425
+ });
426
+ data.push(row);
427
+ }
428
+ componentRef.instance.columnDefs = columns.map((col, index) => {
429
+ return {
430
+ label: col,
431
+ name: col.toLowerCase().trim(),
432
+ numeric: /^--*[ \t]*:[ \t]*$/.test(alignment[index]),
433
+ };
434
+ });
435
+ componentRef.instance.data = data;
436
+ });
437
+ }
438
+ _replaceLists(markdown) {
439
+ const listRegExp = /(?:^|\n)(( *\+)[ |\t](.*)\n)+/g;
440
+ return this._replaceComponent(markdown, TdFlavoredListComponent, listRegExp, (componentRef, match) => {
441
+ const lineTexts = match.split(new RegExp('\\n {' + (match.indexOf('+') - 1).toString() + '}\\+[ |\\t]'));
442
+ lineTexts.shift();
443
+ const lines = [];
444
+ lineTexts.forEach((text) => {
445
+ const sublineTexts = text.split(/\n *\+ /);
446
+ lines.push({
447
+ line: sublineTexts.shift() ?? '',
448
+ sublines: sublineTexts.map((subline) => {
449
+ return subline.trim();
450
+ }),
451
+ });
452
+ });
453
+ componentRef.instance.lines = lines;
454
+ });
455
+ }
456
+ }
457
+ TdFlavoredMarkdownComponent.ɵfac = function TdFlavoredMarkdownComponent_Factory(t) { return new (t || TdFlavoredMarkdownComponent)(i0.ɵɵdirectiveInject(i0.ComponentFactoryResolver), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.ElementRef)); };
458
+ TdFlavoredMarkdownComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdFlavoredMarkdownComponent, selectors: [["td-flavored-markdown"]], viewQuery: function TdFlavoredMarkdownComponent_Query(rf, ctx) { if (rf & 1) {
459
+ i0.ɵɵviewQuery(TdFlavoredMarkdownContainerDirective, 7);
460
+ } if (rf & 2) {
461
+ let _t;
462
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.container = _t.first);
463
+ } }, inputs: { content: "content", simpleLineBreaks: "simpleLineBreaks", hostedUrl: "hostedUrl", anchor: "anchor", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, outputs: { contentReady: "contentReady", buttonClicked: "buttonClicked" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [["tdFlavoredMarkdownContainer", ""]], template: function TdFlavoredMarkdownComponent_Template(rf, ctx) { if (rf & 1) {
464
+ i0.ɵɵprojectionDef();
465
+ i0.ɵɵelementStart(0, "div", 0);
466
+ i0.ɵɵprojection(1);
467
+ i0.ɵɵelementEnd();
468
+ } }, directives: [TdFlavoredMarkdownContainerDirective], styles: ["[_nghost-%COMP%] td-markdown:first-of-type>div:first-of-type>h1:first-of-type, [_nghost-%COMP%] td-markdown:first-of-type>div:first-of-type>h2:first-of-type{margin-top:0}[_nghost-%COMP%] td-data-table, [_nghost-%COMP%] mat-checkbox{display:block}[_nghost-%COMP%] td-data-table, [_nghost-%COMP%] td-highlight, [_nghost-%COMP%] mat-checkbox:last-of-type{margin-bottom:16px}[_nghost-%COMP%] :not(pre)>code{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;padding-left:2px;padding-right:2px}[_nghost-%COMP%] td-highlight{display:flex;flex-direction:row;justify-content:space-between}"], changeDetection: 0 });
469
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TdFlavoredMarkdownComponent, [{
470
+ type: Component,
471
+ args: [{ selector: 'td-flavored-markdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div tdFlavoredMarkdownContainer>\n <ng-content></ng-content>\n</div>\n", styles: [":host ::ng-deep td-markdown:first-of-type>div:first-of-type>h1:first-of-type,:host ::ng-deep td-markdown:first-of-type>div:first-of-type>h2:first-of-type{margin-top:0}:host ::ng-deep td-data-table,:host ::ng-deep mat-checkbox{display:block}:host ::ng-deep td-data-table,:host ::ng-deep td-highlight,:host ::ng-deep mat-checkbox:last-of-type{margin-bottom:16px}:host ::ng-deep :not(pre)>code{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;padding-left:2px;padding-right:2px}:host ::ng-deep td-highlight{display:flex;flex-direction:row;justify-content:space-between}\n"] }]
472
+ }], function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ElementRef }]; }, { content: [{
473
+ type: Input
474
+ }], simpleLineBreaks: [{
475
+ type: Input
476
+ }], hostedUrl: [{
477
+ type: Input
478
+ }], anchor: [{
479
+ type: Input
480
+ }], copyCodeToClipboard: [{
481
+ type: Input
482
+ }], copyCodeTooltips: [{
483
+ type: Input
484
+ }], contentReady: [{
485
+ type: Output
486
+ }], buttonClicked: [{
487
+ type: Output
488
+ }], container: [{
489
+ type: ViewChild,
490
+ args: [TdFlavoredMarkdownContainerDirective, { static: true }]
491
+ }] }); })();
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdm9yZWQtbWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi1mbGF2b3JlZC9zcmMvbGliL2ZsYXZvcmVkLW1hcmtkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tZmxhdm9yZWQvc3JjL2xpYi9mbGF2b3JlZC1tYXJrZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUdULGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsUUFBUSxFQUVSLFNBQVMsRUFDVCx1QkFBdUIsRUFHdkIsVUFBVSxFQUNWLFdBQVcsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsR0FFeEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQXFCLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0lBbUIvRCwwQ0FBbUQ7SUFBQSxZQUVqRDtJQUFBLGlCQUFrQjs7O0lBRitCLGVBRWpEO0lBRmlELHFDQUVqRDs7O0lBQ0YsZ0NBQWdDO0lBQUEsWUFBc0I7SUFBQSxpQkFBVzs7OztJQUFqQyxlQUFzQjtJQUF0Qiw0Q0FBc0I7OztJQUp4RCxnQ0FBMkM7SUFDekMsdUhBRW9CO0lBQ3BCLHlHQUFpRTtJ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QUFFO3dCQUM3QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO2lCQUNILENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7c0dBdlpVLDJCQUEyQjs4RUFBM0IsMkJBQTJCO3VCQWtGM0Isb0NBQW9DOzs7Ozs7UUN0TmpELDhCQUFpQztRQUMvQixrQkFBeUI7UUFDM0IsaUJBQU07c0JEdUdPLG9DQUFvQzt1RkEyQnBDLDJCQUEyQjtjQU52QyxTQUFTOzJCQUNFLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNO21MQWtCM0MsT0FBTztrQkFEVixLQUFLO1lBWUYsZ0JBQWdCO2tCQURuQixLQUFLO1lBWUYsU0FBUztrQkFEWixLQUFLO1lBWUYsTUFBTTtrQkFEVCxLQUFLO1lBV0csbUJBQW1CO2tCQUEzQixLQUFLO1lBT0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBS0ksWUFBWTtrQkFBckIsTUFBTTtZQVNQLGFBQWE7a0JBRFosTUFBTTtZQUlQLFNBQVM7a0JBRFIsU0FBUzttQkFBQyxvQ0FBb0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIERpcmVjdGl2ZSxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5wdXQsXG4gIFJlbmRlcmVyMixcbiAgVHlwZSxcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEluamVjdG9yLFxuICBDb21wb25lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdENoZWNrYm94IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHtcbiAgVGRGbGF2b3JlZExpc3RDb21wb25lbnQsXG4gIElGbGF2b3JlZExpc3RJdGVtLFxufSBmcm9tICcuL2NmbS1saXN0L2NmbS1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZEhpZ2hsaWdodENvbXBvbmVudCwgSUNvcHlDb2RlVG9vbHRpcHMgfSBmcm9tICdAY292YWxlbnQvaGlnaGxpZ2h0JztcblxuaW1wb3J0IHsgVGRNYXJrZG93bkNvbXBvbmVudCwgc2Nyb2xsVG9BbmNob3IgfSBmcm9tICdAY292YWxlbnQvbWFya2Rvd24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50IHtcbiAgdGV4dDogc3RyaW5nO1xuICBkYXRhOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRkRmxhdm9yZWRNYXJrRG93blRhYmxlQ29sdW1uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1lcmljOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgPCEtLSBDb2x1bW4gRGVmaW5pdGlvbiAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uIFtuZ0Zvck9mXT1cImNvbHVtbkRlZnNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3tcbiAgICAgICAgICAgIGNvbHVtbi5sYWJlbFxuICAgICAgICAgIH19PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPnt7IHJvd1tjb2x1bW4ubmFtZV0gfX08L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8IS0tIEhlYWRlciBhbmQgUm93IERlY2xhcmF0aW9ucyAtLT5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LXJvdz5cbiAgICA8L21hdC10YWJsZT5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgVGRGbGF2b3JlZE1hcmtkb3duVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjb2x1bW5EZWZzOiBJVGRGbGF2b3JlZE1hcmtEb3duVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSBkYXRhITogdW5rbm93bltdO1xuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xuXG4gIGRpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTx1bmtub3duPjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbkRlZnMubWFwKFxuICAgICAgKGM6IElUZEZsYXZvcmVkTWFya0Rvd25UYWJsZUNvbHVtbikgPT4gYy5uYW1lXG4gICAgKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuZGF0YSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiZW1pdENsaWNrKClcIj5cbiAgICAgIHt7IHRleHQgfX1cbiAgICA8L2J1dHRvbj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JykgZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICBASW5wdXQoKSB0ZXh0ID0gJyc7XG4gIEBJbnB1dCgpIGRhdGEgPSAnJztcbiAgQE91dHB1dCgpXG4gIGNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxJVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50PigpO1xuICBlbWl0Q2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja2VkLmVtaXQoeyB0ZXh0OiB0aGlzLnRleHQsIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGRGbGF2b3JlZE1hcmtkb3duQ29udGFpbmVyXScsXG59KVxuZXhwb3J0IGNsYXNzIFRkRmxhdm9yZWRNYXJrZG93bkNvbnRhaW5lckRpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICdpbm5lckhUTUwnLFxuICAgICAgJydcbiAgICApO1xuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIElSZXBsYWNlckZ1bmM8VD4gPSAoXG4gIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+LFxuICAuLi5hcmdzOiBhbnlbXVxuKSA9PiB2b2lkO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1mbGF2b3JlZC1tYXJrZG93bicsXG4gIHN0eWxlVXJsczogWycuL2ZsYXZvcmVkLW1hcmtkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGF2b3JlZC1tYXJrZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZEZsYXZvcmVkTWFya2Rvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIF9jb250ZW50ITogc3RyaW5nO1xuICBwcml2YXRlIF9zaW1wbGVMaW5lQnJlYWtzID0gZmFsc2U7XG4gIHByaXZhdGUgX2hvc3RlZFVybCE6IHN0cmluZztcbiAgcHJpdmF0ZSBfYW5jaG9yITogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2NvbXBvbmVudHM6IHsgW2tleTogc3RyaW5nXTogQ29tcG9uZW50UmVmPHVua25vd24+IH0gPSB7fTtcbiAgcHJpdmF0ZSBfdmlld0luaXQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICpcbiAgICogTWFya2Rvd24gZm9ybWF0IGNvbnRlbnQgdG8gYmUgcGFyc2VkIGFzIG1hdGVyaWFsL2NvdmFsZW50IG1hcmt1cC5cbiAgICpcbiAgICogZS5nLiBSRUFETUUubWQgY29udGVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIHNpbXBsZUxpbmVCcmVha3M/OiBzdHJpbmdcbiAgICpcbiAgICogU2V0cyB3aGV0aGVyIG5ld2xpbmUgY2hhcmFjdGVycyBpbnNpZGUgcGFyYWdyYXBocyBhbmQgc3BhbnMgYXJlIHBhcnNlZCBhcyA8YnIvPi5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2ltcGxlTGluZUJyZWFrcyhzaW1wbGVMaW5lQnJlYWtzOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2ltcGxlTGluZUJyZWFrcyA9IHNpbXBsZUxpbmVCcmVha3M7XG4gIH1cblxuICAvKipcbiAgICogaG9zdGVkVXJsPzogc3RyaW5nXG4gICAqXG4gICAqIElmIG1hcmtkb3duIGNvbnRhaW5zIHJlbGF0aXZlIHBhdGhzLCB0aGlzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIGNvcnJlY3QgdXJsc1xuICAgKlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGhvc3RlZFVybChob3N0ZWRVcmw6IHN0cmluZykge1xuICAgIHRoaXMuX2hvc3RlZFVybCA9IGhvc3RlZFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbmNob3I/OiBzdHJpbmdcbiAgICpcbiAgICogQW5jaG9yIHRvIGp1bXAgdG9cbiAgICpcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBhbmNob3IoYW5jaG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbmNob3IgPSBhbmNob3I7XG4gIH1cblxuICAvKipcbiAgICogY29weUNvZGVUb0NsaXBib2FyZD86IGJvb2xlYW5cbiAgICpcbiAgICogRGlzcGxheSBjb3B5IGJ1dHRvbiBvbiBjb2RlIHNuaXBwZXRzIHRvIGNvcHkgY29kZSB0byBjbGlwYm9hcmQuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvQ2xpcGJvYXJkPyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHNcbiAgICpcbiAgICogVG9vbHRpcHMgZm9yIGNvcHkgYnV0dG9uIHRvIGNvcHkgYW5kIHVwb24gY29weWluZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwcyA9IHt9O1xuICAvKipcbiAgICogY29udGVudFJlYWR5PzogZnVuY3Rpb25cbiAgICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgbWFya2Rvd24gY29udGVudCByZW5kZXJpbmcgaXMgZmluaXNoZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgY29udGVudFJlYWR5OiBFdmVudEVtaXR0ZXI8dW5kZWZpbmVkPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjx1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIGJ1dHRvbkNsaWNrZWQ/OiBJVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ2xpY2tFdmVudFxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZFxuICAgKiBJcyBhbiBvYmplY3QgY29udGFpbmluZyB0ZXh0IGFuZCBkYXRhIG9mIGJ1dHRvblxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxJVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoVGRGbGF2b3JlZE1hcmtkb3duQ29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjb250YWluZXIhOiBUZEZsYXZvcmVkTWFya2Rvd25Db250YWluZXJEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBvbmx5IGFuY2hvciBjaGFuZ2VkXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snYW5jaG9yJ10gJiZcbiAgICAgICFjaGFuZ2VzWydjb250ZW50J10gJiZcbiAgICAgICFjaGFuZ2VzWydzaW1wbGVMaW5lQnJlYWtzJ10gJiZcbiAgICAgICFjaGFuZ2VzWydob3N0ZWRVcmwnXVxuICAgICkge1xuICAgICAgc2Nyb2xsVG9BbmNob3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9hbmNob3IsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udGVudCkge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQoXG4gICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5jb250YWluZXIudmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgLnRleHRDb250ZW50ID8/ICcnXG4gICAgICApO1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZXdJbml0KSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudChcbiAgICAgICAgKDxIVE1MRWxlbWVudD50aGlzLmNvbnRhaW5lci52aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAudGV4dENvbnRlbnQgPz8gJydcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZENvbnRlbnQobWFya2Rvd246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChtYXJrZG93biAmJiBtYXJrZG93bi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgIG1hcmtkb3duID0gbWFya2Rvd25cbiAgICAgICAgLnJlcGxhY2UoL14oXFxzfFxcdCkqXFxuKy9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyhcXHN8XFx0KSpcXG4rKFxcc3xcXHQpKiQvZywgJycpO1xuICAgICAgLy8gU3BsaXQgbWFya2Rvd24gYnkgbGluZSBjaGFyYWN0ZXJzXG4gICAgICBsZXQgbGluZXM6IHN0cmluZ1tdID0gbWFya2Rvd24uc3BsaXQoJ1xcbicpO1xuXG4gICAgICAvLyBjaGVjayBob3cgbXVjaCBpbmRlbnRhdGlvbiBpcyB1c2VkIGJ5IHRoZSBmaXJzdCBhY3R1YWwgbWFya2Rvd24gbGluZVxuICAgICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoID0gbGluZXNbMF0ubWF0Y2goL14oXFxzfFxcdCkqLyk7XG4gICAgICBjb25zdCBmaXJzdExpbmVXaGl0ZXNwYWNlID0gZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoXG4gICAgICAgID8gZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoWzBdXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBpbmRlbnRhdGlvbiBzcGFjZXMgc28gbWFya2Rvd24gY2FuIGJlIHBhcnNlZCBjb3JyZWN0bHlcbiAgICAgIGNvbnN0IHN0YXJ0aW5nV2hpdGVzcGFjZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyBmaXJzdExpbmVXaGl0ZXNwYWNlKTtcbiAgICAgIGxpbmVzID0gbGluZXMubWFwKGZ1bmN0aW9uIChsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbGluZS5yZXBsYWNlKHN0YXJ0aW5nV2hpdGVzcGFjZVJlZ2V4LCAnJyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSm9pbiBsaW5lcyBhZ2FpbiB3aXRoIGxpbmUgY2hhcmFjdGVyc1xuICAgICAgbWFya2Rvd24gPSBbLi4ubGluZXMsICcnLCAnJ10uam9pbignXFxuJyk7XG4gICAgICBtYXJrZG93biA9IHRoaXMuX3JlcGxhY2VDb2RlQmxvY2tzKG1hcmtkb3duKTtcbiAgICAgIG1hcmtkb3duID0gdGhpcy5fcmVwbGFjZUNoZWNrYm94KG1hcmtkb3duKTtcbiAgICAgIG1hcmtkb3duID0gdGhpcy5fcmVwbGFjZVRhYmxlcyhtYXJrZG93bik7XG4gICAgICBtYXJrZG93biA9IHRoaXMuX3JlcGxhY2VMaXN0cyhtYXJrZG93bik7XG4gICAgICBtYXJrZG93biA9IHRoaXMuX3JlcGxhY2VCdXR0b25zKG1hcmtkb3duKTtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgICAvLyBuZWVkIHRvIHNvcnQgdGhlIHBsYWNlaG9sZGVycyBpbiBvcmRlciBvZiBlbmNvdW50ZXIgaW4gbWFya2Rvd24gY29udGVudFxuICAgICAga2V5cy5zb3J0KChjb21wQTogc3RyaW5nLCBjb21wQjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBtYXJrZG93bi5pbmRleE9mKGNvbXBBKSA+IG1hcmtkb3duLmluZGV4T2YoY29tcEIpID8gMSA6IC0xO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZW5kZXIobWFya2Rvd24sIGtleXNbMF0sIGtleXMpO1xuICAgICAgLy8gVE9ETzogdGltZW91dCByZXF1aXJlZCBzaW5jZSByZXNpemluZyBvZiBodG1sIGVsZW1lbnRzIG9jY3VycyB3aGljaCBjYXVzZXMgYSBjaGFuZ2UgaW4gdGhlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBzY3JvbGxUb0FuY2hvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2FuY2hvciwgZmFsc2UpLFxuICAgICAgICAyNTBcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbnRlbnRSZWFkeS5lbWl0KCk7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXIobWFya2Rvd246IHN0cmluZywga2V5OiBzdHJpbmcsIGtleXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCFtYXJrZG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoa2V5ICYmIG1hcmtkb3duLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICBjb25zdCBtYXJrZG93blBhcnRzOiBzdHJpbmdbXSA9IG1hcmtkb3duLnNwbGl0KGtleSk7XG4gICAgICBrZXlzLnNoaWZ0KCk7XG4gICAgICB0aGlzLl9yZW5kZXIobWFya2Rvd25QYXJ0c1swXSwgJycsIFtdKTtcbiAgICAgIHRoaXMuY29udGFpbmVyLnZpZXdDb250YWluZXJSZWYuaW5zZXJ0KFxuICAgICAgICB0aGlzLl9jb21wb25lbnRzW2tleV0uaG9zdFZpZXcsXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnZpZXdDb250YWluZXJSZWYubGVuZ3RoXG4gICAgICApO1xuICAgICAgZGVsZXRlIHRoaXMuX2NvbXBvbmVudHNba2V5XTtcbiAgICAgIHRoaXMuX3JlbmRlcihtYXJrZG93blBhcnRzWzFdLCBrZXlzWzBdLCBrZXlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udGVudFJlZjogQ29tcG9uZW50UmVmPFRkTWFya2Rvd25Db21wb25lbnQ+ID1cbiAgICAgICAgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRkTWFya2Rvd25Db21wb25lbnQpXG4gICAgICAgICAgLmNyZWF0ZSh0aGlzLl9pbmplY3Rvcik7XG4gICAgICBjb250ZW50UmVmLmluc3RhbmNlLmNvbnRlbnQgPSBtYXJrZG93bjtcbiAgICAgIGNvbnRlbnRSZWYuaW5zdGFuY2UuaG9zdGVkVXJsID0gdGhpcy5faG9zdGVkVXJsO1xuICAgICAgY29udGVudFJlZi5pbnN0YW5jZS5zaW1wbGVMaW5lQnJlYWtzID0gdGhpcy5fc2ltcGxlTGluZUJyZWFrcztcbiAgICAgIGNvbnRlbnRSZWYuaW5zdGFuY2UucmVmcmVzaCgpO1xuICAgICAgdGhpcy5jb250YWluZXIudmlld0NvbnRhaW5lclJlZi5pbnNlcnQoXG4gICAgICAgIGNvbnRlbnRSZWYuaG9zdFZpZXcsXG4gICAgICAgIHRoaXMuY29udGFpbmVyLnZpZXdDb250YWluZXJSZWYubGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlcGxhY2VDb21wb25lbnQ8VD4oXG4gICAgbWFya2Rvd246IHN0cmluZyxcbiAgICB0eXBlOiBUeXBlPFQ+LFxuICAgIHJlZ0V4cDogUmVnRXhwLFxuICAgIHJlcGxhY2VyRnVuYzogSVJlcGxhY2VyRnVuYzxUPlxuICApOiBzdHJpbmcge1xuICAgIGxldCBjb21wb25lbnRJbmRleCA9IDA7XG4gICAgcmV0dXJuIG1hcmtkb3duLnJlcGxhY2UocmVnRXhwLCAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8VD4gPVxuICAgICAgICB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodHlwZSk7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKFxuICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgKTtcbiAgICAgIHJlcGxhY2VyRnVuYyhjb21wb25lbnRSZWYsIC4uLmFyZ3MpO1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPVxuICAgICAgICAnWycgK1xuICAgICAgICBjb21wb25lbnRGYWN0b3J5LnNlbGVjdG9yICtcbiAgICAgICAgJy1wbGFjZWhvbGRlci0nICtcbiAgICAgICAgY29tcG9uZW50SW5kZXgrKyArXG4gICAgICAgICddJztcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNba2V5XSA9IGNvbXBvbmVudFJlZjtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXBsYWNlQ2hlY2tib3gobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2hlY2tib3hSZWdFeHAgPSAvKD86XnxcXG4pLSBcXFsoeHwgKVxcXSguKikvZ2k7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VDb21wb25lbnQoXG4gICAgICBtYXJrZG93bixcbiAgICAgIE1hdENoZWNrYm94LFxuICAgICAgY2hlY2tib3hSZWdFeHAsXG4gICAgICAoXG4gICAgICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE1hdENoZWNrYm94PixcbiAgICAgICAgbWF0Y2g6IHN0cmluZyxcbiAgICAgICAgY2hlY2tlZDogc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nXG4gICAgICApID0+IHtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNoZWNrZWQgPSAhIWNoZWNrZWQudHJpbSgpO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UubGFiZWxQb3NpdGlvbiA9ICdhZnRlcic7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgICAgICg8SFRNTEVsZW1lbnQ+KFxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICApKS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXQtY2hlY2tib3gtbGFiZWwnKVswXSxcbiAgICAgICAgICAnaW5uZXJIVE1MJyxcbiAgICAgICAgICBsYWJlbFxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9yZXBsYWNlQnV0dG9ucyhtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBidXR0b25SZWdFeHAgPSAvXFxbKFteW10rKVxcXShcXCgjZGF0YT0oLiopXFwpKS9pO1xuICAgIGNvbnN0IGdsb2JhbEJ1dHRvblJlZ0V4cCA9IG5ldyBSZWdFeHAoXG4gICAgICBidXR0b25SZWdFeHAuc291cmNlLFxuICAgICAgYnV0dG9uUmVnRXhwLmZsYWdzICsgJ2cnXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcmVwbGFjZUNvbXBvbmVudChcbiAgICAgIG1hcmtkb3duLFxuICAgICAgVGRGbGF2b3JlZE1hcmtkb3duQnV0dG9uQ29tcG9uZW50LFxuICAgICAgZ2xvYmFsQnV0dG9uUmVnRXhwLFxuICAgICAgKFxuICAgICAgICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25Db21wb25lbnQ+LFxuICAgICAgICBtYXRjaDogc3RyaW5nXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGJ1dHRvblJlZ0V4cC5leGVjKG1hdGNoKTtcbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IG1hdGNoZXNbMV07XG4gICAgICAgIGNvbnN0IGRhdGE6IHN0cmluZyA9IG1hdGNoZXNbM107XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50ZXh0ID0gdGV4dDtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY2xpY2tlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNsaWNrRXZlbnQ6IElUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25DbGlja0V2ZW50KSA9PlxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoY2xpY2tFdmVudClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVwbGFjZUNvZGVCbG9ja3MobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29kZUJsb2NrUmVnRXhwID0gLyg/Ol58XFxuKWBgYCguKilcXG4oW1xcc1xcU10qPylcXG5gYGAvZztcbiAgICByZXR1cm4gdGhpcy5fcmVwbGFjZUNvbXBvbmVudChcbiAgICAgIG1hcmtkb3duLFxuICAgICAgVGRIaWdobGlnaHRDb21wb25lbnQsXG4gICAgICBjb2RlQmxvY2tSZWdFeHAsXG4gICAgICAoXG4gICAgICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRkSGlnaGxpZ2h0Q29tcG9uZW50PixcbiAgICAgICAgbWF0Y2g6IHN0cmluZyxcbiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZyxcbiAgICAgICAgY29kZWJsb2NrOiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAobGFuZ3VhZ2UpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29kZUxhbmcgPSBsYW5ndWFnZTtcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29weUNvZGVUb0NsaXBib2FyZCA9IHRoaXMuY29weUNvZGVUb0NsaXBib2FyZDtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvcHlDb2RlVG9vbHRpcHMgPSB0aGlzLmNvcHlDb2RlVG9vbHRpcHM7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb250ZW50ID0gY29kZWJsb2NrO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9yZXBsYWNlVGFibGVzKG1hcmtkb3duOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlUmd4ID1cbiAgICAgIC9eIHswLDN9XFx8Py4rXFx8LitcXG5bIFxcdF17MCwzfVxcfD9bIFxcdF0qOj9bIFxcdF0qKD86LXw9KXsyLH1bIFxcdF0qOj9bIFxcdF0qXFx8WyBcXHRdKjo/WyBcXHRdKig/Oi18PSl7Mix9W1xcc1xcU10rPyg/Olxcblxcbnx+MCkvZ207XG4gICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VDb21wb25lbnQoXG4gICAgICBtYXJrZG93bixcbiAgICAgIFRkRmxhdm9yZWRNYXJrZG93blRhYmxlQ29tcG9uZW50LFxuICAgICAgdGFibGVSZ3gsXG4gICAgICAoXG4gICAgICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRkRmxhdm9yZWRNYXJrZG93blRhYmxlQ29tcG9uZW50PixcbiAgICAgICAgbWF0Y2g6IHN0cmluZ1xuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFUYWJsZUxpbmVzOiBzdHJpbmdbXSA9IG1hdGNoXG4gICAgICAgICAgLnJlcGxhY2UoLyhcXHN8XFx0KSpcXG4rKFxcc3xcXHQpKiQvZywgJycpXG4gICAgICAgICAgLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QgY29sdW1uczogc3RyaW5nW10gPSBkYXRhVGFibGVMaW5lc1swXVxuICAgICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgICAgLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYWxpZ25tZW50OiBzdHJpbmdbXSA9IGRhdGFUYWJsZUxpbmVzWzFdXG4gICAgICAgICAgLnNwbGl0KCd8JylcbiAgICAgICAgICAuZmlsdGVyKCh2OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBkYXRhVGFibGVMaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHJvd1NwbGl0OiBzdHJpbmdbXSA9IGRhdGFUYWJsZUxpbmVzW2ldXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLmZpbHRlcigoY2VsbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoKHM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCByb3c6IGFueSA9IHt9O1xuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwbGl0Q2VsbDogc3RyaW5nID0gcm93U3BsaXRbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHJvd1NwbGl0Q2VsbCkge1xuICAgICAgICAgICAgICByb3dbY29sLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA9IHJvd1NwbGl0Q2VsbC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9gKC4qKWAvLFxuICAgICAgICAgICAgICAgIChtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbHVtbkRlZnMgPSBjb2x1bW5zLm1hcChcbiAgICAgICAgICAoY29sOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGxhYmVsOiBjb2wsXG4gICAgICAgICAgICAgIG5hbWU6IGNvbC50b0xvd2VyQ2FzZSgpLnRyaW0oKSxcbiAgICAgICAgICAgICAgbnVtZXJpYzogL14tLSpbIFxcdF0qOlsgXFx0XSokLy50ZXN0KGFsaWdubWVudFtpbmRleF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRhID0gZGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVwbGFjZUxpc3RzKG1hcmtkb3duOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpc3RSZWdFeHAgPSAvKD86XnxcXG4pKCggKlxcKylbIHxcXHRdKC4qKVxcbikrL2c7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VDb21wb25lbnQoXG4gICAgICBtYXJrZG93bixcbiAgICAgIFRkRmxhdm9yZWRMaXN0Q29tcG9uZW50LFxuICAgICAgbGlzdFJlZ0V4cCxcbiAgICAgIChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUZEZsYXZvcmVkTGlzdENvbXBvbmVudD4sIG1hdGNoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbGluZVRleHRzOiBzdHJpbmdbXSA9IG1hdGNoLnNwbGl0KFxuICAgICAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXFxcXG4geycgKyAobWF0Y2guaW5kZXhPZignKycpIC0gMSkudG9TdHJpbmcoKSArICd9XFxcXCtbIHxcXFxcdF0nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBsaW5lVGV4dHMuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgbGluZXM6IElGbGF2b3JlZExpc3RJdGVtW10gPSBbXTtcbiAgICAgICAgbGluZVRleHRzLmZvckVhY2goKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YmxpbmVUZXh0czogc3RyaW5nW10gPSB0ZXh0LnNwbGl0KC9cXG4gKlxcKyAvKTtcbiAgICAgICAgICBsaW5lcy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHN1YmxpbmVUZXh0cy5zaGlmdCgpID8/ICcnLFxuICAgICAgICAgICAgc3VibGluZXM6IHN1YmxpbmVUZXh0cy5tYXAoKHN1YmxpbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gc3VibGluZS50cmltKCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5saW5lcyA9IGxpbmVzO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgdGRGbGF2b3JlZE1hcmtkb3duQ29udGFpbmVyPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatTableModule } from '@angular/material/table';
6
+ import { MatSortModule } from '@angular/material/sort';
7
+ import { MatCheckboxModule } from '@angular/material/checkbox';
8
+ import { MatListModule } from '@angular/material/list';
9
+ import { CovalentHighlightModule } from '@covalent/highlight';
10
+ import { CovalentMarkdownModule } from '@covalent/markdown';
11
+ import { TdFlavoredListComponent } from './cfm-list/cfm-list.component';
12
+ import { TdFlavoredMarkdownComponent, TdFlavoredMarkdownContainerDirective, TdFlavoredMarkdownButtonComponent, TdFlavoredMarkdownTableComponent, } from './flavored-markdown.component';
13
+ import { TdFlavoredMarkdownLoaderComponent } from './flavored-markdown-loader/flavored-markdown-loader.component';
14
+ import * as i0 from "@angular/core";
15
+ export class CovalentFlavoredMarkdownModule {
16
+ }
17
+ CovalentFlavoredMarkdownModule.ɵfac = function CovalentFlavoredMarkdownModule_Factory(t) { return new (t || CovalentFlavoredMarkdownModule)(); };
18
+ CovalentFlavoredMarkdownModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CovalentFlavoredMarkdownModule });
19
+ CovalentFlavoredMarkdownModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [[
20
+ CommonModule,
21
+ MatCheckboxModule,
22
+ MatListModule,
23
+ MatProgressBarModule,
24
+ CovalentHighlightModule,
25
+ CovalentMarkdownModule,
26
+ MatButtonModule,
27
+ MatTableModule,
28
+ MatSortModule,
29
+ ]] });
30
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CovalentFlavoredMarkdownModule, [{
31
+ type: NgModule,
32
+ args: [{
33
+ imports: [
34
+ CommonModule,
35
+ MatCheckboxModule,
36
+ MatListModule,
37
+ MatProgressBarModule,
38
+ CovalentHighlightModule,
39
+ CovalentMarkdownModule,
40
+ MatButtonModule,
41
+ MatTableModule,
42
+ MatSortModule,
43
+ ],
44
+ declarations: [
45
+ TdFlavoredListComponent,
46
+ TdFlavoredMarkdownComponent,
47
+ TdFlavoredMarkdownContainerDirective,
48
+ TdFlavoredMarkdownLoaderComponent,
49
+ TdFlavoredMarkdownButtonComponent,
50
+ TdFlavoredMarkdownTableComponent,
51
+ ],
52
+ exports: [TdFlavoredMarkdownComponent, TdFlavoredMarkdownLoaderComponent],
53
+ }]
54
+ }], null, null); })();
55
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CovalentFlavoredMarkdownModule, { declarations: [TdFlavoredListComponent,
56
+ TdFlavoredMarkdownComponent,
57
+ TdFlavoredMarkdownContainerDirective,
58
+ TdFlavoredMarkdownLoaderComponent,
59
+ TdFlavoredMarkdownButtonComponent,
60
+ TdFlavoredMarkdownTableComponent], imports: [CommonModule,
61
+ MatCheckboxModule,
62
+ MatListModule,
63
+ MatProgressBarModule,
64
+ CovalentHighlightModule,
65
+ CovalentMarkdownModule,
66
+ MatButtonModule,
67
+ MatTableModule,
68
+ MatSortModule], exports: [TdFlavoredMarkdownComponent, TdFlavoredMarkdownLoaderComponent] }); })();
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdm9yZWQtbWFya2Rvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi1mbGF2b3JlZC9zcmMvbGliL2ZsYXZvcmVkLW1hcmtkb3duLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixvQ0FBb0MsRUFDcEMsaUNBQWlDLEVBQ2pDLGdDQUFnQyxHQUNqQyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLCtEQUErRCxDQUFDOztBQXdCbEgsTUFBTSxPQUFPLDhCQUE4Qjs7NEdBQTlCLDhCQUE4QjtnRkFBOUIsOEJBQThCO29GQXJCaEM7WUFDUCxZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLGFBQWE7WUFDYixvQkFBb0I7WUFDcEIsdUJBQXVCO1lBQ3ZCLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2YsY0FBYztZQUNkLGFBQWE7U0FDZDt1RkFXVSw4QkFBOEI7Y0F0QjFDLFFBQVE7ZUFBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixpQkFBaUI7b0JBQ2pCLGFBQWE7b0JBQ2Isb0JBQW9CO29CQUNwQix1QkFBdUI7b0JBQ3ZCLHNCQUFzQjtvQkFDdEIsZUFBZTtvQkFDZixjQUFjO29CQUNkLGFBQWE7aUJBQ2Q7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLHVCQUF1QjtvQkFDdkIsMkJBQTJCO29CQUMzQixvQ0FBb0M7b0JBQ3BDLGlDQUFpQztvQkFDakMsaUNBQWlDO29CQUNqQyxnQ0FBZ0M7aUJBQ2pDO2dCQUNELE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLGlDQUFpQyxDQUFDO2FBQzFFOzt3RkFDWSw4QkFBOEIsbUJBVHZDLHVCQUF1QjtRQUN2QiwyQkFBMkI7UUFDM0Isb0NBQW9DO1FBQ3BDLGlDQUFpQztRQUNqQyxpQ0FBaUM7UUFDakMsZ0NBQWdDLGFBaEJoQyxZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixlQUFlO1FBQ2YsY0FBYztRQUNkLGFBQWEsYUFVTCwyQkFBMkIsRUFBRSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgQ292YWxlbnRIaWdobGlnaHRNb2R1bGUgfSBmcm9tICdAY292YWxlbnQvaGlnaGxpZ2h0JztcblxuaW1wb3J0IHsgQ292YWxlbnRNYXJrZG93bk1vZHVsZSB9IGZyb20gJ0Bjb3ZhbGVudC9tYXJrZG93bic7XG5pbXBvcnQgeyBUZEZsYXZvcmVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY2ZtLWxpc3QvY2ZtLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFRkRmxhdm9yZWRNYXJrZG93bkNvbXBvbmVudCxcbiAgVGRGbGF2b3JlZE1hcmtkb3duQ29udGFpbmVyRGlyZWN0aXZlLFxuICBUZEZsYXZvcmVkTWFya2Rvd25CdXR0b25Db21wb25lbnQsXG4gIFRkRmxhdm9yZWRNYXJrZG93blRhYmxlQ29tcG9uZW50LFxufSBmcm9tICcuL2ZsYXZvcmVkLW1hcmtkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZEZsYXZvcmVkTWFya2Rvd25Mb2FkZXJDb21wb25lbnQgfSBmcm9tICcuL2ZsYXZvcmVkLW1hcmtkb3duLWxvYWRlci9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRMaXN0TW9kdWxlLFxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgIENvdmFsZW50SGlnaGxpZ2h0TW9kdWxlLFxuICAgIENvdmFsZW50TWFya2Rvd25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFRkRmxhdm9yZWRMaXN0Q29tcG9uZW50LFxuICAgIFRkRmxhdm9yZWRNYXJrZG93bkNvbXBvbmVudCxcbiAgICBUZEZsYXZvcmVkTWFya2Rvd25Db250YWluZXJEaXJlY3RpdmUsXG4gICAgVGRGbGF2b3JlZE1hcmtkb3duTG9hZGVyQ29tcG9uZW50LFxuICAgIFRkRmxhdm9yZWRNYXJrZG93bkJ1dHRvbkNvbXBvbmVudCxcbiAgICBUZEZsYXZvcmVkTWFya2Rvd25UYWJsZUNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1RkRmxhdm9yZWRNYXJrZG93bkNvbXBvbmVudCwgVGRGbGF2b3JlZE1hcmtkb3duTG9hZGVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ292YWxlbnRGbGF2b3JlZE1hcmtkb3duTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './lib/flavored-markdown.component';
2
+ export * from './lib/flavored-markdown.module';
3
+ export * from './lib/flavored-markdown-loader/flavored-markdown-loader.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24tZmxhdm9yZWQvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUVBQW1FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9mbGF2b3JlZC1tYXJrZG93bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmxhdm9yZWQtbWFya2Rvd24ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZsYXZvcmVkLW1hcmtkb3duLWxvYWRlci9mbGF2b3JlZC1tYXJrZG93bi1sb2FkZXIuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface IFlavoredListItem {
3
+ line: string;
4
+ sublines?: string[];
5
+ }
6
+ export declare class TdFlavoredListComponent {
7
+ lines: IFlavoredListItem[];
8
+ dense: boolean;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredListComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredListComponent, "td-cfm-list", never, { "lines": "lines"; "dense": "dense"; }, {}, never, never>;
11
+ }
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectorRef, SimpleChanges, OnChanges, EventEmitter } from '@angular/core';
2
+ import { TdMarkdownLoaderService } from '@covalent/markdown';
3
+ import { ITdFlavoredMarkdownButtonClickEvent } from '../flavored-markdown.component';
4
+ import { ICopyCodeTooltips } from '@covalent/highlight';
5
+ import * as i0 from "@angular/core";
6
+ export declare class TdFlavoredMarkdownLoaderComponent implements OnChanges {
7
+ private _changeDetectorRef;
8
+ private _markdownUrlLoaderService;
9
+ /**
10
+ * url: string
11
+ * The url of the markdown file.
12
+ */
13
+ url?: string;
14
+ /**
15
+ * httpOptions: object
16
+ * HTTP options that can be part of the request.
17
+ */
18
+ httpOptions?: object;
19
+ /**
20
+ * anchor: string
21
+ * Anchor to jump to.
22
+ */
23
+ anchor?: string;
24
+ /**
25
+ * copyCodeToClipboard?: boolean
26
+ *
27
+ * Display copy button on code snippets to copy code to clipboard.
28
+ *
29
+ */
30
+ copyCodeToClipboard?: boolean | undefined;
31
+ /**
32
+ * copyCodeTooltips?: ICopyCodeTooltips
33
+ *
34
+ * Tooltips for copy button to copy and upon copying.
35
+ */
36
+ copyCodeTooltips?: ICopyCodeTooltips;
37
+ /**
38
+ * contentReady: void
39
+ * Emitted when markdown rendering is finished.
40
+ */
41
+ contentReady: EventEmitter<void>;
42
+ /**
43
+ * loadFailed: Error
44
+ * Emitted when loading of markdown file fails.
45
+ */
46
+ loadFailed: EventEmitter<Error>;
47
+ buttonClicked: EventEmitter<ITdFlavoredMarkdownButtonClickEvent>;
48
+ content: string;
49
+ loading: boolean;
50
+ constructor(_changeDetectorRef: ChangeDetectorRef, _markdownUrlLoaderService: TdMarkdownLoaderService);
51
+ ngOnChanges(changes: SimpleChanges): void;
52
+ loadMarkdown(): Promise<void>;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredMarkdownLoaderComponent, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredMarkdownLoaderComponent, "td-flavored-markdown-loader", never, { "url": "url"; "httpOptions": "httpOptions"; "anchor": "anchor"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; }, { "contentReady": "contentReady"; "loadFailed": "loadFailed"; "buttonClicked": "buttonClicked"; }, never, never>;
55
+ }
@@ -0,0 +1,124 @@
1
+ import { AfterViewInit, Renderer2, ChangeDetectorRef, EventEmitter, ViewContainerRef, ComponentFactoryResolver, Injector, ComponentRef, OnChanges, SimpleChanges, ElementRef, OnInit } from '@angular/core';
2
+ import { MatSort } from '@angular/material/sort';
3
+ import { MatTableDataSource } from '@angular/material/table';
4
+ import { ICopyCodeTooltips } from '@covalent/highlight';
5
+ import * as i0 from "@angular/core";
6
+ export interface ITdFlavoredMarkdownButtonClickEvent {
7
+ text: string;
8
+ data: string;
9
+ }
10
+ export interface ITdFlavoredMarkDownTableColumn {
11
+ label: string;
12
+ name: string;
13
+ numeric: boolean;
14
+ }
15
+ export declare class TdFlavoredMarkdownTableComponent implements OnInit, AfterViewInit {
16
+ columnDefs: ITdFlavoredMarkDownTableColumn[];
17
+ data: unknown[];
18
+ sort: MatSort;
19
+ displayedColumns: string[];
20
+ dataSource: MatTableDataSource<unknown>;
21
+ ngOnInit(): void;
22
+ ngAfterViewInit(): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredMarkdownTableComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredMarkdownTableComponent, "ng-component", never, { "columnDefs": "columnDefs"; "data": "data"; }, {}, never, never>;
25
+ }
26
+ export declare class TdFlavoredMarkdownButtonComponent {
27
+ display: string;
28
+ text: string;
29
+ data: string;
30
+ clicked: EventEmitter<ITdFlavoredMarkdownButtonClickEvent>;
31
+ emitClick(): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredMarkdownButtonComponent, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredMarkdownButtonComponent, "ng-component", never, { "text": "text"; "data": "data"; }, { "clicked": "clicked"; }, never, never>;
34
+ }
35
+ export declare class TdFlavoredMarkdownContainerDirective {
36
+ viewContainerRef: ViewContainerRef;
37
+ private _renderer;
38
+ constructor(viewContainerRef: ViewContainerRef, _renderer: Renderer2);
39
+ clear(): void;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredMarkdownContainerDirective, never>;
41
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TdFlavoredMarkdownContainerDirective, "[tdFlavoredMarkdownContainer]", never, {}, {}, never>;
42
+ }
43
+ export declare type IReplacerFunc<T> = (componentRef: ComponentRef<T>, ...args: any[]) => void;
44
+ export declare class TdFlavoredMarkdownComponent implements AfterViewInit, OnChanges {
45
+ private _componentFactoryResolver;
46
+ private _renderer;
47
+ private _changeDetectorRef;
48
+ private _injector;
49
+ private _elementRef;
50
+ private _content;
51
+ private _simpleLineBreaks;
52
+ private _hostedUrl;
53
+ private _anchor;
54
+ private _components;
55
+ private _viewInit;
56
+ /**
57
+ * content?: string
58
+ *
59
+ * Markdown format content to be parsed as material/covalent markup.
60
+ *
61
+ * e.g. README.md content.
62
+ */
63
+ set content(content: string);
64
+ /**
65
+ * simpleLineBreaks?: string
66
+ *
67
+ * Sets whether newline characters inside paragraphs and spans are parsed as <br/>.
68
+ * Defaults to false.
69
+ */
70
+ set simpleLineBreaks(simpleLineBreaks: boolean);
71
+ /**
72
+ * hostedUrl?: string
73
+ *
74
+ * If markdown contains relative paths, this is required to generate correct urls
75
+ *
76
+ */
77
+ set hostedUrl(hostedUrl: string);
78
+ /**
79
+ * anchor?: string
80
+ *
81
+ * Anchor to jump to
82
+ *
83
+ */
84
+ set anchor(anchor: string);
85
+ /**
86
+ * copyCodeToClipboard?: boolean
87
+ *
88
+ * Display copy button on code snippets to copy code to clipboard.
89
+ *
90
+ */
91
+ copyCodeToClipboard?: boolean | undefined;
92
+ /**
93
+ * copyCodeTooltips?: ICopyCodeTooltips
94
+ *
95
+ * Tooltips for copy button to copy and upon copying.
96
+ */
97
+ copyCodeTooltips?: ICopyCodeTooltips;
98
+ /**
99
+ * contentReady?: function
100
+ * Event emitted after the markdown content rendering is finished.
101
+ */
102
+ contentReady: EventEmitter<undefined>;
103
+ /**
104
+ * buttonClicked?: ITdFlavoredMarkdownButtonClickEvent
105
+ * Event emitted when a button is clicked
106
+ * Is an object containing text and data of button
107
+ */
108
+ buttonClicked: EventEmitter<ITdFlavoredMarkdownButtonClickEvent>;
109
+ container: TdFlavoredMarkdownContainerDirective;
110
+ constructor(_componentFactoryResolver: ComponentFactoryResolver, _renderer: Renderer2, _changeDetectorRef: ChangeDetectorRef, _injector: Injector, _elementRef: ElementRef);
111
+ ngOnChanges(changes: SimpleChanges): void;
112
+ ngAfterViewInit(): void;
113
+ refresh(): void;
114
+ private _loadContent;
115
+ private _render;
116
+ private _replaceComponent;
117
+ private _replaceCheckbox;
118
+ private _replaceButtons;
119
+ private _replaceCodeBlocks;
120
+ private _replaceTables;
121
+ private _replaceLists;
122
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdFlavoredMarkdownComponent, never>;
123
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdFlavoredMarkdownComponent, "td-flavored-markdown", never, { "content": "content"; "simpleLineBreaks": "simpleLineBreaks"; "hostedUrl": "hostedUrl"; "anchor": "anchor"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; }, { "contentReady": "contentReady"; "buttonClicked": "buttonClicked"; }, never, ["*"]>;
124
+ }
@@ -0,0 +1,18 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./cfm-list/cfm-list.component";
3
+ import * as i2 from "./flavored-markdown.component";
4
+ import * as i3 from "./flavored-markdown-loader/flavored-markdown-loader.component";
5
+ import * as i4 from "@angular/common";
6
+ import * as i5 from "@angular/material/checkbox";
7
+ import * as i6 from "@angular/material/list";
8
+ import * as i7 from "@angular/material/progress-bar";
9
+ import * as i8 from "@covalent/highlight";
10
+ import * as i9 from "@covalent/markdown";
11
+ import * as i10 from "@angular/material/button";
12
+ import * as i11 from "@angular/material/table";
13
+ import * as i12 from "@angular/material/sort";
14
+ export declare class CovalentFlavoredMarkdownModule {
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<CovalentFlavoredMarkdownModule, never>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CovalentFlavoredMarkdownModule, [typeof i1.TdFlavoredListComponent, typeof i2.TdFlavoredMarkdownComponent, typeof i2.TdFlavoredMarkdownContainerDirective, typeof i3.TdFlavoredMarkdownLoaderComponent, typeof i2.TdFlavoredMarkdownButtonComponent, typeof i2.TdFlavoredMarkdownTableComponent], [typeof i4.CommonModule, typeof i5.MatCheckboxModule, typeof i6.MatListModule, typeof i7.MatProgressBarModule, typeof i8.CovalentHighlightModule, typeof i9.CovalentMarkdownModule, typeof i10.MatButtonModule, typeof i11.MatTableModule, typeof i12.MatSortModule], [typeof i2.TdFlavoredMarkdownComponent, typeof i3.TdFlavoredMarkdownLoaderComponent]>;
17
+ static ɵinj: i0.ɵɵInjectorDeclaration<CovalentFlavoredMarkdownModule>;
18
+ }
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@covalent/flavored-markdown",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^13.2.0",
6
+ "@angular/core": "^13.2.0",
7
+ "@covalent/markdown": "0.0.1",
8
+ "showdown": "^2.0.0-alpha",
9
+ "@angular/platform-browser": "~13.2.0",
10
+ "@covalent/highlight": "0.0.1",
11
+ "highlight.js": "^11.4.0",
12
+ "@angular/cdk": "^13.2.1",
13
+ "@angular/material": "^13.2.1"
14
+ },
15
+ "dependencies": {
16
+ "tslib": "^2.3.0"
17
+ },
18
+ "module": "esm2020/covalent-flavored-markdown.mjs",
19
+ "es2020": "esm2020/covalent-flavored-markdown.mjs",
20
+ "esm2020": "esm2020/covalent-flavored-markdown.mjs",
21
+ "typings": "covalent-flavored-markdown.d.ts",
22
+ "sideEffects": false
23
+ }
@@ -0,0 +1,3 @@
1
+ export * from './lib/flavored-markdown.component';
2
+ export * from './lib/flavored-markdown.module';
3
+ export * from './lib/flavored-markdown-loader/flavored-markdown-loader.component';