@covalent/highlight 6.3.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,213 +0,0 @@
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 hljs from 'highlight.js';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/platform-browser";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "./copy-code-button/copy-code-button.component";
9
- export class TdHighlightComponent {
10
- /**
11
- * content?: string
12
- *
13
- * Code content to be parsed as highlighted html.
14
- * Used to load data dynamically.
15
- *
16
- * e.g. `.html`, `.ts` , etc.
17
- */
18
- set content(content) {
19
- this._content = content;
20
- console.log(this._content);
21
- if (this._initialized) {
22
- this._loadContent(this._content);
23
- }
24
- }
25
- /**
26
- * lang?: string
27
- *
28
- * Language of the code content to be parsed as highlighted html.
29
- * Defaults to `typescript`
30
- *
31
- * e.g. `typescript`, `html` , etc.
32
- */
33
- set codeLang(lang) {
34
- this.setLanguage(lang);
35
- }
36
- /** @deprecated - removed completely @4.0.0 */
37
- set lang(lang) {
38
- // tslint:disable-next-line: no-console
39
- console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
40
- this.setLanguage(lang);
41
- }
42
- constructor(_renderer, _elementRef, _domSanitizer, cdr) {
43
- this._renderer = _renderer;
44
- this._elementRef = _elementRef;
45
- this._domSanitizer = _domSanitizer;
46
- this.cdr = cdr;
47
- this._initialized = false;
48
- this._lang = 'typescript';
49
- this._showRaw = false;
50
- /**
51
- * copyCodeToClipboard?: boolean
52
- *
53
- * Display copy button on code snippets to copy code to clipboard.
54
- */
55
- this.copyCodeToClipboard = false;
56
- /**
57
- * copyCodeTooltips?: ICopyCodeTooltips
58
- *
59
- * Tooltips for copy button to copy and upon copying.
60
- */
61
- this.copyCodeTooltips = {};
62
- /**
63
- * toggleRawButton?: boolean
64
- *
65
- * Display button to toggle raw code.
66
- */
67
- this.toggleRawButton = false;
68
- /**
69
- * rawToggleLabels?: IRawToggleLabels
70
- *
71
- * Labels for raw toggle button.
72
- */
73
- this.rawToggleLabels = {};
74
- /**
75
- * contentReady?: function
76
- * Event emitted after the highlight content rendering is finished.
77
- */
78
- this.contentReady = new EventEmitter();
79
- }
80
- ngAfterViewChecked() {
81
- this.cdr.detectChanges();
82
- }
83
- ngAfterViewInit() {
84
- if (!this._content) {
85
- this._content =
86
- this.highlightComp.nativeElement.textContent || '';
87
- }
88
- this._loadContent(this._content);
89
- this._initialized = true;
90
- }
91
- setLanguage(lang) {
92
- if (!lang) {
93
- throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
94
- }
95
- this._lang = lang;
96
- if (this._initialized) {
97
- this._loadContent(this._content);
98
- }
99
- }
100
- toggleRawClicked() {
101
- this._showRaw = !this._showRaw;
102
- this._elementRef.nativeElement.querySelector('pre').style.display = this
103
- ._showRaw
104
- ? 'none'
105
- : 'block';
106
- this._elementRef.nativeElement.querySelector('.raw').style.display = this
107
- ._showRaw
108
- ? 'block'
109
- : 'none';
110
- }
111
- /**
112
- * General method to parse a string of code into HTML Elements and load them into the container
113
- */
114
- _loadContent(code) {
115
- if (code && code.trim().length > 0) {
116
- // Clean container
117
- this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
118
- this._elementFromString(code);
119
- if (this.copyCodeToClipboard) {
120
- this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
121
- }
122
- }
123
- this.contentReady.emit();
124
- }
125
- _elementFromString(codeStr) {
126
- // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
127
- // to parse the string into DOM element for now.
128
- const preElement = this._renderer.createElement('pre');
129
- this._renderer.appendChild(this._elementRef.nativeElement, preElement);
130
- const codeElement = this._renderer.createElement('code');
131
- this._renderer.appendChild(preElement, codeElement);
132
- // Set .highlight class into <code> element
133
- this._renderer.addClass(codeElement, 'highlight');
134
- const highlightedCode = this._render(codeStr);
135
- codeElement.innerHTML =
136
- this._domSanitizer.sanitize(SecurityContext.HTML, highlightedCode) ?? '';
137
- if (this.toggleRawButton) {
138
- const divElement = this._renderer.createElement('div');
139
- divElement.className = 'raw';
140
- this._renderer.appendChild(this._elementRef.nativeElement, divElement);
141
- divElement.innerHTML =
142
- this._domSanitizer.sanitize(SecurityContext.HTML, codeStr) ?? '';
143
- this._renderer.setStyle(divElement, 'display', 'none');
144
- }
145
- }
146
- _render(contents) {
147
- // Trim leading and trailing newlines
148
- contents = contents
149
- .replace(/^(\s|\t)*\n+/g, '')
150
- .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
151
- // Split markup by line characters
152
- let lines = contents.split('\n');
153
- // check how much indentation is used by the first actual code line
154
- const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
155
- const firstLineWhitespace = firstLineWhitespaceMatch
156
- ? firstLineWhitespaceMatch[0]
157
- : null;
158
- // Remove all indentation spaces so code can be parsed correctly
159
- const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
160
- lines = lines.map(function (line) {
161
- return line
162
- .replace('=""', '') // remove empty values
163
- .replace(startingWhitespaceRegex, '')
164
- .replace(/\s+$/, ''); // remove trailing white spaces
165
- });
166
- const codeToParse = lines
167
- .join('\n')
168
- .replace(/\{ \{/gi, '{{')
169
- .replace(/\} \}/gi, '}}')
170
- .replace(/&lt;/gi, '<')
171
- .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular
172
- this.copyContent = codeToParse;
173
- // Parse code with highlight.js depending on language
174
- const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
175
- highlightedCode.value = highlightedCode.value
176
- .replace(/=<span class="hljs-value">""<\/span>/gi, '')
177
- .replace('<head>', '')
178
- .replace('<head/>', '');
179
- return highlightedCode.value;
180
- }
181
- }
182
- TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
183
- TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", toggleRawButton: "toggleRawButton", rawToggleLabels: "rawToggleLabels", 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 [toggleRawButton]=\"toggleRawButton\"\n [rawToggleLabels]=\"rawToggleLabels\"\n (toggleRaw)=\"toggleRawClicked()\"\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;position:relative}: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;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 div.raw{flex-grow:1}: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"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips", "toggleRawButton", "rawToggleLabels"], outputs: ["toggleRaw"] }] });
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdHighlightComponent, decorators: [{
185
- type: Component,
186
- 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 [toggleRawButton]=\"toggleRawButton\"\n [rawToggleLabels]=\"rawToggleLabels\"\n (toggleRaw)=\"toggleRawClicked()\"\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;position:relative}: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;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 div.raw{flex-grow:1}: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"] }]
187
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
188
- type: Input
189
- }], copyCodeToClipboard: [{
190
- type: Input
191
- }], copyCodeTooltips: [{
192
- type: Input
193
- }], toggleRawButton: [{
194
- type: Input
195
- }], rawToggleLabels: [{
196
- type: Input
197
- }], codeLang: [{
198
- type: Input
199
- }], lang: [{
200
- type: Input
201
- }], contentReady: [{
202
- type: Output
203
- }], highlightComp: [{
204
- type: ViewChild,
205
- args: ['highlightComponent']
206
- }], copyComp: [{
207
- type: ViewChild,
208
- args: ['copyComponent']
209
- }], tooltip: [{
210
- type: ViewChild,
211
- args: ['tooltip']
212
- }] } });
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1oaWdobGlnaHQvc3JjL2xpYi9oaWdobGlnaHQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWhpZ2hsaWdodC9zcmMvbGliL2hpZ2hsaWdodC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU12RCxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7Ozs7O0FBT2hDLE1BQU0sT0FBTyxvQkFBb0I7SUFRL0I7Ozs7Ozs7T0FPRztJQUNILElBQ0ksT0FBTyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQThCRDs7Ozs7OztPQU9HO0lBRUgsSUFDSSxRQUFRLENBQUMsSUFBWTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCw4Q0FBOEM7SUFDOUMsSUFDSSxJQUFJLENBQUMsSUFBWTtRQUNuQix1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLElBQUks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QUMsU0FBUyxFQUFFLElBQUksQ0FBQzthQUN4QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaURBQWlEO1FBQzVFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLHFEQUFxRDtRQUNyRCxNQUFNLGVBQWUsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLGVBQWUsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUs7YUFDMUMsT0FBTyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQzthQUNyRCxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDOztpSEEzTlUsb0JBQW9CO3FHQUFwQixvQkFBb0IsbW1CQzNCakMsK2RBZ0JBOzJGRFdhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjO29MQXFCcEIsT0FBTztzQkFEVixLQUFLO2dCQWNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFPRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csZUFBZTtzQkFBdkIsS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBZUksWUFBWTtzQkFBckIsTUFBTTtnQkFDMEIsYUFBYTtzQkFBN0MsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ0gsUUFBUTtzQkFBbkMsU0FBUzt1QkFBQyxlQUFlO2dCQUVKLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBSZW5kZXJlcjIsXG4gIFNlY3VyaXR5Q29udGV4dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7XG4gIElDb3B5Q29kZVRvb2x0aXBzLFxuICBJUmF3VG9nZ2xlTGFiZWxzLFxufSBmcm9tICcuL2NvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgaGxqcyBmcm9tICdoaWdobGlnaHQuanMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1oaWdobGlnaHQnLFxuICBzdHlsZVVybHM6IFsnLi9oaWdobGlnaHQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpZ2hsaWdodC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkSGlnaGxpZ2h0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY29udGVudCE6IHN0cmluZztcbiAgcHJpdmF0ZSBfbGFuZyA9ICd0eXBlc2NyaXB0JztcblxuICBwcml2YXRlIF9zaG93UmF3ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICpcbiAgICogQ29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBVc2VkIHRvIGxvYWQgZGF0YSBkeW5hbWljYWxseS5cbiAgICpcbiAgICogZS5nLiBgLmh0bWxgLCBgLnRzYCAsIGV0Yy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgIGNvbnNvbGUubG9nKHRoaXMuX2NvbnRlbnQpO1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9DbGlwYm9hcmQ/OiBib29sZWFuXG4gICAqXG4gICAqIERpc3BsYXkgY29weSBidXR0b24gb24gY29kZSBzbmlwcGV0cyB0byBjb3B5IGNvZGUgdG8gY2xpcGJvYXJkLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb0NsaXBib2FyZD8gPSBmYWxzZTtcblxuICAvKipcbiAgICogY29weUNvZGVUb29sdGlwcz86IElDb3B5Q29kZVRvb2x0aXBzXG4gICAqXG4gICAqIFRvb2x0aXBzIGZvciBjb3B5IGJ1dHRvbiB0byBjb3B5IGFuZCB1cG9uIGNvcHlpbmcuXG4gICAqL1xuICBASW5wdXQoKSBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHMgPSB7fTtcblxuICAvKipcbiAgICogdG9nZ2xlUmF3QnV0dG9uPzogYm9vbGVhblxuICAgKlxuICAgKiBEaXNwbGF5IGJ1dHRvbiB0byB0b2dnbGUgcmF3IGNvZGUuXG4gICAqL1xuICBASW5wdXQoKSB0b2dnbGVSYXdCdXR0b24gPSBmYWxzZTtcblxuICAvKipcbiAgICogcmF3VG9nZ2xlTGFiZWxzPzogSVJhd1RvZ2dsZUxhYmVsc1xuICAgKlxuICAgKiBMYWJlbHMgZm9yIHJhdyB0b2dnbGUgYnV0dG9uLlxuICAgKi9cbiAgQElucHV0KCkgcmF3VG9nZ2xlTGFiZWxzPzogSVJhd1RvZ2dsZUxhYmVscyA9IHt9O1xuXG4gIC8qKlxuICAgKiBsYW5nPzogc3RyaW5nXG4gICAqXG4gICAqIExhbmd1YWdlIG9mIHRoZSBjb2RlIGNvbnRlbnQgdG8gYmUgcGFyc2VkIGFzIGhpZ2hsaWdodGVkIGh0bWwuXG4gICAqIERlZmF1bHRzIHRvIGB0eXBlc2NyaXB0YFxuICAgKlxuICAgKiBlLmcuIGB0eXBlc2NyaXB0YCwgYGh0bWxgICwgZXRjLlxuICAgKi9cblxuICBASW5wdXQoKVxuICBzZXQgY29kZUxhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5nKTtcbiAgfVxuICAvKiogQGRlcHJlY2F0ZWQgLSByZW1vdmVkIGNvbXBsZXRlbHkgQDQuMC4wICovXG4gIEBJbnB1dCgpXG4gIHNldCBsYW5nKGxhbmc6IHN0cmluZykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdERVBSRUNBVElPTiBXQVJOSU5HOiBzd2l0Y2ggdG8gY29kZUxhbmcgYXR0cmlidXRlIGFzIGxhbmcgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuJ1xuICAgICk7XG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5nKTtcbiAgfVxuXG4gIGNvcHlDb250ZW50ITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBjb250ZW50UmVhZHk/OiBmdW5jdGlvblxuICAgKiBFdmVudCBlbWl0dGVkIGFmdGVyIHRoZSBoaWdobGlnaHQgY29udGVudCByZW5kZXJpbmcgaXMgZmluaXNoZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgY29udGVudFJlYWR5OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoJ2hpZ2hsaWdodENvbXBvbmVudCcpIGhpZ2hsaWdodENvbXAhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb3B5Q29tcG9uZW50JykgY29weUNvbXAhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3Rvb2x0aXAnKSB0b29sdGlwITogTWF0VG9vbHRpcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udGVudCkge1xuICAgICAgdGhpcy5fY29udGVudCA9XG4gICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5oaWdobGlnaHRDb21wLm5hdGl2ZUVsZW1lbnQpLnRleHRDb250ZW50IHx8ICcnO1xuICAgIH1cbiAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcblxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbGFuZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRXJyb3I6IGxhbmd1YWdlIGF0dHJpYnV0ZSBtdXN0IGJlIGRlZmluZWQgaW4gVGRIaWdobGlnaHRDb21wb25lbnQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbGFuZyA9IGxhbmc7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVSYXdDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX3Nob3dSYXcgPSAhdGhpcy5fc2hvd1JhdztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigncHJlJykuc3R5bGUuZGlzcGxheSA9IHRoaXNcbiAgICAgIC5fc2hvd1Jhd1xuICAgICAgPyAnbm9uZSdcbiAgICAgIDogJ2Jsb2NrJztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnJhdycpLnN0eWxlLmRpc3BsYXkgPSB0aGlzXG4gICAgICAuX3Nob3dSYXdcbiAgICAgID8gJ2Jsb2NrJ1xuICAgICAgOiAnbm9uZSc7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBtZXRob2QgdG8gcGFyc2UgYSBzdHJpbmcgb2YgY29kZSBpbnRvIEhUTUwgRWxlbWVudHMgYW5kIGxvYWQgdGhlbSBpbnRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgX2xvYWRDb250ZW50KGNvZGU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoY29kZSAmJiBjb2RlLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDbGVhbiBjb250YWluZXJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdpbm5lckhUTUwnLFxuICAgICAgICAnJ1xuICAgICAgKTtcblxuICAgICAgdGhpcy5fZWxlbWVudEZyb21TdHJpbmcoY29kZSk7XG5cbiAgICAgIGlmICh0aGlzLmNvcHlDb2RlVG9DbGlwYm9hcmQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIHRoaXMuY29weUNvbXAubmF0aXZlRWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRSZWFkeS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9lbGVtZW50RnJvbVN0cmluZyhjb2RlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZW5kZXJlcjIgZG9lc250IGhhdmUgYSBwYXJzaW5nIG1ldGhvZCwgc28gd2UgaGF2ZSB0byBzYW5pdGl6ZSBhbmQgdXNlIFtpbm5lckhUTUxdXG4gICAgLy8gdG8gcGFyc2UgdGhlIHN0cmluZyBpbnRvIERPTSBlbGVtZW50IGZvciBub3cuXG4gICAgY29uc3QgcHJlRWxlbWVudDogSFRNTFByZUVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHByZUVsZW1lbnQpO1xuICAgIGNvbnN0IGNvZGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2NvZGUnKTtcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChwcmVFbGVtZW50LCBjb2RlRWxlbWVudCk7XG4gICAgLy8gU2V0IC5oaWdobGlnaHQgY2xhc3MgaW50byA8Y29kZT4gZWxlbWVudFxuICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKGNvZGVFbGVtZW50LCAnaGlnaGxpZ2h0Jyk7XG5cbiAgICBjb25zdCBoaWdobGlnaHRlZENvZGUgPSB0aGlzLl9yZW5kZXIoY29kZVN0cik7XG5cbiAgICBjb2RlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgdGhpcy5fZG9tU2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5IVE1MLCBoaWdobGlnaHRlZENvZGUpID8/ICcnO1xuXG4gICAgaWYgKHRoaXMudG9nZ2xlUmF3QnV0dG9uKSB7XG4gICAgICBjb25zdCBkaXZFbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2RWxlbWVudC5jbGFzc05hbWUgPSAncmF3JztcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgZGl2RWxlbWVudCk7XG4gICAgICBkaXZFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICAgIHRoaXMuX2RvbVNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgY29kZVN0cikgPz8gJyc7XG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZShkaXZFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyKGNvbnRlbnRzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgbmV3bGluZXNcbiAgICBjb250ZW50cyA9IGNvbnRlbnRzXG4gICAgICAucmVwbGFjZSgvXihcXHN8XFx0KSpcXG4rL2csICcnKVxuICAgICAgLnJlcGxhY2UoLyhcXHN8XFx0KSpcXG4rKFxcc3xcXHQpKiQvZywgJycpO1xuICAgIC8vIFNwbGl0IG1hcmt1cCBieSBsaW5lIGNoYXJhY3RlcnNcbiAgICBsZXQgbGluZXM6IHN0cmluZ1tdID0gY29udGVudHMuc3BsaXQoJ1xcbicpO1xuXG4gICAgLy8gY2hlY2sgaG93IG11Y2ggaW5kZW50YXRpb24gaXMgdXNlZCBieSB0aGUgZmlyc3QgYWN0dWFsIGNvZGUgbGluZVxuICAgIGNvbnN0IGZpcnN0TGluZVdoaXRlc3BhY2VNYXRjaCA9IGxpbmVzWzBdLm1hdGNoKC9eKFxcc3xcXHQpKi8pO1xuICAgIGNvbnN0IGZpcnN0TGluZVdoaXRlc3BhY2UgPSBmaXJzdExpbmVXaGl0ZXNwYWNlTWF0Y2hcbiAgICAgID8gZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoWzBdXG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBSZW1vdmUgYWxsIGluZGVudGF0aW9uIHNwYWNlcyBzbyBjb2RlIGNhbiBiZSBwYXJzZWQgY29ycmVjdGx5XG4gICAgY29uc3Qgc3RhcnRpbmdXaGl0ZXNwYWNlUmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIGZpcnN0TGluZVdoaXRlc3BhY2UpO1xuICAgIGxpbmVzID0gbGluZXMubWFwKGZ1bmN0aW9uIChsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICAgICAgLnJlcGxhY2UoJz1cIlwiJywgJycpIC8vIHJlbW92ZSBlbXB0eSB2YWx1ZXNcbiAgICAgICAgLnJlcGxhY2Uoc3RhcnRpbmdXaGl0ZXNwYWNlUmVnZXgsICcnKVxuICAgICAgICAucmVwbGFjZSgvXFxzKyQvLCAnJyk7IC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvZGVUb1BhcnNlOiBzdHJpbmcgPSBsaW5lc1xuICAgICAgLmpvaW4oJ1xcbicpXG4gICAgICAucmVwbGFjZSgvXFx7IFxcey9naSwgJ3t7JylcbiAgICAgIC5yZXBsYWNlKC9cXH0gXFx9L2dpLCAnfX0nKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZ2ksICc8JylcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2dpLCAnPicpOyAvLyByZXBsYWNlIHdpdGggPCBhbmQgPiB0byByZW5kZXIgSFRNTCBpbiBBbmd1bGFyXG4gICAgdGhpcy5jb3B5Q29udGVudCA9IGNvZGVUb1BhcnNlO1xuICAgIC8vIFBhcnNlIGNvZGUgd2l0aCBoaWdobGlnaHQuanMgZGVwZW5kaW5nIG9uIGxhbmd1YWdlXG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRDb2RlOiBhbnkgPSBobGpzLmhpZ2hsaWdodCh0aGlzLl9sYW5nLCBjb2RlVG9QYXJzZSwgdHJ1ZSk7XG4gICAgaGlnaGxpZ2h0ZWRDb2RlLnZhbHVlID0gaGlnaGxpZ2h0ZWRDb2RlLnZhbHVlXG4gICAgICAucmVwbGFjZSgvPTxzcGFuIGNsYXNzPVwiaGxqcy12YWx1ZVwiPlwiXCI8XFwvc3Bhbj4vZ2ksICcnKVxuICAgICAgLnJlcGxhY2UoJzxoZWFkPicsICcnKVxuICAgICAgLnJlcGxhY2UoJzxoZWFkLz4nLCAnJyk7XG4gICAgcmV0dXJuIGhpZ2hsaWdodGVkQ29kZS52YWx1ZTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiAjaGlnaGxpZ2h0Q29tcG9uZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPGRpdiAjY29weUNvbXBvbmVudCAqbmdJZj1cImNvcHlDb2RlVG9DbGlwYm9hcmRcIj5cbiAgICA8dGQtY29weS1jb2RlLWJ1dHRvblxuICAgICAgW3RvZ2dsZVJhd0J1dHRvbl09XCJ0b2dnbGVSYXdCdXR0b25cIlxuICAgICAgW3Jhd1RvZ2dsZUxhYmVsc109XCJyYXdUb2dnbGVMYWJlbHNcIlxuICAgICAgKHRvZ2dsZVJhdyk9XCJ0b2dnbGVSYXdDbGlja2VkKClcIlxuICAgICAgW2NvcGllZENvbnRlbnRdPVwiY29weUNvbnRlbnRcIlxuICAgICAgW2NvcHlDb2RlVG9DbGlwYm9hcmRdPVwiY29weUNvZGVUb0NsaXBib2FyZFwiXG4gICAgICBbY29weUNvZGVUb29sdGlwc109XCJjb3B5Q29kZVRvb2x0aXBzXCJcbiAgICA+PC90ZC1jb3B5LWNvZGUtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,345 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, Input, Output, ViewChild, HostListener, SecurityContext, NgModule } from '@angular/core';
3
- import hljs from 'highlight.js';
4
- import * as i1$1 from '@angular/platform-browser';
5
- import * as i1 from '@angular/common';
6
- import { CommonModule } from '@angular/common';
7
- import * as i2 from '@angular/cdk/clipboard';
8
- import { ClipboardModule } from '@angular/cdk/clipboard';
9
- import * as i3 from '@angular/material/icon';
10
- import { MatIconModule } from '@angular/material/icon';
11
- import * as i4 from '@angular/material/button-toggle';
12
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
13
- import * as i5 from '@angular/material/button';
14
- import { MatButtonModule } from '@angular/material/button';
15
- import * as i6 from '@angular/material/tooltip';
16
- import { MatTooltipModule } from '@angular/material/tooltip';
17
-
18
- class TdCopyCodeButtonComponent {
19
- constructor() {
20
- this.copyCodeToClipboard = false;
21
- /**
22
- * copyCodeTooltips?: ICopyCodeTooltips
23
- *
24
- * Tooltips for copy button to copy and upon copying.
25
- */
26
- this.copyCodeTooltips = {};
27
- this.toggleRawButton = false;
28
- this.rawToggleLabels = {};
29
- this.rawToggle = false;
30
- this.toggleRaw = new EventEmitter();
31
- }
32
- get copyTooltip() {
33
- return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
34
- }
35
- get copiedTooltip() {
36
- return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
37
- }
38
- get rawToggleText() {
39
- var _a, _b;
40
- if (this.rawToggle) {
41
- return ((_a = this.rawToggleLabels) === null || _a === void 0 ? void 0 : _a.viewCode) || 'View code';
42
- }
43
- else {
44
- return ((_b = this.rawToggleLabels) === null || _b === void 0 ? void 0 : _b.viewRaw) || 'Raw';
45
- }
46
- }
47
- textCopied(event) {
48
- if (event) {
49
- this.tooltip.hide();
50
- this.tooltip.message = this.copiedTooltip;
51
- this.tooltip.show();
52
- }
53
- }
54
- initializeTooltip() {
55
- setTimeout(() => {
56
- this.tooltip.message = this.copyTooltip;
57
- }, 200);
58
- }
59
- toggleRawClicked() {
60
- this.rawToggle = !this.rawToggle;
61
- this.toggleRaw.emit();
62
- this.rawButton.checked = false;
63
- }
64
- copyClicked() {
65
- console.log('copyClicked');
66
- this.copyButton.checked = false;
67
- }
68
- }
69
- TdCopyCodeButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdCopyCodeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
70
- TdCopyCodeButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: { copiedContent: "copiedContent", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", toggleRawButton: "toggleRawButton", rawToggleLabels: "rawToggleLabels" }, outputs: { toggleRaw: "toggleRaw" }, host: { listeners: { "mouseleave": "initializeTooltip()" } }, viewQueries: [{ propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "rawButton", first: true, predicate: ["rawButton"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true }], ngImport: i0, template: "<mat-button-toggle-group\n multiple\n class=\"raw-and-copy-buttons\"\n *ngIf=\"toggleRawButton; else button\"\n>\n <mat-button-toggle (click)=\"toggleRawClicked()\" #rawButton>{{\n rawToggleText\n }}</mat-button-toggle>\n <mat-button-toggle\n [cdkCopyToClipboard]=\"copiedContent\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n #copyButton\n (click)=\"copyClicked()\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n >\n <mat-icon width>content_copy</mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n\n<ng-template #button>\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</ng-template>\n", styles: ["mat-button-toggle-group.raw-and-copy-buttons{margin-top:-8px;margin-right:-8px;margin-left:8px}mat-button-toggle-group.raw-and-copy-buttons ::ng-deep .mat-button-toggle-label-content{font-size:12px;line-height:28px}mat-button-toggle-group.raw-and-copy-buttons ::ng-deep .mat-button-toggle-label-content mat-icon{width:16px;height:16px;font-size:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
71
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdCopyCodeButtonComponent, decorators: [{
72
- type: Component,
73
- args: [{ selector: 'td-copy-code-button', template: "<mat-button-toggle-group\n multiple\n class=\"raw-and-copy-buttons\"\n *ngIf=\"toggleRawButton; else button\"\n>\n <mat-button-toggle (click)=\"toggleRawClicked()\" #rawButton>{{\n rawToggleText\n }}</mat-button-toggle>\n <mat-button-toggle\n [cdkCopyToClipboard]=\"copiedContent\"\n [matTooltip]=\"copyTooltip\"\n #tooltip=\"matTooltip\"\n #copyButton\n (click)=\"copyClicked()\"\n (cdkCopyToClipboardCopied)=\"textCopied($event)\"\n >\n <mat-icon width>content_copy</mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n\n<ng-template #button>\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</ng-template>\n", styles: ["mat-button-toggle-group.raw-and-copy-buttons{margin-top:-8px;margin-right:-8px;margin-left:8px}mat-button-toggle-group.raw-and-copy-buttons ::ng-deep .mat-button-toggle-label-content{font-size:12px;line-height:28px}mat-button-toggle-group.raw-and-copy-buttons ::ng-deep .mat-button-toggle-label-content mat-icon{width:16px;height:16px;font-size:16px}\n"] }]
74
- }], propDecorators: { copiedContent: [{
75
- type: Input
76
- }], copyCodeToClipboard: [{
77
- type: Input
78
- }], copyCodeTooltips: [{
79
- type: Input
80
- }], toggleRawButton: [{
81
- type: Input
82
- }], rawToggleLabels: [{
83
- type: Input
84
- }], toggleRaw: [{
85
- type: Output
86
- }], copyButton: [{
87
- type: ViewChild,
88
- args: ['copyButton']
89
- }], rawButton: [{
90
- type: ViewChild,
91
- args: ['rawButton']
92
- }], tooltip: [{
93
- type: ViewChild,
94
- args: ['tooltip']
95
- }], initializeTooltip: [{
96
- type: HostListener,
97
- args: ['mouseleave']
98
- }] } });
99
-
100
- class TdHighlightComponent {
101
- /**
102
- * content?: string
103
- *
104
- * Code content to be parsed as highlighted html.
105
- * Used to load data dynamically.
106
- *
107
- * e.g. `.html`, `.ts` , etc.
108
- */
109
- set content(content) {
110
- this._content = content;
111
- console.log(this._content);
112
- if (this._initialized) {
113
- this._loadContent(this._content);
114
- }
115
- }
116
- /**
117
- * lang?: string
118
- *
119
- * Language of the code content to be parsed as highlighted html.
120
- * Defaults to `typescript`
121
- *
122
- * e.g. `typescript`, `html` , etc.
123
- */
124
- set codeLang(lang) {
125
- this.setLanguage(lang);
126
- }
127
- /** @deprecated - removed completely @4.0.0 */
128
- set lang(lang) {
129
- // tslint:disable-next-line: no-console
130
- console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
131
- this.setLanguage(lang);
132
- }
133
- constructor(_renderer, _elementRef, _domSanitizer, cdr) {
134
- this._renderer = _renderer;
135
- this._elementRef = _elementRef;
136
- this._domSanitizer = _domSanitizer;
137
- this.cdr = cdr;
138
- this._initialized = false;
139
- this._lang = 'typescript';
140
- this._showRaw = false;
141
- /**
142
- * copyCodeToClipboard?: boolean
143
- *
144
- * Display copy button on code snippets to copy code to clipboard.
145
- */
146
- this.copyCodeToClipboard = false;
147
- /**
148
- * copyCodeTooltips?: ICopyCodeTooltips
149
- *
150
- * Tooltips for copy button to copy and upon copying.
151
- */
152
- this.copyCodeTooltips = {};
153
- /**
154
- * toggleRawButton?: boolean
155
- *
156
- * Display button to toggle raw code.
157
- */
158
- this.toggleRawButton = false;
159
- /**
160
- * rawToggleLabels?: IRawToggleLabels
161
- *
162
- * Labels for raw toggle button.
163
- */
164
- this.rawToggleLabels = {};
165
- /**
166
- * contentReady?: function
167
- * Event emitted after the highlight content rendering is finished.
168
- */
169
- this.contentReady = new EventEmitter();
170
- }
171
- ngAfterViewChecked() {
172
- this.cdr.detectChanges();
173
- }
174
- ngAfterViewInit() {
175
- if (!this._content) {
176
- this._content =
177
- this.highlightComp.nativeElement.textContent || '';
178
- }
179
- this._loadContent(this._content);
180
- this._initialized = true;
181
- }
182
- setLanguage(lang) {
183
- if (!lang) {
184
- throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
185
- }
186
- this._lang = lang;
187
- if (this._initialized) {
188
- this._loadContent(this._content);
189
- }
190
- }
191
- toggleRawClicked() {
192
- this._showRaw = !this._showRaw;
193
- this._elementRef.nativeElement.querySelector('pre').style.display = this
194
- ._showRaw
195
- ? 'none'
196
- : 'block';
197
- this._elementRef.nativeElement.querySelector('.raw').style.display = this
198
- ._showRaw
199
- ? 'block'
200
- : 'none';
201
- }
202
- /**
203
- * General method to parse a string of code into HTML Elements and load them into the container
204
- */
205
- _loadContent(code) {
206
- if (code && code.trim().length > 0) {
207
- // Clean container
208
- this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
209
- this._elementFromString(code);
210
- if (this.copyCodeToClipboard) {
211
- this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
212
- }
213
- }
214
- this.contentReady.emit();
215
- }
216
- _elementFromString(codeStr) {
217
- var _a, _b;
218
- // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
219
- // to parse the string into DOM element for now.
220
- const preElement = this._renderer.createElement('pre');
221
- this._renderer.appendChild(this._elementRef.nativeElement, preElement);
222
- const codeElement = this._renderer.createElement('code');
223
- this._renderer.appendChild(preElement, codeElement);
224
- // Set .highlight class into <code> element
225
- this._renderer.addClass(codeElement, 'highlight');
226
- const highlightedCode = this._render(codeStr);
227
- codeElement.innerHTML =
228
- (_a = this._domSanitizer.sanitize(SecurityContext.HTML, highlightedCode)) !== null && _a !== void 0 ? _a : '';
229
- if (this.toggleRawButton) {
230
- const divElement = this._renderer.createElement('div');
231
- divElement.className = 'raw';
232
- this._renderer.appendChild(this._elementRef.nativeElement, divElement);
233
- divElement.innerHTML =
234
- (_b = this._domSanitizer.sanitize(SecurityContext.HTML, codeStr)) !== null && _b !== void 0 ? _b : '';
235
- this._renderer.setStyle(divElement, 'display', 'none');
236
- }
237
- }
238
- _render(contents) {
239
- // Trim leading and trailing newlines
240
- contents = contents
241
- .replace(/^(\s|\t)*\n+/g, '')
242
- .replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
243
- // Split markup by line characters
244
- let lines = contents.split('\n');
245
- // check how much indentation is used by the first actual code line
246
- const firstLineWhitespaceMatch = lines[0].match(/^(\s|\t)*/);
247
- const firstLineWhitespace = firstLineWhitespaceMatch
248
- ? firstLineWhitespaceMatch[0]
249
- : null;
250
- // Remove all indentation spaces so code can be parsed correctly
251
- const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
252
- lines = lines.map(function (line) {
253
- return line
254
- .replace('=""', '') // remove empty values
255
- .replace(startingWhitespaceRegex, '')
256
- .replace(/\s+$/, ''); // remove trailing white spaces
257
- });
258
- const codeToParse = lines
259
- .join('\n')
260
- .replace(/\{ \{/gi, '{{')
261
- .replace(/\} \}/gi, '}}')
262
- .replace(/&lt;/gi, '<')
263
- .replace(/&gt;/gi, '>'); // replace with < and > to render HTML in Angular
264
- this.copyContent = codeToParse;
265
- // Parse code with highlight.js depending on language
266
- const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
267
- highlightedCode.value = highlightedCode.value
268
- .replace(/=<span class="hljs-value">""<\/span>/gi, '')
269
- .replace('<head>', '')
270
- .replace('<head/>', '');
271
- return highlightedCode.value;
272
- }
273
- }
274
- TdHighlightComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdHighlightComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
275
- TdHighlightComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: TdHighlightComponent, selector: "td-highlight", inputs: { content: "content", copyCodeToClipboard: "copyCodeToClipboard", copyCodeTooltips: "copyCodeTooltips", toggleRawButton: "toggleRawButton", rawToggleLabels: "rawToggleLabels", 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 [toggleRawButton]=\"toggleRawButton\"\n [rawToggleLabels]=\"rawToggleLabels\"\n (toggleRaw)=\"toggleRawClicked()\"\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;position:relative}: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;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 div.raw{flex-grow:1}: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"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TdCopyCodeButtonComponent, selector: "td-copy-code-button", inputs: ["copiedContent", "copyCodeToClipboard", "copyCodeTooltips", "toggleRawButton", "rawToggleLabels"], outputs: ["toggleRaw"] }] });
276
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: TdHighlightComponent, decorators: [{
277
- type: Component,
278
- 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 [toggleRawButton]=\"toggleRawButton\"\n [rawToggleLabels]=\"rawToggleLabels\"\n (toggleRaw)=\"toggleRawClicked()\"\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;position:relative}: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;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 div.raw{flex-grow:1}: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"] }]
279
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
280
- type: Input
281
- }], copyCodeToClipboard: [{
282
- type: Input
283
- }], copyCodeTooltips: [{
284
- type: Input
285
- }], toggleRawButton: [{
286
- type: Input
287
- }], rawToggleLabels: [{
288
- type: Input
289
- }], codeLang: [{
290
- type: Input
291
- }], lang: [{
292
- type: Input
293
- }], contentReady: [{
294
- type: Output
295
- }], highlightComp: [{
296
- type: ViewChild,
297
- args: ['highlightComponent']
298
- }], copyComp: [{
299
- type: ViewChild,
300
- args: ['copyComponent']
301
- }], tooltip: [{
302
- type: ViewChild,
303
- args: ['tooltip']
304
- }] } });
305
-
306
- class CovalentHighlightModule {
307
- }
308
- CovalentHighlightModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: CovalentHighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
309
- CovalentHighlightModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: CovalentHighlightModule, declarations: [TdHighlightComponent, TdCopyCodeButtonComponent], imports: [CommonModule,
310
- ClipboardModule,
311
- MatIconModule,
312
- MatButtonToggleModule,
313
- MatButtonModule,
314
- MatTooltipModule,
315
- MatButtonModule], exports: [TdHighlightComponent] });
316
- CovalentHighlightModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: CovalentHighlightModule, imports: [CommonModule,
317
- ClipboardModule,
318
- MatIconModule,
319
- MatButtonToggleModule,
320
- MatButtonModule,
321
- MatTooltipModule,
322
- MatButtonModule] });
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: CovalentHighlightModule, decorators: [{
324
- type: NgModule,
325
- args: [{
326
- imports: [
327
- CommonModule,
328
- ClipboardModule,
329
- MatIconModule,
330
- MatButtonToggleModule,
331
- MatButtonModule,
332
- MatTooltipModule,
333
- MatButtonModule,
334
- ],
335
- declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
336
- exports: [TdHighlightComponent],
337
- }]
338
- }] });
339
-
340
- /**
341
- * Generated bundle index. Do not edit.
342
- */
343
-
344
- export { CovalentHighlightModule, TdCopyCodeButtonComponent, TdHighlightComponent };
345
- //# sourceMappingURL=covalent-highlight.mjs.map