@covalent/highlight 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,67 @@
1
+ ## TdTextEditorComponent: td-text-editor
2
+
3
+ `<td-text-editor>` element generates an easymde markdown editor.
4
+
5
+ ## API Summary
6
+
7
+ #### Inputs
8
+
9
+ - value?: string
10
+ - value of text in editor
11
+ - options?: object
12
+ - Options Object of valid Configurations listed here: <a href="https://github.com/Ionaru/easy-markdown-editor#configuration">https://github.com/Ionaru/easy-markdown-editor#configuration</a>
13
+
14
+ #### Properties
15
+
16
+ - isPreviewActive?: function()
17
+ - is the Preview Active. Returns boolean
18
+ - isSideBySideActive?: function()
19
+ - is the Side By Side Active. Returns boolean
20
+ - isFullscreenActive?: function()
21
+ - is Full Screen Active. Returns boolean
22
+ - clearAutosavedValue?: function()
23
+ - clears Auto Saved Value. Returns void
24
+ - toTextArea?: function()
25
+ - reverts to the Initial textarea. Returns void
26
+ - easyMDE?: function()
27
+ - getter function for the underlying easyMDE Object. Returns EasyMDE
28
+
29
+ ## Installation
30
+
31
+ This component can be installed as npm package.
32
+
33
+ ```bash
34
+ npm install @covalent/text-editor
35
+ ```
36
+
37
+ ## Setup
38
+
39
+ Import the **CovalentTextEditorModule** in your NgModule:
40
+
41
+ ```typescript
42
+ import { CovalentTextEditorModule } from '@covalent/text-editor';
43
+ @NgModule({
44
+ imports: [
45
+ CovalentTextEditorModule,
46
+ ...
47
+ ],
48
+ ...
49
+ })
50
+ export class MyModule {}
51
+ ```
52
+
53
+ ### Usage
54
+
55
+ ```html
56
+ <td-text-editor [value]="Some Text" [options]="options"></td-text-editor>
57
+ ```
58
+
59
+ ```typescript
60
+ class MyComponent {
61
+ options: any = {
62
+ lineWrapping: true,
63
+ toolbar: false,
64
+ ...
65
+ };
66
+ }
67
+ ```
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@covalent/highlight" />
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtaGlnaGxpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWhpZ2hsaWdodC9zcmMvY292YWxlbnQtaGlnaGxpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -0,0 +1,55 @@
1
+ import { Component, Input, ViewChild, HostListener } from '@angular/core';
2
+ import { MatTooltip } from '@angular/material/tooltip';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/button";
5
+ import * as i2 from "@angular/material/icon";
6
+ import * as i3 from "@angular/cdk/clipboard";
7
+ import * as i4 from "@angular/material/tooltip";
8
+ export class TdCopyCodeButtonComponent {
9
+ constructor() {
10
+ this.copyCodeToClipboard = false;
11
+ /**
12
+ * copyCodeTooltips?: ICopyCodeTooltips
13
+ *
14
+ * Tooltips for copy button to copy and upon copying.
15
+ */
16
+ this.copyCodeTooltips = {};
17
+ }
18
+ get copyTooltip() {
19
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
20
+ }
21
+ get copiedTooltip() {
22
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
23
+ }
24
+ textCopied(event) {
25
+ if (event) {
26
+ this.tooltip.hide();
27
+ this.tooltip.message = this.copiedTooltip;
28
+ this.tooltip.show();
29
+ }
30
+ }
31
+ initializeTooltip() {
32
+ setTimeout(() => {
33
+ this.tooltip.message = this.copyTooltip;
34
+ }, 200);
35
+ }
36
+ }
37
+ TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
42
+ }], propDecorators: { copiedContent: [{
43
+ type: Input
44
+ }], copyCodeToClipboard: [{
45
+ type: Input
46
+ }], copyCodeTooltips: [{
47
+ type: Input
48
+ }], tooltip: [{
49
+ type: ViewChild,
50
+ args: ['tooltip']
51
+ }], initializeTooltip: [{
52
+ type: HostListener,
53
+ args: ['mouseleave']
54
+ }] } });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItaGlnaGxpZ2h0L3NyYy9saWIvY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9jb3B5LWNvZGUtYnV0dG9uL2NvcHktY29kZS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQVl2RCxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBUVcsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ3JDOzs7O1dBSUc7UUFDTSxxQkFBZ0IsR0FBdUIsRUFBRSxDQUFDO0tBeUJwRDtJQXZCQyxJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUM3RSxDQUFDO0lBSUQsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOztzSEFqQ1UseUJBQXlCOzBHQUF6Qix5QkFBeUIsMlZDYnRDLGlSQVVBOzJGREdhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxxQkFBcUI7OEJBTXRCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFVZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQVVwQixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvcHlDb2RlVG9vbHRpcHMge1xuICBjb3B5Pzogc3RyaW5nO1xuICBjb3BpZWQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RkLWNvcHktY29kZS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvcHktY29kZS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGRDb3B5Q29kZUJ1dHRvbkNvbXBvbmVudCB7XG4gIC8vIHByaXZhdGUgX2NvcHlDb2RlVG9vbHRpcHM6IElDb3B5Q29kZVRvb2x0aXBzID0ge307XG4gIEBJbnB1dCgpIGNvcGllZENvbnRlbnQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9DbGlwYm9hcmQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwc1xuICAgKlxuICAgKiBUb29sdGlwcyBmb3IgY29weSBidXR0b24gdG8gY29weSBhbmQgdXBvbiBjb3B5aW5nLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzID0ge307XG5cbiAgZ2V0IGNvcHlUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvcHlDb2RlVG9vbHRpcHMgJiYgdGhpcy5jb3B5Q29kZVRvb2x0aXBzLmNvcHkpIHx8ICdDb3B5JztcbiAgfVxuXG4gIGdldCBjb3BpZWRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvcHlDb2RlVG9vbHRpcHMgJiYgdGhpcy5jb3B5Q29kZVRvb2x0aXBzLmNvcGllZCkgfHwgJ0NvcGllZCc7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcCE6IE1hdFRvb2x0aXA7XG5cbiAgdGV4dENvcGllZChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcbiAgICAgIHRoaXMudG9vbHRpcC5tZXNzYWdlID0gdGhpcy5jb3BpZWRUb29sdGlwO1xuICAgICAgdGhpcy50b29sdGlwLnNob3coKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIGluaXRpYWxpemVUb29sdGlwKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50b29sdGlwLm1lc3NhZ2UgPSB0aGlzLmNvcHlUb29sdGlwO1xuICAgIH0sIDIwMCk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgbWF0LWljb24tYnV0dG9uXG4gIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwiY29waWVkQ29udGVudFwiXG4gIGNsYXNzPVwiY29weS1idXR0b25cIlxuICBbbWF0VG9vbHRpcF09XCJjb3B5VG9vbHRpcFwiXG4gICN0b29sdGlwPVwibWF0VG9vbHRpcFwiXG4gIChjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQpPVwidGV4dENvcGllZCgkZXZlbnQpXCJcbj5cbiAgPG1hdC1pY29uIHJvbGU9XCJpbWdcIj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxuPC9idXR0b24+XG4iXX0=
@@ -0,0 +1,179 @@
1
+ import { Component, ElementRef, Input, Output, EventEmitter, Renderer2, SecurityContext, ViewChild, ChangeDetectorRef, } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { MatTooltip } from '@angular/material/tooltip';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/platform-browser";
6
+ import * as i2 from "./copy-code-button/copy-code-button.component";
7
+ import * as i3 from "@angular/common";
8
+ /* tslint:disable-next-line */
9
+ const hljs = require('highlight.js/lib/common');
10
+ export class TdHighlightComponent {
11
+ constructor(_renderer, _elementRef, _domSanitizer, cdr) {
12
+ this._renderer = _renderer;
13
+ this._elementRef = _elementRef;
14
+ this._domSanitizer = _domSanitizer;
15
+ this.cdr = cdr;
16
+ this._initialized = false;
17
+ this._lang = 'typescript';
18
+ /**
19
+ * copyCodeToClipboard?: boolean
20
+ *
21
+ * Display copy button on code snippets to copy code to clipboard.
22
+ */
23
+ this.copyCodeToClipboard = false;
24
+ /**
25
+ * copyCodeTooltips?: ICopyCodeTooltips
26
+ *
27
+ * Tooltips for copy button to copy and upon copying.
28
+ */
29
+ this.copyCodeTooltips = {};
30
+ /**
31
+ * contentReady?: function
32
+ * Event emitted after the highlight content rendering is finished.
33
+ */
34
+ this.contentReady = new EventEmitter();
35
+ }
36
+ /**
37
+ * content?: string
38
+ *
39
+ * Code content to be parsed as highlighted html.
40
+ * Used to load data dynamically.
41
+ *
42
+ * e.g. `.html`, `.ts` , etc.
43
+ */
44
+ set content(content) {
45
+ this._content = content;
46
+ if (this._initialized) {
47
+ this._loadContent(this._content);
48
+ }
49
+ }
50
+ /**
51
+ * lang?: string
52
+ *
53
+ * Language of the code content to be parsed as highlighted html.
54
+ * Defaults to `typescript`
55
+ *
56
+ * e.g. `typescript`, `html` , etc.
57
+ */
58
+ set codeLang(lang) {
59
+ this.setLanguage(lang);
60
+ }
61
+ /** @deprecated - removed completely @4.0.0 */
62
+ set lang(lang) {
63
+ // tslint:disable-next-line: no-console
64
+ console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
65
+ this.setLanguage(lang);
66
+ }
67
+ ngAfterViewChecked() {
68
+ this.cdr.detectChanges();
69
+ }
70
+ ngAfterViewInit() {
71
+ if (!this._content) {
72
+ this._loadContent(this.highlightComp.nativeElement.textContent);
73
+ }
74
+ else {
75
+ this._loadContent(this._content);
76
+ }
77
+ this._initialized = true;
78
+ }
79
+ setLanguage(lang) {
80
+ if (!lang) {
81
+ throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
82
+ }
83
+ this._lang = lang;
84
+ if (this._initialized) {
85
+ this._loadContent(this._content);
86
+ }
87
+ }
88
+ /**
89
+ * General method to parse a string of code into HTML Elements and load them into the container
90
+ */
91
+ _loadContent(code) {
92
+ if (code && code.trim().length > 0) {
93
+ // Clean container
94
+ this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
95
+ // Parse html string into actual HTML elements.
96
+ this._elementFromString(this._render(code));
97
+ if (this.copyCodeToClipboard) {
98
+ this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
99
+ }
100
+ }
101
+ this.contentReady.emit();
102
+ }
103
+ _elementFromString(codeStr) {
104
+ // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
105
+ // to parse the string into DOM element for now.
106
+ const preElement = this._renderer.createElement('pre');
107
+ this._renderer.appendChild(this._elementRef.nativeElement, preElement);
108
+ const codeElement = this._renderer.createElement('code');
109
+ this._renderer.appendChild(preElement, codeElement);
110
+ // Set .highlight class into <code> element
111
+ this._renderer.addClass(codeElement, 'highlight');
112
+ codeElement.innerHTML =
113
+ this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';
114
+ return preElement;
115
+ }
116
+ _render(contents) {
117
+ // Trim leading and trailing newlines
118
+ contents = contents
119
+ .replace(/^(\s|\t)*\n+/g, '')
120
+ .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
121
+ // Split markup by line characters
122
+ let lines = contents.split('\n');
123
+ // check how much indentation is used by the first actual code line
124
+ const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
125
+ const firstLineWhitespace = firstLineWhitespaceMatch
126
+ ? firstLineWhitespaceMatch[0]
127
+ : null;
128
+ // Remove all indentation spaces so code can be parsed correctly
129
+ const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
130
+ lines = lines.map(function (line) {
131
+ return line
132
+ .replace('=""', '') // remove empty values
133
+ .replace(startingWhitespaceRegex, '')
134
+ .replace(/\s+$/, ''); // remove trailing white spaces
135
+ });
136
+ const codeToParse = lines
137
+ .join('\n')
138
+ .replace(/\{ \{/gi, '{{')
139
+ .replace(/\} \}/gi, '}}')
140
+ .replace(/&lt;/gi, '<')
141
+ .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular
142
+ this.copyContent = codeToParse;
143
+ // Parse code with highlight.js depending on language
144
+ const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
145
+ highlightedCode.value = highlightedCode.value
146
+ .replace(/=<span class="hljs-value">""<\/span>/gi, '')
147
+ .replace('<head>', '')
148
+ .replace('<head/>', '');
149
+ return highlightedCode.value;
150
+ }
151
+ }
152
+ TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
153
+ TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: i2.TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
155
+ type: Component,
156
+ args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
157
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
158
+ type: Input
159
+ }], copyCodeToClipboard: [{
160
+ type: Input
161
+ }], copyCodeTooltips: [{
162
+ type: Input
163
+ }], codeLang: [{
164
+ type: Input
165
+ }], lang: [{
166
+ type: Input
167
+ }], contentReady: [{
168
+ type: Output
169
+ }], highlightComp: [{
170
+ type: ViewChild,
171
+ args: ['highlightComponent']
172
+ }], copyComp: [{
173
+ type: ViewChild,
174
+ args: ['copyComponent']
175
+ }], tooltip: [{
176
+ type: ViewChild,
177
+ args: ['tooltip']
178
+ }] } });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9oaWdobGlnaHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWhpZ2hsaWdodC9zcmMvbGliL2hpZ2hsaWdodC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFJdkQsOEJBQThCO0FBQzlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBT2hELE1BQU0sT0FBTyxvQkFBb0I7SUF1RS9CLFlBQ1UsU0FBb0IsRUFDcEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDM0IsR0FBc0I7UUFIdEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTFFeEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsVUFBSyxHQUFHLFlBQVksQ0FBQztRQWtCN0I7Ozs7V0FJRztRQUNNLHdCQUFtQixHQUFJLEtBQUssQ0FBQztRQUV0Qzs7OztXQUlHO1FBQ00scUJBQWdCLEdBQXVCLEVBQUUsQ0FBQztRQTJCbkQ7OztXQUdHO1FBQ08saUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQVduRSxDQUFDO0lB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U0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaURBQWlEO1FBQzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLHFEQUFxRDtRQUNyRCxNQUFNLGVBQWUsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLGVBQWUsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUs7YUFDMUMsT0FBTyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQzthQUNyRCxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDOztpSEFuTFUsb0JBQW9CO3FHQUFwQixvQkFBb0IsMmhCQzFCakMsMlZBYUE7MkZEYWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7b0xBbUJwQixPQUFPO3NCQURWLEtBQUs7Z0JBYUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFZRixRQUFRO3NCQURYLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQWVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQzBCLGFBQWE7c0JBQTdDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNILFFBQVE7c0JBQW5DLFNBQVM7dUJBQUMsZUFBZTtnQkFFSixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgUmVuZGVyZXIyLFxuICBTZWN1cml0eUNvbnRleHQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFmdGVyVmlld0NoZWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBJQ29weUNvZGVUb29sdGlwcyB9IGZyb20gJy4vY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudCc7XG5cbmRlY2xhcmUgY29uc3QgcmVxdWlyZTogYW55O1xuLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG5jb25zdCBobGpzID0gcmVxdWlyZSgnaGlnaGxpZ2h0LmpzL2xpYi9jb21tb24nKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtaGlnaGxpZ2h0JyxcbiAgc3R5bGVVcmxzOiBbJy4vaGlnaGxpZ2h0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWdobGlnaHQuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBUZEhpZ2hsaWdodENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NvbnRlbnQhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2xhbmcgPSAndHlwZXNjcmlwdCc7XG5cbiAgLyoqXG4gICAqIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICpcbiAgICogQ29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBVc2VkIHRvIGxvYWQgZGF0YSBkeW5hbWljYWxseS5cbiAgICpcbiAgICogZS5nLiBgLmh0bWxgLCBgLnRzYCAsIGV0Yy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9DbGlwYm9hcmQ/OiBib29sZWFuXG4gICAqXG4gICAqIERpc3BsYXkgY29weSBidXR0b24gb24gY29kZSBzbmlwcGV0cyB0byBjb3B5IGNvZGUgdG8gY2xpcGJvYXJkLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb0NsaXBib2FyZD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzXG4gICAqXG4gICAqIFRvb2x0aXBzIGZvciBjb3B5IGJ1dHRvbiB0byBjb3B5IGFuZCB1cG9uIGNvcHlpbmcuXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHMgPSB7fTtcblxuICAvKipcbiAgICogbGFuZz86IHN0cmluZ1xuICAgKlxuICAgKiBMYW5ndWFnZSBvZiB0aGUgY29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBEZWZhdWx0cyB0byBgdHlwZXNjcmlwdGBcbiAgICpcbiAgICogZS5nLiBgdHlwZXNjcmlwdGAsIGBodG1sYCAsIGV0Yy5cbiAgICovXG5cbiAgQElucHV0KClcbiAgc2V0IGNvZGVMYW5nKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZyk7XG4gIH1cbiAgLyoqIEBkZXByZWNhdGVkIC0gcmVtb3ZlZCBjb21wbGV0ZWx5IEA0LjAuMCAqL1xuICBASW5wdXQoKVxuICBzZXQgbGFuZyhsYW5nOiBzdHJpbmcpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnREVQUkVDQVRJT04gV0FSTklORzogc3dpdGNoIHRvIGNvZGVMYW5nIGF0dHJpYnV0ZSBhcyBsYW5nIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkLidcbiAgICApO1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZyk7XG4gIH1cblxuICBjb3B5Q29udGVudCE6IHN0cmluZztcblxuICAvKipcbiAgICogY29udGVudFJlYWR5PzogZnVuY3Rpb25cbiAgICogRXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgaGlnaGxpZ2h0IGNvbnRlbnQgcmVuZGVyaW5nIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRSZWFkeTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKCdoaWdobGlnaHRDb21wb25lbnQnKSBoaWdobGlnaHRDb21wITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29weUNvbXBvbmVudCcpIGNvcHlDb21wITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcCE6IE1hdFRvb2x0aXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2xvYWRDb250ZW50KFxuICAgICAgICAoPEhUTUxFbGVtZW50PnRoaXMuaGlnaGxpZ2h0Q29tcC5uYXRpdmVFbGVtZW50KS50ZXh0Q29udGVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbGFuZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRXJyb3I6IGxhbmd1YWdlIGF0dHJpYnV0ZSBtdXN0IGJlIGRlZmluZWQgaW4gVGRIaWdobGlnaHRDb21wb25lbnQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbGFuZyA9IGxhbmc7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBtZXRob2QgdG8gcGFyc2UgYSBzdHJpbmcgb2YgY29kZSBpbnRvIEhUTUwgRWxlbWVudHMgYW5kIGxvYWQgdGhlbSBpbnRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgX2xvYWRDb250ZW50KGNvZGU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoY29kZSAmJiBjb2RlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDbGVhbiBjb250YWluZXJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdpbm5lckhUTUwnLFxuICAgICAgICAnJ1xuICAgICAgKTtcbiAgICAgIC8vIFBhcnNlIGh0bWwgc3RyaW5nIGludG8gYWN0dWFsIEhUTUwgZWxlbWVudHMuXG4gICAgICB0aGlzLl9lbGVtZW50RnJvbVN0cmluZyh0aGlzLl9yZW5kZXIoY29kZSkpO1xuICAgICAgaWYgKHRoaXMuY29weUNvZGVUb0NsaXBib2FyZCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5jb3B5Q29tcC5uYXRpdmVFbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29udGVudFJlYWR5LmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VsZW1lbnRGcm9tU3RyaW5nKGNvZGVTdHI6IHN0cmluZyk6IEhUTUxQcmVFbGVtZW50IHtcbiAgICAvLyBSZW5kZXJlcjIgZG9lc250IGhhdmUgYSBwYXJzaW5nIG1ldGhvZCwgc28gd2UgaGF2ZSB0byBzYW5pdGl6ZSBhbmQgdXNlIFtpbm5lckhUTUxdXG4gICAgLy8gdG8gcGFyc2UgdGhlIHN0cmluZyBpbnRvIERPTSBlbGVtZW50IGZvciBub3cuXG4gICAgY29uc3QgcHJlRWxlbWVudDogSFRNTFByZUVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHByZUVsZW1lbnQpO1xuICAgIGNvbnN0IGNvZGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2NvZGUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChwcmVFbGVtZW50LCBjb2RlRWxlbWVudCk7XG4gICAgLy8gU2V0IC5oaWdobGlnaHQgY2xhc3MgaW50byA8Y29kZT4gZWxlbWVudFxuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGNvZGVFbGVtZW50LCAnaGlnaGxpZ2h0Jyk7XG4gICAgY29kZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgIHRoaXMuX2RvbVNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgY29kZVN0cikgPz8gJyc7XG4gICAgcmV0dXJuIHByZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXIoY29udGVudHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBuZXdsaW5lc1xuICAgIGNvbnRlbnRzID0gY29udGVudHNcbiAgICAgIC5yZXBsYWNlKC9eKFxcc3xcXHQpKlxcbisvZywgJycpXG4gICAgICAucmVwbGFjZSgvKFxcc3xcXHQpKlxcbisoXFxzfFxcdCkqJC9nLCAnJyk7XG4gICAgLy8gU3BsaXQgbWFya3VwIGJ5IGxpbmUgY2hhcmFjdGVyc1xuICAgIGxldCBsaW5lczogc3RyaW5nW10gPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG5cbiAgICAvLyBjaGVjayBob3cgbXVjaCBpbmRlbnRhdGlvbiBpcyB1c2VkIGJ5IHRoZSBmaXJzdCBhY3R1YWwgY29kZSBsaW5lXG4gICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoID0gbGluZXNbMF0ubWF0Y2goL14oXFxzfFxcdCkqLyk7XG4gICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZSA9IGZpcnN0TGluZVdoaXRlc3BhY2VNYXRjaFxuICAgICAgPyBmaXJzdExpbmVXaGl0ZXNwYWNlTWF0Y2hbMF1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIFJlbW92ZSBhbGwgaW5kZW50YXRpb24gc3BhY2VzIHNvIGNvZGUgY2FuIGJlIHBhcnNlZCBjb3JyZWN0bHlcbiAgICBjb25zdCBzdGFydGluZ1doaXRlc3BhY2VSZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgZmlyc3RMaW5lV2hpdGVzcGFjZSk7XG4gICAgbGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gbGluZVxuICAgICAgICAucmVwbGFjZSgnPVwiXCInLCAnJykgLy8gcmVtb3ZlIGVtcHR5IHZhbHVlc1xuICAgICAgICAucmVwbGFjZShzdGFydGluZ1doaXRlc3BhY2VSZWdleCwgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrJC8sICcnKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlc1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29kZVRvUGFyc2U6IHN0cmluZyA9IGxpbmVzXG4gICAgICAuam9pbignXFxuJylcbiAgICAgIC5yZXBsYWNlKC9cXHsgXFx7L2dpLCAne3snKVxuICAgICAgLnJlcGxhY2UoL1xcfSBcXH0vZ2ksICd9fScpXG4gICAgICAucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZ2ksICc+Jyk7IC8vIHJlcGxhY2Ugd2l0aCA8IGFuZCA+IHRvIHJlbmRlciBIVE1MIGluIEFuZ3VsYXJcbiAgICB0aGlzLmNvcHlDb250ZW50ID0gY29kZVRvUGFyc2U7XG4gICAgLy8gUGFyc2UgY29kZSB3aXRoIGhpZ2hsaWdodC5qcyBkZXBlbmRpbmcgb24gbGFuZ3VhZ2VcbiAgICBjb25zdCBoaWdobGlnaHRlZENvZGU6IGFueSA9IGhsanMuaGlnaGxpZ2h0KHRoaXMuX2xhbmcsIGNvZGVUb1BhcnNlLCB0cnVlKTtcbiAgICBoaWdobGlnaHRlZENvZGUudmFsdWUgPSBoaWdobGlnaHRlZENvZGUudmFsdWVcbiAgICAgIC5yZXBsYWNlKC89PHNwYW4gY2xhc3M9XCJobGpzLXZhbHVlXCI+XCJcIjxcXC9zcGFuPi9naSwgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQ+JywgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQvPicsICcnKTtcbiAgICByZXR1cm4gaGlnaGxpZ2h0ZWRDb2RlLnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICNoaWdobGlnaHRDb21wb25lbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8ZGl2ICNjb3B5Q29tcG9uZW50ICpuZ0lmPVwiY29weUNvZGVUb0NsaXBib2FyZFwiPlxuICAgIDx0ZC1jb3B5LWNvZGUtYnV0dG9uXG4gICAgICBbY29waWVkQ29udGVudF09XCJjb3B5Q29udGVudFwiXG4gICAgICBbY29weUNvZGVUb0NsaXBib2FyZF09XCJjb3B5Q29kZVRvQ2xpcGJvYXJkXCJcbiAgICAgIFtjb3B5Q29kZVRvb2x0aXBzXT1cImNvcHlDb2RlVG9vbHRpcHNcIlxuICAgID48L3RkLWNvcHktY29kZS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ClipboardModule } from '@angular/cdk/clipboard';
4
+ import { TdHighlightComponent } from './highlight.component';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatTooltipModule } from '@angular/material/tooltip';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';
9
+ import * as i0 from "@angular/core";
10
+ export class CovalentHighlightModule {
11
+ }
12
+ CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
14
+ ClipboardModule,
15
+ MatIconModule,
16
+ MatTooltipModule,
17
+ MatButtonModule], exports: [TdHighlightComponent] });
18
+ CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
19
+ CommonModule,
20
+ ClipboardModule,
21
+ MatIconModule,
22
+ MatTooltipModule,
23
+ MatButtonModule,
24
+ ]] });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ imports: [
29
+ CommonModule,
30
+ ClipboardModule,
31
+ MatIconModule,
32
+ MatTooltipModule,
33
+ MatButtonModule,
34
+ ],
35
+ declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
36
+ exports: [TdHighlightComponent],
37
+ }]
38
+ }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9oaWdobGlnaHQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOztBQWExRixNQUFNLE9BQU8sdUJBQXVCOztvSEFBdkIsdUJBQXVCO3FIQUF2Qix1QkFBdUIsaUJBSG5CLG9CQUFvQixFQUFFLHlCQUF5QixhQU41RCxZQUFZO1FBQ1osZUFBZTtRQUNmLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsZUFBZSxhQUdQLG9CQUFvQjtxSEFFbkIsdUJBQXVCLFlBVnpCO1lBQ1AsWUFBWTtZQUNaLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGVBQWU7U0FDaEI7MkZBSVUsdUJBQXVCO2tCQVhuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELFlBQVksRUFBRSxDQUFDLG9CQUFvQixFQUFFLHlCQUF5QixDQUFDO29CQUMvRCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENsaXBib2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgVGRIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuL2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFRkQ29weUNvZGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENsaXBib2FyZE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtUZEhpZ2hsaWdodENvbXBvbmVudCwgVGRDb3B5Q29kZUJ1dHRvbkNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtUZEhpZ2hsaWdodENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENvdmFsZW50SGlnaGxpZ2h0TW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './lib/highlight.component';
2
+ export * from './lib/highlight.module';
3
+ export * from './lib/copy-code-button/copy-code-button.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbURBQW1ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9oaWdobGlnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hpZ2hsaWdodC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29weS1jb2RlLWJ1dHRvbi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,271 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, Input, ViewChild, HostListener, EventEmitter, SecurityContext, Output, NgModule } from '@angular/core';
3
+ import * as i1$1 from '@angular/platform-browser';
4
+ import * as i1 from '@angular/material/button';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import * as i2 from '@angular/material/icon';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import * as i3 from '@angular/cdk/clipboard';
9
+ import { ClipboardModule } from '@angular/cdk/clipboard';
10
+ import * as i4 from '@angular/material/tooltip';
11
+ import { MatTooltipModule } from '@angular/material/tooltip';
12
+ import * as i3$1 from '@angular/common';
13
+ import { CommonModule } from '@angular/common';
14
+
15
+ class TdCopyCodeButtonComponent {
16
+ constructor() {
17
+ this.copyCodeToClipboard = false;
18
+ /**
19
+ * copyCodeTooltips?: ICopyCodeTooltips
20
+ *
21
+ * Tooltips for copy button to copy and upon copying.
22
+ */
23
+ this.copyCodeTooltips = {};
24
+ }
25
+ get copyTooltip() {
26
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
27
+ }
28
+ get copiedTooltip() {
29
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
30
+ }
31
+ textCopied(event) {
32
+ if (event) {
33
+ this.tooltip.hide();
34
+ this.tooltip.message = this.copiedTooltip;
35
+ this.tooltip.show();
36
+ }
37
+ }
38
+ initializeTooltip() {
39
+ setTimeout(() => {
40
+ this.tooltip.message = this.copyTooltip;
41
+ }, 200);
42
+ }
43
+ }
44
+ TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
49
+ }], propDecorators: { copiedContent: [{
50
+ type: Input
51
+ }], copyCodeToClipboard: [{
52
+ type: Input
53
+ }], copyCodeTooltips: [{
54
+ type: Input
55
+ }], tooltip: [{
56
+ type: ViewChild,
57
+ args: ['tooltip']
58
+ }], initializeTooltip: [{
59
+ type: HostListener,
60
+ args: ['mouseleave']
61
+ }] } });
62
+
63
+ /* tslint:disable-next-line */
64
+ const hljs = require('highlight.js/lib/common');
65
+ class TdHighlightComponent {
66
+ constructor(_renderer, _elementRef, _domSanitizer, cdr) {
67
+ this._renderer = _renderer;
68
+ this._elementRef = _elementRef;
69
+ this._domSanitizer = _domSanitizer;
70
+ this.cdr = cdr;
71
+ this._initialized = false;
72
+ this._lang = 'typescript';
73
+ /**
74
+ * copyCodeToClipboard?: boolean
75
+ *
76
+ * Display copy button on code snippets to copy code to clipboard.
77
+ */
78
+ this.copyCodeToClipboard = false;
79
+ /**
80
+ * copyCodeTooltips?: ICopyCodeTooltips
81
+ *
82
+ * Tooltips for copy button to copy and upon copying.
83
+ */
84
+ this.copyCodeTooltips = {};
85
+ /**
86
+ * contentReady?: function
87
+ * Event emitted after the highlight content rendering is finished.
88
+ */
89
+ this.contentReady = new EventEmitter();
90
+ }
91
+ /**
92
+ * content?: string
93
+ *
94
+ * Code content to be parsed as highlighted html.
95
+ * Used to load data dynamically.
96
+ *
97
+ * e.g. `.html`, `.ts` , etc.
98
+ */
99
+ set content(content) {
100
+ this._content = content;
101
+ if (this._initialized) {
102
+ this._loadContent(this._content);
103
+ }
104
+ }
105
+ /**
106
+ * lang?: string
107
+ *
108
+ * Language of the code content to be parsed as highlighted html.
109
+ * Defaults to `typescript`
110
+ *
111
+ * e.g. `typescript`, `html` , etc.
112
+ */
113
+ set codeLang(lang) {
114
+ this.setLanguage(lang);
115
+ }
116
+ /** @deprecated - removed completely @4.0.0 */
117
+ set lang(lang) {
118
+ // tslint:disable-next-line: no-console
119
+ console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
120
+ this.setLanguage(lang);
121
+ }
122
+ ngAfterViewChecked() {
123
+ this.cdr.detectChanges();
124
+ }
125
+ ngAfterViewInit() {
126
+ if (!this._content) {
127
+ this._loadContent(this.highlightComp.nativeElement.textContent);
128
+ }
129
+ else {
130
+ this._loadContent(this._content);
131
+ }
132
+ this._initialized = true;
133
+ }
134
+ setLanguage(lang) {
135
+ if (!lang) {
136
+ throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
137
+ }
138
+ this._lang = lang;
139
+ if (this._initialized) {
140
+ this._loadContent(this._content);
141
+ }
142
+ }
143
+ /**
144
+ * General method to parse a string of code into HTML Elements and load them into the container
145
+ */
146
+ _loadContent(code) {
147
+ if (code && code.trim().length > 0) {
148
+ // Clean container
149
+ this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
150
+ // Parse html string into actual HTML elements.
151
+ this._elementFromString(this._render(code));
152
+ if (this.copyCodeToClipboard) {
153
+ this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
154
+ }
155
+ }
156
+ this.contentReady.emit();
157
+ }
158
+ _elementFromString(codeStr) {
159
+ var _a;
160
+ // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
161
+ // to parse the string into DOM element for now.
162
+ const preElement = this._renderer.createElement('pre');
163
+ this._renderer.appendChild(this._elementRef.nativeElement, preElement);
164
+ const codeElement = this._renderer.createElement('code');
165
+ this._renderer.appendChild(preElement, codeElement);
166
+ // Set .highlight class into <code> element
167
+ this._renderer.addClass(codeElement, 'highlight');
168
+ codeElement.innerHTML =
169
+ (_a = this._domSanitizer.sanitize(SecurityContext.HTML, codeStr)) !== null && _a !== void 0 ? _a : '';
170
+ return preElement;
171
+ }
172
+ _render(contents) {
173
+ // Trim leading and trailing newlines
174
+ contents = contents
175
+ .replace(/^(\s|\t)*\n+/g, '')
176
+ .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
177
+ // Split markup by line characters
178
+ let lines = contents.split('\n');
179
+ // check how much indentation is used by the first actual code line
180
+ const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
181
+ const firstLineWhitespace = firstLineWhitespaceMatch
182
+ ? firstLineWhitespaceMatch[0]
183
+ : null;
184
+ // Remove all indentation spaces so code can be parsed correctly
185
+ const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
186
+ lines = lines.map(function (line) {
187
+ return line
188
+ .replace('=""', '') // remove empty values
189
+ .replace(startingWhitespaceRegex, '')
190
+ .replace(/\s+$/, ''); // remove trailing white spaces
191
+ });
192
+ const codeToParse = lines
193
+ .join('\n')
194
+ .replace(/\{ \{/gi, '{{')
195
+ .replace(/\} \}/gi, '}}')
196
+ .replace(/&lt;/gi, '<')
197
+ .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular
198
+ this.copyContent = codeToParse;
199
+ // Parse code with highlight.js depending on language
200
+ const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
201
+ highlightedCode.value = highlightedCode.value
202
+ .replace(/=<span class="hljs-value">""<\/span>/gi, '')
203
+ .replace('<head>', '')
204
+ .replace('<head/>', '');
205
+ return highlightedCode.value;
206
+ }
207
+ }
208
+ TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
209
+ TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
213
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
214
+ type: Input
215
+ }], copyCodeToClipboard: [{
216
+ type: Input
217
+ }], copyCodeTooltips: [{
218
+ type: Input
219
+ }], codeLang: [{
220
+ type: Input
221
+ }], lang: [{
222
+ type: Input
223
+ }], contentReady: [{
224
+ type: Output
225
+ }], highlightComp: [{
226
+ type: ViewChild,
227
+ args: ['highlightComponent']
228
+ }], copyComp: [{
229
+ type: ViewChild,
230
+ args: ['copyComponent']
231
+ }], tooltip: [{
232
+ type: ViewChild,
233
+ args: ['tooltip']
234
+ }] } });
235
+
236
+ class CovalentHighlightModule {
237
+ }
238
+ CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
239
+ CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
240
+ ClipboardModule,
241
+ MatIconModule,
242
+ MatTooltipModule,
243
+ MatButtonModule], exports: [TdHighlightComponent] });
244
+ CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
245
+ CommonModule,
246
+ ClipboardModule,
247
+ MatIconModule,
248
+ MatTooltipModule,
249
+ MatButtonModule,
250
+ ]] });
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
252
+ type: NgModule,
253
+ args: [{
254
+ imports: [
255
+ CommonModule,
256
+ ClipboardModule,
257
+ MatIconModule,
258
+ MatTooltipModule,
259
+ MatButtonModule,
260
+ ],
261
+ declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
262
+ exports: [TdHighlightComponent],
263
+ }]
264
+ }] });
265
+
266
+ /**
267
+ * Generated bundle index. Do not edit.
268
+ */
269
+
270
+ export { CovalentHighlightModule, TdCopyCodeButtonComponent, TdHighlightComponent };
271
+ //# sourceMappingURL=covalent-highlight.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"covalent-highlight.mjs","sources":["../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.ts","../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.html","../../../../libs/angular-highlight/src/lib/highlight.component.ts","../../../../libs/angular-highlight/src/lib/highlight.component.html","../../../../libs/angular-highlight/src/lib/highlight.module.ts","../../../../libs/angular-highlight/src/covalent-highlight.ts"],"sourcesContent":["import { Component, Input, ViewChild, HostListener } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport interface ICopyCodeTooltips {\n copy?: string;\n copied?: string;\n}\n\n@Component({\n selector: 'td-copy-code-button',\n templateUrl: './copy-code-button.component.html',\n styleUrls: ['./copy-code-button.component.scss'],\n})\nexport class TdCopyCodeButtonComponent {\n // private _copyCodeTooltips: ICopyCodeTooltips = {};\n @Input() copiedContent!: string;\n @Input() copyCodeToClipboard = false;\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n get copyTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';\n }\n\n get copiedTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';\n }\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n textCopied(event: boolean): void {\n if (event) {\n this.tooltip.hide();\n this.tooltip.message = this.copiedTooltip;\n this.tooltip.show();\n }\n }\n @HostListener('mouseleave')\n initializeTooltip(): void {\n setTimeout(() => {\n this.tooltip.message = this.copyTooltip;\n }, 200);\n }\n}\n","<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n","import {\n Component,\n AfterViewInit,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n SecurityContext,\n ViewChild,\n ChangeDetectorRef,\n AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';\n\ndeclare const require: any;\n/* tslint:disable-next-line */\nconst hljs = require('highlight.js/lib/common');\n\n@Component({\n selector: 'td-highlight',\n styleUrls: ['./highlight.component.scss'],\n templateUrl: './highlight.component.html',\n})\nexport class TdHighlightComponent implements AfterViewInit, AfterViewChecked {\n private _initialized = false;\n\n private _content!: string;\n private _lang = 'typescript';\n\n /**\n * content?: string\n *\n * Code content to be parsed as highlighted html.\n * Used to load data dynamically.\n *\n * e.g. `.html`, `.ts` , etc.\n */\n @Input()\n set content(content: string) {\n this._content = content;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * copyCodeToClipboard?: boolean\n *\n * Display copy button on code snippets to copy code to clipboard.\n */\n @Input() copyCodeToClipboard? = false;\n\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n /**\n * lang?: string\n *\n * Language of the code content to be parsed as highlighted html.\n * Defaults to `typescript`\n *\n * e.g. `typescript`, `html` , etc.\n */\n\n @Input()\n set codeLang(lang: string) {\n this.setLanguage(lang);\n }\n /** @deprecated - removed completely @4.0.0 */\n @Input()\n set lang(lang: string) {\n // tslint:disable-next-line: no-console\n console.warn(\n 'DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.'\n );\n this.setLanguage(lang);\n }\n\n copyContent!: string;\n\n /**\n * contentReady?: function\n * Event emitted after the highlight content rendering is finished.\n */\n @Output() contentReady: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('highlightComponent') highlightComp!: ElementRef;\n @ViewChild('copyComponent') copyComp!: ElementRef;\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n constructor(\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewChecked(): void {\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n if (!this._content) {\n this._loadContent(\n (<HTMLElement>this.highlightComp.nativeElement).textContent\n );\n } else {\n this._loadContent(this._content);\n }\n this._initialized = true;\n }\n\n setLanguage(lang: string): void {\n if (!lang) {\n throw new Error(\n 'Error: language attribute must be defined in TdHighlightComponent.'\n );\n }\n this._lang = lang;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * General method to parse a string of code into HTML Elements and load them into the container\n */\n private _loadContent(code: string | null): void {\n if (code && code.trim().length > 0) {\n // Clean container\n this._renderer.setProperty(\n this._elementRef.nativeElement,\n 'innerHTML',\n ''\n );\n // Parse html string into actual HTML elements.\n this._elementFromString(this._render(code));\n if (this.copyCodeToClipboard) {\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.copyComp.nativeElement\n );\n }\n }\n this.contentReady.emit();\n }\n\n private _elementFromString(codeStr: string): HTMLPreElement {\n // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]\n // to parse the string into DOM element for now.\n const preElement: HTMLPreElement = this._renderer.createElement('pre');\n this._renderer.appendChild(this._elementRef.nativeElement, preElement);\n const codeElement: HTMLElement = this._renderer.createElement('code');\n this._renderer.appendChild(preElement, codeElement);\n // Set .highlight class into <code> element\n this._renderer.addClass(codeElement, 'highlight');\n codeElement.innerHTML =\n this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';\n return preElement;\n }\n\n private _render(contents: string): string {\n // Trim leading and trailing newlines\n contents = contents\n .replace(/^(\\s|\\t)*\\n+/g, '')\n .replace(/(\\s|\\t)*\\n+(\\s|\\t)*$/g, '');\n // Split markup by line characters\n let lines: string[] = contents.split('\\n');\n\n // check how much indentation is used by the first actual code line\n const firstLineWhitespaceMatch = lines[0].match(/^(\\s|\\t)*/);\n const firstLineWhitespace = firstLineWhitespaceMatch\n ? firstLineWhitespaceMatch[0]\n : null;\n\n // Remove all indentation spaces so code can be parsed correctly\n const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n lines = lines.map(function (line: string): string {\n return line\n .replace('=\"\"', '') // remove empty values\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, ''); // remove trailing white spaces\n });\n\n const codeToParse: string = lines\n .join('\\n')\n .replace(/\\{ \\{/gi, '{{')\n .replace(/\\} \\}/gi, '}}')\n .replace(/&lt;/gi, '<')\n .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular\n this.copyContent = codeToParse;\n // Parse code with highlight.js depending on language\n const highlightedCode: any = hljs.highlight(this._lang, codeToParse, true);\n highlightedCode.value = highlightedCode.value\n .replace(/=<span class=\"hljs-value\">\"\"<\\/span>/gi, '')\n .replace('<head>', '')\n .replace('<head/>', '');\n return highlightedCode.value;\n }\n}\n","<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { TdHighlightComponent } from './highlight.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ClipboardModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ],\n declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],\n exports: [TdHighlightComponent],\n})\nexport class CovalentHighlightModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, Input, ViewChild, HostListener, EventEmitter, SecurityContext, Output, NgModule } from '@angular/core';
3
+ import * as i1$1 from '@angular/platform-browser';
4
+ import * as i4 from '@angular/material/tooltip';
5
+ import { MatTooltipModule } from '@angular/material/tooltip';
6
+ import * as i1 from '@angular/material/button';
7
+ import { MatButtonModule } from '@angular/material/button';
8
+ import * as i2 from '@angular/material/icon';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import * as i3 from '@angular/cdk/clipboard';
11
+ import { ClipboardModule } from '@angular/cdk/clipboard';
12
+ import * as i3$1 from '@angular/common';
13
+ import { CommonModule } from '@angular/common';
14
+
15
+ class TdCopyCodeButtonComponent {
16
+ constructor() {
17
+ this.copyCodeToClipboard = false;
18
+ /**
19
+ * copyCodeTooltips?: ICopyCodeTooltips
20
+ *
21
+ * Tooltips for copy button to copy and upon copying.
22
+ */
23
+ this.copyCodeTooltips = {};
24
+ }
25
+ get copyTooltip() {
26
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
27
+ }
28
+ get copiedTooltip() {
29
+ return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
30
+ }
31
+ textCopied(event) {
32
+ if (event) {
33
+ this.tooltip.hide();
34
+ this.tooltip.message = this.copiedTooltip;
35
+ this.tooltip.show();
36
+ }
37
+ }
38
+ initializeTooltip() {
39
+ setTimeout(() => {
40
+ this.tooltip.message = this.copyTooltip;
41
+ }, 200);
42
+ }
43
+ }
44
+ TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'td-copy-code-button', template: "<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n", styles: [""] }]
49
+ }], propDecorators: { copiedContent: [{
50
+ type: Input
51
+ }], copyCodeToClipboard: [{
52
+ type: Input
53
+ }], copyCodeTooltips: [{
54
+ type: Input
55
+ }], tooltip: [{
56
+ type: ViewChild,
57
+ args: ['tooltip']
58
+ }], initializeTooltip: [{
59
+ type: HostListener,
60
+ args: ['mouseleave']
61
+ }] } });
62
+
63
+ /* tslint:disable-next-line */
64
+ const hljs = require('highlight.js/lib/common');
65
+ class TdHighlightComponent {
66
+ constructor(_renderer, _elementRef, _domSanitizer, cdr) {
67
+ this._renderer = _renderer;
68
+ this._elementRef = _elementRef;
69
+ this._domSanitizer = _domSanitizer;
70
+ this.cdr = cdr;
71
+ this._initialized = false;
72
+ this._lang = 'typescript';
73
+ /**
74
+ * copyCodeToClipboard?: boolean
75
+ *
76
+ * Display copy button on code snippets to copy code to clipboard.
77
+ */
78
+ this.copyCodeToClipboard = false;
79
+ /**
80
+ * copyCodeTooltips?: ICopyCodeTooltips
81
+ *
82
+ * Tooltips for copy button to copy and upon copying.
83
+ */
84
+ this.copyCodeTooltips = {};
85
+ /**
86
+ * contentReady?: function
87
+ * Event emitted after the highlight content rendering is finished.
88
+ */
89
+ this.contentReady = new EventEmitter();
90
+ }
91
+ /**
92
+ * content?: string
93
+ *
94
+ * Code content to be parsed as highlighted html.
95
+ * Used to load data dynamically.
96
+ *
97
+ * e.g. `.html`, `.ts` , etc.
98
+ */
99
+ set content(content) {
100
+ this._content = content;
101
+ if (this._initialized) {
102
+ this._loadContent(this._content);
103
+ }
104
+ }
105
+ /**
106
+ * lang?: string
107
+ *
108
+ * Language of the code content to be parsed as highlighted html.
109
+ * Defaults to `typescript`
110
+ *
111
+ * e.g. `typescript`, `html` , etc.
112
+ */
113
+ set codeLang(lang) {
114
+ this.setLanguage(lang);
115
+ }
116
+ /** @deprecated - removed completely @4.0.0 */
117
+ set lang(lang) {
118
+ // tslint:disable-next-line: no-console
119
+ console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
120
+ this.setLanguage(lang);
121
+ }
122
+ ngAfterViewChecked() {
123
+ this.cdr.detectChanges();
124
+ }
125
+ ngAfterViewInit() {
126
+ if (!this._content) {
127
+ this._loadContent(this.highlightComp.nativeElement.textContent);
128
+ }
129
+ else {
130
+ this._loadContent(this._content);
131
+ }
132
+ this._initialized = true;
133
+ }
134
+ setLanguage(lang) {
135
+ if (!lang) {
136
+ throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
137
+ }
138
+ this._lang = lang;
139
+ if (this._initialized) {
140
+ this._loadContent(this._content);
141
+ }
142
+ }
143
+ /**
144
+ * General method to parse a string of code into HTML Elements and load them into the container
145
+ */
146
+ _loadContent(code) {
147
+ if (code && code.trim().length > 0) {
148
+ // Clean container
149
+ this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
150
+ // Parse html string into actual HTML elements.
151
+ this._elementFromString(this._render(code));
152
+ if (this.copyCodeToClipboard) {
153
+ this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
154
+ }
155
+ }
156
+ this.contentReady.emit();
157
+ }
158
+ _elementFromString(codeStr) {
159
+ // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
160
+ // to parse the string into DOM element for now.
161
+ const preElement = this._renderer.createElement('pre');
162
+ this._renderer.appendChild(this._elementRef.nativeElement, preElement);
163
+ const codeElement = this._renderer.createElement('code');
164
+ this._renderer.appendChild(preElement, codeElement);
165
+ // Set .highlight class into <code> element
166
+ this._renderer.addClass(codeElement, 'highlight');
167
+ codeElement.innerHTML =
168
+ this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';
169
+ return preElement;
170
+ }
171
+ _render(contents) {
172
+ // Trim leading and trailing newlines
173
+ contents = contents
174
+ .replace(/^(\s|\t)*\n+/g, '')
175
+ .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
176
+ // Split markup by line characters
177
+ let lines = contents.split('\n');
178
+ // check how much indentation is used by the first actual code line
179
+ const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
180
+ const firstLineWhitespace = firstLineWhitespaceMatch
181
+ ? firstLineWhitespaceMatch[0]
182
+ : null;
183
+ // Remove all indentation spaces so code can be parsed correctly
184
+ const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
185
+ lines = lines.map(function (line) {
186
+ return line
187
+ .replace('=""', '') // remove empty values
188
+ .replace(startingWhitespaceRegex, '')
189
+ .replace(/\s+$/, ''); // remove trailing white spaces
190
+ });
191
+ const codeToParse = lines
192
+ .join('\n')
193
+ .replace(/\{ \{/gi, '{{')
194
+ .replace(/\} \}/gi, '}}')
195
+ .replace(/&lt;/gi, '<')
196
+ .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular
197
+ this.copyContent = codeToParse;
198
+ // Parse code with highlight.js depending on language
199
+ const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
200
+ highlightedCode.value = highlightedCode.value
201
+ .replace(/=<span class="hljs-value">""<\/span>/gi, '')
202
+ .replace('<head>', '')
203
+ .replace('<head/>', '');
204
+ return highlightedCode.value;
205
+ }
206
+ }
207
+ TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
208
+ TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", codeLang: "codeLang", lang: "lang" }, outputs: { contentReady: "contentReady" }, viewQueries: [{ propertyName: "highlightComp", first: true, predicate: ["highlightComponent"], descendants: true }, { propertyName: "copyComp", first: true, predicate: ["copyComponent"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"], components: [{ type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: TdHighlightComponent, decorators: [{
210
+ type: Component,
211
+ args: [{ selector: 'td-highlight', template: "<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n", styles: [":host ::ng-deep{overflow-x:auto;padding:16px;display:flex}:host ::ng-deep pre,:host ::ng-deep code,:host ::ng-deep .highlight{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{display:block;overflow-x:auto;padding:0;margin:0;background:transparent;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;line-height:1.45;-moz-tab-size:2;tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;text-size-adjust:none;position:relative;border-radius:2px;font-size:.8rem;width:100%}:host ::ng-deep code{margin:0;padding:0;overflow-wrap:break-word;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;overflow-wrap:break-word;line-height:1.5;margin:0}:host ::ng-deep .copy-button{border:none;background:inherit;margin-top:-8px;margin-right:-8px}\n"] }]
212
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
213
+ type: Input
214
+ }], copyCodeToClipboard: [{
215
+ type: Input
216
+ }], copyCodeTooltips: [{
217
+ type: Input
218
+ }], codeLang: [{
219
+ type: Input
220
+ }], lang: [{
221
+ type: Input
222
+ }], contentReady: [{
223
+ type: Output
224
+ }], highlightComp: [{
225
+ type: ViewChild,
226
+ args: ['highlightComponent']
227
+ }], copyComp: [{
228
+ type: ViewChild,
229
+ args: ['copyComponent']
230
+ }], tooltip: [{
231
+ type: ViewChild,
232
+ args: ['tooltip']
233
+ }] } });
234
+
235
+ class CovalentHighlightModule {
236
+ }
237
+ CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
238
+ CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
239
+ ClipboardModule,
240
+ MatIconModule,
241
+ MatTooltipModule,
242
+ MatButtonModule], exports: [TdHighlightComponent] });
243
+ CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, imports: [[
244
+ CommonModule,
245
+ ClipboardModule,
246
+ MatIconModule,
247
+ MatTooltipModule,
248
+ MatButtonModule,
249
+ ]] });
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: CovalentHighlightModule, decorators: [{
251
+ type: NgModule,
252
+ args: [{
253
+ imports: [
254
+ CommonModule,
255
+ ClipboardModule,
256
+ MatIconModule,
257
+ MatTooltipModule,
258
+ MatButtonModule,
259
+ ],
260
+ declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
261
+ exports: [TdHighlightComponent],
262
+ }]
263
+ }] });
264
+
265
+ /**
266
+ * Generated bundle index. Do not edit.
267
+ */
268
+
269
+ export { CovalentHighlightModule, TdCopyCodeButtonComponent, TdHighlightComponent };
270
+ //# sourceMappingURL=covalent-highlight.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"covalent-highlight.mjs","sources":["../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.ts","../../../../libs/angular-highlight/src/lib/copy-code-button/copy-code-button.component.html","../../../../libs/angular-highlight/src/lib/highlight.component.ts","../../../../libs/angular-highlight/src/lib/highlight.component.html","../../../../libs/angular-highlight/src/lib/highlight.module.ts","../../../../libs/angular-highlight/src/covalent-highlight.ts"],"sourcesContent":["import { Component, Input, ViewChild, HostListener } from '@angular/core';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport interface ICopyCodeTooltips {\n copy?: string;\n copied?: string;\n}\n\n@Component({\n selector: 'td-copy-code-button',\n templateUrl: './copy-code-button.component.html',\n styleUrls: ['./copy-code-button.component.scss'],\n})\nexport class TdCopyCodeButtonComponent {\n // private _copyCodeTooltips: ICopyCodeTooltips = {};\n @Input() copiedContent!: string;\n @Input() copyCodeToClipboard = false;\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n get copyTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';\n }\n\n get copiedTooltip(): string {\n return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';\n }\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n textCopied(event: boolean): void {\n if (event) {\n this.tooltip.hide();\n this.tooltip.message = this.copiedTooltip;\n this.tooltip.show();\n }\n }\n @HostListener('mouseleave')\n initializeTooltip(): void {\n setTimeout(() => {\n this.tooltip.message = this.copyTooltip;\n }, 200);\n }\n}\n","<button\n mat-icon-button\n [cdkCopyToClipboard]=\"copiedContent\"\n class=\"copy-button\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n>\n <mat-icon role=\"img\">content_copy</mat-icon>\n</button>\n","import {\n Component,\n AfterViewInit,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n SecurityContext,\n ViewChild,\n ChangeDetectorRef,\n AfterViewChecked,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';\n\ndeclare const require: any;\n/* tslint:disable-next-line */\nconst hljs = require('highlight.js/lib/common');\n\n@Component({\n selector: 'td-highlight',\n styleUrls: ['./highlight.component.scss'],\n templateUrl: './highlight.component.html',\n})\nexport class TdHighlightComponent implements AfterViewInit, AfterViewChecked {\n private _initialized = false;\n\n private _content!: string;\n private _lang = 'typescript';\n\n /**\n * content?: string\n *\n * Code content to be parsed as highlighted html.\n * Used to load data dynamically.\n *\n * e.g. `.html`, `.ts` , etc.\n */\n @Input()\n set content(content: string) {\n this._content = content;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * copyCodeToClipboard?: boolean\n *\n * Display copy button on code snippets to copy code to clipboard.\n */\n @Input() copyCodeToClipboard? = false;\n\n /**\n * copyCodeTooltips?: ICopyCodeTooltips\n *\n * Tooltips for copy button to copy and upon copying.\n */\n @Input() copyCodeTooltips?: ICopyCodeTooltips = {};\n\n /**\n * lang?: string\n *\n * Language of the code content to be parsed as highlighted html.\n * Defaults to `typescript`\n *\n * e.g. `typescript`, `html` , etc.\n */\n\n @Input()\n set codeLang(lang: string) {\n this.setLanguage(lang);\n }\n /** @deprecated - removed completely @4.0.0 */\n @Input()\n set lang(lang: string) {\n // tslint:disable-next-line: no-console\n console.warn(\n 'DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.'\n );\n this.setLanguage(lang);\n }\n\n copyContent!: string;\n\n /**\n * contentReady?: function\n * Event emitted after the highlight content rendering is finished.\n */\n @Output() contentReady: EventEmitter<void> = new EventEmitter<void>();\n @ViewChild('highlightComponent') highlightComp!: ElementRef;\n @ViewChild('copyComponent') copyComp!: ElementRef;\n\n @ViewChild('tooltip') tooltip!: MatTooltip;\n\n constructor(\n private _renderer: Renderer2,\n private _elementRef: ElementRef,\n private _domSanitizer: DomSanitizer,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngAfterViewChecked(): void {\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n if (!this._content) {\n this._loadContent(\n (<HTMLElement>this.highlightComp.nativeElement).textContent\n );\n } else {\n this._loadContent(this._content);\n }\n this._initialized = true;\n }\n\n setLanguage(lang: string): void {\n if (!lang) {\n throw new Error(\n 'Error: language attribute must be defined in TdHighlightComponent.'\n );\n }\n this._lang = lang;\n if (this._initialized) {\n this._loadContent(this._content);\n }\n }\n\n /**\n * General method to parse a string of code into HTML Elements and load them into the container\n */\n private _loadContent(code: string | null): void {\n if (code && code.trim().length > 0) {\n // Clean container\n this._renderer.setProperty(\n this._elementRef.nativeElement,\n 'innerHTML',\n ''\n );\n // Parse html string into actual HTML elements.\n this._elementFromString(this._render(code));\n if (this.copyCodeToClipboard) {\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this.copyComp.nativeElement\n );\n }\n }\n this.contentReady.emit();\n }\n\n private _elementFromString(codeStr: string): HTMLPreElement {\n // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]\n // to parse the string into DOM element for now.\n const preElement: HTMLPreElement = this._renderer.createElement('pre');\n this._renderer.appendChild(this._elementRef.nativeElement, preElement);\n const codeElement: HTMLElement = this._renderer.createElement('code');\n this._renderer.appendChild(preElement, codeElement);\n // Set .highlight class into <code> element\n this._renderer.addClass(codeElement, 'highlight');\n codeElement.innerHTML =\n this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';\n return preElement;\n }\n\n private _render(contents: string): string {\n // Trim leading and trailing newlines\n contents = contents\n .replace(/^(\\s|\\t)*\\n+/g, '')\n .replace(/(\\s|\\t)*\\n+(\\s|\\t)*$/g, '');\n // Split markup by line characters\n let lines: string[] = contents.split('\\n');\n\n // check how much indentation is used by the first actual code line\n const firstLineWhitespaceMatch = lines[0].match(/^(\\s|\\t)*/);\n const firstLineWhitespace = firstLineWhitespaceMatch\n ? firstLineWhitespaceMatch[0]\n : null;\n\n // Remove all indentation spaces so code can be parsed correctly\n const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n lines = lines.map(function (line: string): string {\n return line\n .replace('=\"\"', '') // remove empty values\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, ''); // remove trailing white spaces\n });\n\n const codeToParse: string = lines\n .join('\\n')\n .replace(/\\{ \\{/gi, '{{')\n .replace(/\\} \\}/gi, '}}')\n .replace(/&lt;/gi, '<')\n .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular\n this.copyContent = codeToParse;\n // Parse code with highlight.js depending on language\n const highlightedCode: any = hljs.highlight(this._lang, codeToParse, true);\n highlightedCode.value = highlightedCode.value\n .replace(/=<span class=\"hljs-value\">\"\"<\\/span>/gi, '')\n .replace('<head>', '')\n .replace('<head/>', '');\n return highlightedCode.value;\n }\n}\n","<div>\n <div #highlightComponent>\n <ng-content></ng-content>\n </div>\n\n <div #copyComponent *ngIf=\"copyCodeToClipboard\">\n <td-copy-code-button\n [copiedContent]=\"copyContent\"\n [copyCodeToClipboard]=\"copyCodeToClipboard\"\n [copyCodeTooltips]=\"copyCodeTooltips\"\n ></td-copy-code-button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { TdHighlightComponent } from './highlight.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ClipboardModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n ],\n declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],\n exports: [TdHighlightComponent],\n})\nexport class CovalentHighlightModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { MatTooltip } from '@angular/material/tooltip';
2
+ import * as i0 from "@angular/core";
3
+ export interface ICopyCodeTooltips {
4
+ copy?: string;
5
+ copied?: string;
6
+ }
7
+ export declare class TdCopyCodeButtonComponent {
8
+ copiedContent: string;
9
+ copyCodeToClipboard: boolean;
10
+ /**
11
+ * copyCodeTooltips?: ICopyCodeTooltips
12
+ *
13
+ * Tooltips for copy button to copy and upon copying.
14
+ */
15
+ copyCodeTooltips?: ICopyCodeTooltips;
16
+ get copyTooltip(): string;
17
+ get copiedTooltip(): string;
18
+ tooltip: MatTooltip;
19
+ textCopied(event: boolean): void;
20
+ initializeTooltip(): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdCopyCodeButtonComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdCopyCodeButtonComponent, "td-copy-code-button", never, { "copiedContent": "copiedContent"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; }, {}, never, never>;
23
+ }
@@ -0,0 +1,67 @@
1
+ import { AfterViewInit, ElementRef, EventEmitter, Renderer2, ChangeDetectorRef, AfterViewChecked } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { MatTooltip } from '@angular/material/tooltip';
4
+ import { ICopyCodeTooltips } from './copy-code-button/copy-code-button.component';
5
+ import * as i0 from "@angular/core";
6
+ export declare class TdHighlightComponent implements AfterViewInit, AfterViewChecked {
7
+ private _renderer;
8
+ private _elementRef;
9
+ private _domSanitizer;
10
+ private cdr;
11
+ private _initialized;
12
+ private _content;
13
+ private _lang;
14
+ /**
15
+ * content?: string
16
+ *
17
+ * Code content to be parsed as highlighted html.
18
+ * Used to load data dynamically.
19
+ *
20
+ * e.g. `.html`, `.ts` , etc.
21
+ */
22
+ set content(content: string);
23
+ /**
24
+ * copyCodeToClipboard?: boolean
25
+ *
26
+ * Display copy button on code snippets to copy code to clipboard.
27
+ */
28
+ copyCodeToClipboard?: boolean | undefined;
29
+ /**
30
+ * copyCodeTooltips?: ICopyCodeTooltips
31
+ *
32
+ * Tooltips for copy button to copy and upon copying.
33
+ */
34
+ copyCodeTooltips?: ICopyCodeTooltips;
35
+ /**
36
+ * lang?: string
37
+ *
38
+ * Language of the code content to be parsed as highlighted html.
39
+ * Defaults to `typescript`
40
+ *
41
+ * e.g. `typescript`, `html` , etc.
42
+ */
43
+ set codeLang(lang: string);
44
+ /** @deprecated - removed completely @4.0.0 */
45
+ set lang(lang: string);
46
+ copyContent: string;
47
+ /**
48
+ * contentReady?: function
49
+ * Event emitted after the highlight content rendering is finished.
50
+ */
51
+ contentReady: EventEmitter<void>;
52
+ highlightComp: ElementRef;
53
+ copyComp: ElementRef;
54
+ tooltip: MatTooltip;
55
+ constructor(_renderer: Renderer2, _elementRef: ElementRef, _domSanitizer: DomSanitizer, cdr: ChangeDetectorRef);
56
+ ngAfterViewChecked(): void;
57
+ ngAfterViewInit(): void;
58
+ setLanguage(lang: string): void;
59
+ /**
60
+ * General method to parse a string of code into HTML Elements and load them into the container
61
+ */
62
+ private _loadContent;
63
+ private _elementFromString;
64
+ private _render;
65
+ static ɵfac: i0.ɵɵFactoryDeclaration<TdHighlightComponent, never>;
66
+ static ɵcmp: i0.ɵɵComponentDeclaration<TdHighlightComponent, "td-highlight", never, { "content": "content"; "copyCodeToClipboard": "copyCodeToClipboard"; "copyCodeTooltips": "copyCodeTooltips"; "codeLang": "codeLang"; "lang": "lang"; }, { "contentReady": "contentReady"; }, never, ["*"]>;
67
+ }
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./highlight.component";
3
+ import * as i2 from "./copy-code-button/copy-code-button.component";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "@angular/cdk/clipboard";
6
+ import * as i5 from "@angular/material/icon";
7
+ import * as i6 from "@angular/material/tooltip";
8
+ import * as i7 from "@angular/material/button";
9
+ export declare class CovalentHighlightModule {
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<CovalentHighlightModule, never>;
11
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CovalentHighlightModule, [typeof i1.TdHighlightComponent, typeof i2.TdCopyCodeButtonComponent], [typeof i3.CommonModule, typeof i4.ClipboardModule, typeof i5.MatIconModule, typeof i6.MatTooltipModule, typeof i7.MatButtonModule], [typeof i1.TdHighlightComponent]>;
12
+ static ɵinj: i0.ɵɵInjectorDeclaration<CovalentHighlightModule>;
13
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@covalent/highlight",
3
+ "version": "0.0.1",
4
+ "description": "Teradata UI Platform Highlight Module",
5
+ "license": "MIT",
6
+ "author": "Teradata UX",
7
+ "keywords": [
8
+ "angular",
9
+ "components",
10
+ "reusable",
11
+ "highlight",
12
+ "highlightjs"
13
+ ],
14
+ "peerDependencies": {
15
+ "highlight.js": "^11.4.0",
16
+ "@angular/common": "^13.2.0",
17
+ "@angular/core": "^13.2.0",
18
+ "@angular/platform-browser": "^13.2.0",
19
+ "@angular/cdk": "^13.2.0",
20
+ "@angular/material": "^13.2.0"
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ },
25
+ "module": "fesm2015/covalent-highlight.mjs",
26
+ "es2020": "fesm2020/covalent-highlight.mjs",
27
+ "esm2020": "esm2020/covalent-highlight.mjs",
28
+ "fesm2020": "fesm2020/covalent-highlight.mjs",
29
+ "fesm2015": "fesm2015/covalent-highlight.mjs",
30
+ "typings": "covalent-highlight.d.ts",
31
+ "exports": {
32
+ "./package.json": {
33
+ "default": "./package.json"
34
+ },
35
+ ".": {
36
+ "types": "./covalent-highlight.d.ts",
37
+ "esm2020": "./esm2020/covalent-highlight.mjs",
38
+ "es2020": "./fesm2020/covalent-highlight.mjs",
39
+ "es2015": "./fesm2015/covalent-highlight.mjs",
40
+ "node": "./fesm2015/covalent-highlight.mjs",
41
+ "default": "./fesm2020/covalent-highlight.mjs"
42
+ }
43
+ },
44
+ "sideEffects": false
45
+ }
@@ -0,0 +1,3 @@
1
+ export * from './lib/highlight.component';
2
+ export * from './lib/highlight.module';
3
+ export * from './lib/copy-code-button/copy-code-button.component';