@covalent/highlight 4.0.0 → 4.1.0-develop.2
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 +33 -151
- package/_highlight-theme.scss +5 -1
- package/covalent-highlight.d.ts +2 -1
- package/esm2020/covalent-highlight.mjs +5 -0
- package/esm2020/lib/copy-code-button/copy-code-button.component.mjs +55 -0
- package/esm2020/lib/highlight.component.mjs +178 -0
- package/esm2020/lib/highlight.module.mjs +39 -0
- package/esm2020/public_api.mjs +4 -0
- package/fesm2015/covalent-highlight.mjs +270 -0
- package/fesm2015/covalent-highlight.mjs.map +1 -0
- package/fesm2020/covalent-highlight.mjs +269 -0
- package/fesm2020/covalent-highlight.mjs.map +1 -0
- package/{copy-code-button → lib/copy-code-button}/copy-code-button.component.d.ts +4 -1
- package/{highlight.component.d.ts → lib/highlight.component.d.ts} +6 -3
- package/lib/highlight.module.d.ts +13 -0
- package/package.json +29 -33
- package/public_api.d.ts +3 -3
- package/bundles/covalent-highlight.umd.js +0 -444
- package/bundles/covalent-highlight.umd.js.map +0 -1
- package/bundles/covalent-highlight.umd.min.js +0 -2
- package/bundles/covalent-highlight.umd.min.js.map +0 -1
- package/copy-code-button/copy-code-button.component.scss +0 -0
- package/covalent-highlight.metadata.json +0 -1
- package/esm2015/copy-code-button/copy-code-button.component.js +0 -92
- package/esm2015/covalent-highlight.js +0 -10
- package/esm2015/highlight.component.js +0 -286
- package/esm2015/highlight.module.js +0 -23
- package/esm2015/index.js +0 -7
- package/esm2015/public_api.js +0 -9
- package/fesm2015/covalent-highlight.js +0 -416
- package/fesm2015/covalent-highlight.js.map +0 -1
- package/highlight.component.scss +0 -49
- package/highlight.module.d.ts +0 -2
- package/index.d.ts +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/platform/highlight/highlight.component.ts","../../../src/platform/highlight/copy-code-button/copy-code-button.component.ts","../../../../src/platform/highlight/highlight.module.ts"],"names":["hljs","require","TdHighlightComponent","_renderer","_elementRef","_domSanitizer","cdr","this","_initialized","_lang","copyCodeToClipboard","copyCodeTooltips","contentReady","EventEmitter","Object","defineProperty","prototype","content","_content","_loadContent","lang","setLanguage","console","warn","ngAfterViewChecked","detectChanges","ngAfterViewInit","highlightComp","textContent","Error","code","trim","length","setProperty","nativeElement","_elementFromString","_render","appendChild","copyComp","emit","codeStr","preElement","createElement","codeElement","addClass","innerHTML","sanitize","SecurityContext","HTML","contents","lines","replace","split","firstLineWhitespace","match","startingWhitespaceRegex","RegExp","codeToParse","map","line","join","copyContent","highlightedCode","highlight","value","Component","args","selector","template","Renderer2","ElementRef","DomSanitizer","ChangeDetectorRef","Input","Output","ViewChild","TdCopyCodeButtonComponent","copy","copied","textCopied","event","tooltip","hide","message","copiedTooltip","show","initializeTooltip","_this","setTimeout","copyTooltip","HostListener","NgModule","imports","CommonModule","ClipboardModule","MatIconModule","MatTooltipModule","MatButtonModule","declarations","exports"],"mappings":"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","sourcesContent":["import {\n Component,\n AfterViewInit,\n ElementRef,\n Input,\n Output,\n EventEmitter,\n Renderer2,\n SecurityContext,\n ViewChild,\n ChangeDetectorRef,\n AfterViewChecked,\n TemplateRef,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ICopyCodeTooltips } from '.';\n\ndeclare const require: any;\n/* tslint:disable-next-line */\nlet hljs: any = require('highlight.js/lib');\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: boolean = false;\n\n private _content: string;\n private _lang: string = '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('content')\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: boolean = 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('codeLang')\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('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');\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((<HTMLElement>this.highlightComp.nativeElement).textContent);\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('Error: language attribute must be defined in TdHighlightComponent.');\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): void {\n if (code && code.trim().length > 0) {\n // Clean container\n this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');\n // Parse html string into actual HTML elements.\n this._elementFromString(this._render(code));\n if (this.copyCodeToClipboard) {\n this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);\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 = 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.replace(/^(\\s|\\t)*\\n+/g, '').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 firstLineWhitespace: string = lines[0].match(/^(\\s|\\t)*/)[0];\n\n // Remove all indentation spaces so code can be parsed correctly\n const startingWhitespaceRegex: RegExp = 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(/</gi, '<')\n .replace(/>/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","import { Component, OnInit, 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: boolean = 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","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: [CommonModule, ClipboardModule, MatIconModule, MatTooltipModule, MatButtonModule],\n declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],\n exports: [TdHighlightComponent],\n})\nexport class CovalentHighlightModule {}\n"]}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"TdHighlightComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":22,"character":1},"arguments":[{"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{display:-ms-flexbox;display:flex;overflow-x:auto;padding:16px}:host ::ng-deep .highlight,:host ::ng-deep code,:host ::ng-deep pre{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{-moz-tab-size:2;-o-tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;background:rgba(0,0,0,0);border-radius:2px;display:block;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;font-size:.8rem;line-height:1.45;margin:0;overflow-x:auto;padding:0;position:relative;tab-size:2;width:100%}:host ::ng-deep code{margin:0;overflow-wrap:break-word;padding:0;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;line-height:1.5;margin:0;overflow-wrap:break-word}:host ::ng-deep .copy-button{background:inherit;border:none;margin-right:-8px;margin-top:-8px}"]}]}],"members":{"content":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3},"arguments":["content"]}]}],"copyCodeToClipboard":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"copyCodeTooltips":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"codeLang":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3},"arguments":["codeLang"]}]}],"lang":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"contentReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":90,"character":3}}]}],"highlightComp":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":91,"character":3},"arguments":["highlightComponent"]}]}],"copyComp":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":92,"character":3},"arguments":["copyComponent"]}]}],"tooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":94,"character":3},"arguments":["tooltip"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":97,"character":23},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":98,"character":25},{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":99,"character":27},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":100,"character":17}]}],"ngAfterViewChecked":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"setLanguage":[{"__symbolic":"method"}],"_loadContent":[{"__symbolic":"method"}],"_elementFromString":[{"__symbolic":"method"}],"_render":[{"__symbolic":"method"}]}},"CovalentHighlightModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":9,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":12},{"__symbolic":"reference","module":"@angular/cdk/clipboard","name":"ClipboardModule","line":10,"character":26},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":10,"character":43},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":10,"character":58},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":10,"character":76}],"declarations":[{"__symbolic":"reference","name":"TdHighlightComponent"},{"__symbolic":"reference","name":"TdCopyCodeButtonComponent"}],"exports":[{"__symbolic":"reference","name":"TdHighlightComponent"}]}]}],"members":{}},"ICopyCodeTooltips":{"__symbolic":"interface"},"TdCopyCodeButtonComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"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":[""]}]}],"members":{"copiedContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"copyCodeToClipboard":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"copyCodeTooltips":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"tooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":32,"character":3},"arguments":["tooltip"]}]}],"textCopied":[{"__symbolic":"method"}],"initializeTooltip":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":41,"character":3},"arguments":["mouseleave"]}]}]}}},"origins":{"TdHighlightComponent":"./highlight.component","CovalentHighlightModule":"./highlight.module","ICopyCodeTooltips":"./copy-code-button/copy-code-button.component","TdCopyCodeButtonComponent":"./copy-code-button/copy-code-button.component"},"importAs":"@covalent/highlight"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: copy-code-button/copy-code-button.component.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
import { Component, Input, ViewChild, HostListener } from '@angular/core';
|
|
7
|
-
import { MatTooltip } from '@angular/material/tooltip';
|
|
8
|
-
/**
|
|
9
|
-
* @record
|
|
10
|
-
*/
|
|
11
|
-
export function ICopyCodeTooltips() { }
|
|
12
|
-
if (false) {
|
|
13
|
-
/** @type {?|undefined} */
|
|
14
|
-
ICopyCodeTooltips.prototype.copy;
|
|
15
|
-
/** @type {?|undefined} */
|
|
16
|
-
ICopyCodeTooltips.prototype.copied;
|
|
17
|
-
}
|
|
18
|
-
export 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
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @return {?}
|
|
30
|
-
*/
|
|
31
|
-
get copyTooltip() {
|
|
32
|
-
return (this.copyCodeTooltips && this.copyCodeTooltips.copy) || 'Copy';
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* @return {?}
|
|
36
|
-
*/
|
|
37
|
-
get copiedTooltip() {
|
|
38
|
-
return (this.copyCodeTooltips && this.copyCodeTooltips.copied) || 'Copied';
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* @param {?} event
|
|
42
|
-
* @return {?}
|
|
43
|
-
*/
|
|
44
|
-
textCopied(event) {
|
|
45
|
-
if (event) {
|
|
46
|
-
this.tooltip.hide();
|
|
47
|
-
this.tooltip.message = this.copiedTooltip;
|
|
48
|
-
this.tooltip.show();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* @return {?}
|
|
53
|
-
*/
|
|
54
|
-
initializeTooltip() {
|
|
55
|
-
setTimeout((/**
|
|
56
|
-
* @return {?}
|
|
57
|
-
*/
|
|
58
|
-
() => {
|
|
59
|
-
this.tooltip.message = this.copyTooltip;
|
|
60
|
-
}), 200);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
TdCopyCodeButtonComponent.decorators = [
|
|
64
|
-
{ type: Component, args: [{
|
|
65
|
-
selector: 'td-copy-code-button',
|
|
66
|
-
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",
|
|
67
|
-
styles: [""]
|
|
68
|
-
}] }
|
|
69
|
-
];
|
|
70
|
-
TdCopyCodeButtonComponent.propDecorators = {
|
|
71
|
-
copiedContent: [{ type: Input }],
|
|
72
|
-
copyCodeToClipboard: [{ type: Input }],
|
|
73
|
-
copyCodeTooltips: [{ type: Input }],
|
|
74
|
-
tooltip: [{ type: ViewChild, args: ['tooltip',] }],
|
|
75
|
-
initializeTooltip: [{ type: HostListener, args: ['mouseleave',] }]
|
|
76
|
-
};
|
|
77
|
-
if (false) {
|
|
78
|
-
/** @type {?} */
|
|
79
|
-
TdCopyCodeButtonComponent.prototype.copiedContent;
|
|
80
|
-
/** @type {?} */
|
|
81
|
-
TdCopyCodeButtonComponent.prototype.copyCodeToClipboard;
|
|
82
|
-
/**
|
|
83
|
-
* copyCodeTooltips?: ICopyCodeTooltips
|
|
84
|
-
*
|
|
85
|
-
* Tooltips for copy button to copy and upon copying.
|
|
86
|
-
* @type {?}
|
|
87
|
-
*/
|
|
88
|
-
TdCopyCodeButtonComponent.prototype.copyCodeTooltips;
|
|
89
|
-
/** @type {?} */
|
|
90
|
-
TdCopyCodeButtonComponent.prototype.tooltip;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2hpZ2hsaWdodC8iLCJzb3VyY2VzIjpbImNvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUV2RCx1Q0FHQzs7O0lBRkMsaUNBQWM7O0lBQ2QsbUNBQWdCOztBQVFsQixNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBUVcsd0JBQW1CLEdBQVksS0FBSyxDQUFDOzs7Ozs7UUFNckMscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQztJQXlCcEQsQ0FBQzs7OztJQXZCQyxJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDekUsQ0FBQzs7OztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUM3RSxDQUFDOzs7OztJQUlELFVBQVUsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDOzs7O0lBRUQsaUJBQWlCO1FBQ2YsVUFBVTs7O1FBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDLEdBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOzs7WUF0Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLDJSQUFnRDs7YUFFakQ7Ozs0QkFHRSxLQUFLO2tDQUNMLEtBQUs7K0JBTUwsS0FBSztzQkFVTCxTQUFTLFNBQUMsU0FBUztnQ0FTbkIsWUFBWSxTQUFDLFlBQVk7Ozs7SUExQjFCLGtEQUErQjs7SUFDL0Isd0RBQThDOzs7Ozs7O0lBTTlDLHFEQUFrRDs7SUFVbEQsNENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb3B5Q29kZVRvb2x0aXBzIHtcbiAgY29weT86IHN0cmluZztcbiAgY29waWVkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1jb3B5LWNvZGUtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcHktY29kZS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3B5LWNvZGUtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRkQ29weUNvZGVCdXR0b25Db21wb25lbnQge1xuICAvLyBwcml2YXRlIF9jb3B5Q29kZVRvb2x0aXBzOiBJQ29weUNvZGVUb29sdGlwcyA9IHt9O1xuICBASW5wdXQoKSBjb3BpZWRDb250ZW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9DbGlwYm9hcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9vbHRpcHM/OiBJQ29weUNvZGVUb29sdGlwc1xuICAgKlxuICAgKiBUb29sdGlwcyBmb3IgY29weSBidXR0b24gdG8gY29weSBhbmQgdXBvbiBjb3B5aW5nLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb29sdGlwczogSUNvcHlDb2RlVG9vbHRpcHMgPSB7fTtcblxuICBnZXQgY29weVRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY29weUNvZGVUb29sdGlwcyAmJiB0aGlzLmNvcHlDb2RlVG9vbHRpcHMuY29weSkgfHwgJ0NvcHknO1xuICB9XG5cbiAgZ2V0IGNvcGllZFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY29weUNvZGVUb29sdGlwcyAmJiB0aGlzLmNvcHlDb2RlVG9vbHRpcHMuY29waWVkKSB8fCAnQ29waWVkJztcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3Rvb2x0aXAnKSB0b29sdGlwOiBNYXRUb29sdGlwO1xuXG4gIHRleHRDb3BpZWQoZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICB0aGlzLnRvb2x0aXAubWVzc2FnZSA9IHRoaXMuY29waWVkVG9vbHRpcDtcbiAgICAgIHRoaXMudG9vbHRpcC5zaG93KCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICBpbml0aWFsaXplVG9vbHRpcCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcC5tZXNzYWdlID0gdGhpcy5jb3B5VG9vbHRpcDtcbiAgICB9LCAyMDApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: covalent-highlight.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Generated bundle index. Do not edit.
|
|
8
|
-
*/
|
|
9
|
-
export { TdHighlightComponent, CovalentHighlightModule, TdCopyCodeButtonComponent } from './index';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtaGlnaGxpZ2h0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3NyYy9wbGF0Zm9ybS9oaWdobGlnaHQvIiwic291cmNlcyI6WyJjb3ZhbGVudC1oaWdobGlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQSx5RkFBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: highlight.component.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
import { Component, ElementRef, Input, Output, EventEmitter, Renderer2, SecurityContext, ViewChild, ChangeDetectorRef, } from '@angular/core';
|
|
7
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
8
|
-
import { MatTooltip } from '@angular/material/tooltip';
|
|
9
|
-
/* tslint:disable-next-line */
|
|
10
|
-
/** @type {?} */
|
|
11
|
-
let hljs = require('highlight.js/lib');
|
|
12
|
-
export class TdHighlightComponent {
|
|
13
|
-
/**
|
|
14
|
-
* @param {?} _renderer
|
|
15
|
-
* @param {?} _elementRef
|
|
16
|
-
* @param {?} _domSanitizer
|
|
17
|
-
* @param {?} cdr
|
|
18
|
-
*/
|
|
19
|
-
constructor(_renderer, _elementRef, _domSanitizer, cdr) {
|
|
20
|
-
this._renderer = _renderer;
|
|
21
|
-
this._elementRef = _elementRef;
|
|
22
|
-
this._domSanitizer = _domSanitizer;
|
|
23
|
-
this.cdr = cdr;
|
|
24
|
-
this._initialized = false;
|
|
25
|
-
this._lang = 'typescript';
|
|
26
|
-
/**
|
|
27
|
-
* copyCodeToClipboard?: boolean
|
|
28
|
-
*
|
|
29
|
-
* Display copy button on code snippets to copy code to clipboard.
|
|
30
|
-
*/
|
|
31
|
-
this.copyCodeToClipboard = false;
|
|
32
|
-
/**
|
|
33
|
-
* copyCodeTooltips?: ICopyCodeTooltips
|
|
34
|
-
*
|
|
35
|
-
* Tooltips for copy button to copy and upon copying.
|
|
36
|
-
*/
|
|
37
|
-
this.copyCodeTooltips = {};
|
|
38
|
-
/**
|
|
39
|
-
* contentReady?: function
|
|
40
|
-
* Event emitted after the highlight content rendering is finished.
|
|
41
|
-
*/
|
|
42
|
-
this.contentReady = new EventEmitter();
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* content?: string
|
|
46
|
-
*
|
|
47
|
-
* Code content to be parsed as highlighted html.
|
|
48
|
-
* Used to load data dynamically.
|
|
49
|
-
*
|
|
50
|
-
* e.g. `.html`, `.ts` , etc.
|
|
51
|
-
* @param {?} content
|
|
52
|
-
* @return {?}
|
|
53
|
-
*/
|
|
54
|
-
set content(content) {
|
|
55
|
-
this._content = content;
|
|
56
|
-
if (this._initialized) {
|
|
57
|
-
this._loadContent(this._content);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* lang?: string
|
|
62
|
-
*
|
|
63
|
-
* Language of the code content to be parsed as highlighted html.
|
|
64
|
-
* Defaults to `typescript`
|
|
65
|
-
*
|
|
66
|
-
* e.g. `typescript`, `html` , etc.
|
|
67
|
-
* @param {?} lang
|
|
68
|
-
* @return {?}
|
|
69
|
-
*/
|
|
70
|
-
set codeLang(lang) {
|
|
71
|
-
this.setLanguage(lang);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* @deprecated - removed completely \@4.0.0
|
|
75
|
-
* @param {?} lang
|
|
76
|
-
* @return {?}
|
|
77
|
-
*/
|
|
78
|
-
set lang(lang) {
|
|
79
|
-
// tslint:disable-next-line: no-console
|
|
80
|
-
console.warn('DEPRECATION WARNING: switch to codeLang attribute as lang attribute is deprecated.');
|
|
81
|
-
this.setLanguage(lang);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* @return {?}
|
|
85
|
-
*/
|
|
86
|
-
ngAfterViewChecked() {
|
|
87
|
-
this.cdr.detectChanges();
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* @return {?}
|
|
91
|
-
*/
|
|
92
|
-
ngAfterViewInit() {
|
|
93
|
-
if (!this._content) {
|
|
94
|
-
this._loadContent(((/** @type {?} */ (this.highlightComp.nativeElement))).textContent);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
this._loadContent(this._content);
|
|
98
|
-
}
|
|
99
|
-
this._initialized = true;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* @param {?} lang
|
|
103
|
-
* @return {?}
|
|
104
|
-
*/
|
|
105
|
-
setLanguage(lang) {
|
|
106
|
-
if (!lang) {
|
|
107
|
-
throw new Error('Error: language attribute must be defined in TdHighlightComponent.');
|
|
108
|
-
}
|
|
109
|
-
this._lang = lang;
|
|
110
|
-
if (this._initialized) {
|
|
111
|
-
this._loadContent(this._content);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* General method to parse a string of code into HTML Elements and load them into the container
|
|
116
|
-
* @private
|
|
117
|
-
* @param {?} code
|
|
118
|
-
* @return {?}
|
|
119
|
-
*/
|
|
120
|
-
_loadContent(code) {
|
|
121
|
-
if (code && code.trim().length > 0) {
|
|
122
|
-
// Clean container
|
|
123
|
-
this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');
|
|
124
|
-
// Parse html string into actual HTML elements.
|
|
125
|
-
this._elementFromString(this._render(code));
|
|
126
|
-
if (this.copyCodeToClipboard) {
|
|
127
|
-
this._renderer.appendChild(this._elementRef.nativeElement, this.copyComp.nativeElement);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
this.contentReady.emit();
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* @private
|
|
134
|
-
* @param {?} codeStr
|
|
135
|
-
* @return {?}
|
|
136
|
-
*/
|
|
137
|
-
_elementFromString(codeStr) {
|
|
138
|
-
// Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]
|
|
139
|
-
// to parse the string into DOM element for now.
|
|
140
|
-
/** @type {?} */
|
|
141
|
-
const preElement = this._renderer.createElement('pre');
|
|
142
|
-
this._renderer.appendChild(this._elementRef.nativeElement, preElement);
|
|
143
|
-
/** @type {?} */
|
|
144
|
-
const codeElement = this._renderer.createElement('code');
|
|
145
|
-
this._renderer.appendChild(preElement, codeElement);
|
|
146
|
-
// Set .highlight class into <code> element
|
|
147
|
-
this._renderer.addClass(codeElement, 'highlight');
|
|
148
|
-
codeElement.innerHTML = this._domSanitizer.sanitize(SecurityContext.HTML, codeStr);
|
|
149
|
-
return preElement;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* @private
|
|
153
|
-
* @param {?} contents
|
|
154
|
-
* @return {?}
|
|
155
|
-
*/
|
|
156
|
-
_render(contents) {
|
|
157
|
-
// Trim leading and trailing newlines
|
|
158
|
-
contents = contents.replace(/^(\s|\t)*\n+/g, '').replace(/(\s|\t)*\n+(\s|\t)*$/g, '');
|
|
159
|
-
// Split markup by line characters
|
|
160
|
-
/** @type {?} */
|
|
161
|
-
let lines = contents.split('\n');
|
|
162
|
-
// check how much indentation is used by the first actual code line
|
|
163
|
-
/** @type {?} */
|
|
164
|
-
const firstLineWhitespace = lines[0].match(/^(\s|\t)*/)[0];
|
|
165
|
-
// Remove all indentation spaces so code can be parsed correctly
|
|
166
|
-
/** @type {?} */
|
|
167
|
-
const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);
|
|
168
|
-
lines = lines.map((/**
|
|
169
|
-
* @param {?} line
|
|
170
|
-
* @return {?}
|
|
171
|
-
*/
|
|
172
|
-
function (line) {
|
|
173
|
-
return line
|
|
174
|
-
.replace('=""', '') // remove empty values
|
|
175
|
-
.replace(startingWhitespaceRegex, '')
|
|
176
|
-
.replace(/\s+$/, ''); // remove trailing white spaces
|
|
177
|
-
}));
|
|
178
|
-
/** @type {?} */
|
|
179
|
-
const codeToParse = lines
|
|
180
|
-
.join('\n')
|
|
181
|
-
.replace(/\{ \{/gi, '{{')
|
|
182
|
-
.replace(/\} \}/gi, '}}')
|
|
183
|
-
.replace(/</gi, '<')
|
|
184
|
-
.replace(/>/gi, '>');
|
|
185
|
-
this.copyContent = codeToParse;
|
|
186
|
-
// Parse code with highlight.js depending on language
|
|
187
|
-
/** @type {?} */
|
|
188
|
-
const highlightedCode = hljs.highlight(this._lang, codeToParse, true);
|
|
189
|
-
highlightedCode.value = highlightedCode.value
|
|
190
|
-
.replace(/=<span class="hljs-value">""<\/span>/gi, '')
|
|
191
|
-
.replace('<head>', '')
|
|
192
|
-
.replace('<head/>', '');
|
|
193
|
-
return highlightedCode.value;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
TdHighlightComponent.decorators = [
|
|
197
|
-
{ type: Component, args: [{
|
|
198
|
-
selector: 'td-highlight',
|
|
199
|
-
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",
|
|
200
|
-
styles: [":host ::ng-deep{display:-ms-flexbox;display:flex;overflow-x:auto;padding:16px}:host ::ng-deep .highlight,:host ::ng-deep code,:host ::ng-deep pre{font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace}:host ::ng-deep pre{-moz-tab-size:2;-o-tab-size:2;-webkit-font-smoothing:auto;-webkit-text-size-adjust:none;background:rgba(0,0,0,0);border-radius:2px;display:block;font-family:Menlo,Monaco,Andale Mono,lucida console,Courier New,monospace;font-size:.8rem;line-height:1.45;margin:0;overflow-x:auto;padding:0;position:relative;tab-size:2;width:100%}:host ::ng-deep code{margin:0;overflow-wrap:break-word;padding:0;white-space:pre-wrap}:host ::ng-deep .highlight{display:block;line-height:1.5;margin:0;overflow-wrap:break-word}:host ::ng-deep .copy-button{background:inherit;border:none;margin-right:-8px;margin-top:-8px}"]
|
|
201
|
-
}] }
|
|
202
|
-
];
|
|
203
|
-
/** @nocollapse */
|
|
204
|
-
TdHighlightComponent.ctorParameters = () => [
|
|
205
|
-
{ type: Renderer2 },
|
|
206
|
-
{ type: ElementRef },
|
|
207
|
-
{ type: DomSanitizer },
|
|
208
|
-
{ type: ChangeDetectorRef }
|
|
209
|
-
];
|
|
210
|
-
TdHighlightComponent.propDecorators = {
|
|
211
|
-
content: [{ type: Input, args: ['content',] }],
|
|
212
|
-
copyCodeToClipboard: [{ type: Input }],
|
|
213
|
-
copyCodeTooltips: [{ type: Input }],
|
|
214
|
-
codeLang: [{ type: Input, args: ['codeLang',] }],
|
|
215
|
-
lang: [{ type: Input }],
|
|
216
|
-
contentReady: [{ type: Output }],
|
|
217
|
-
highlightComp: [{ type: ViewChild, args: ['highlightComponent',] }],
|
|
218
|
-
copyComp: [{ type: ViewChild, args: ['copyComponent',] }],
|
|
219
|
-
tooltip: [{ type: ViewChild, args: ['tooltip',] }]
|
|
220
|
-
};
|
|
221
|
-
if (false) {
|
|
222
|
-
/**
|
|
223
|
-
* @type {?}
|
|
224
|
-
* @private
|
|
225
|
-
*/
|
|
226
|
-
TdHighlightComponent.prototype._initialized;
|
|
227
|
-
/**
|
|
228
|
-
* @type {?}
|
|
229
|
-
* @private
|
|
230
|
-
*/
|
|
231
|
-
TdHighlightComponent.prototype._content;
|
|
232
|
-
/**
|
|
233
|
-
* @type {?}
|
|
234
|
-
* @private
|
|
235
|
-
*/
|
|
236
|
-
TdHighlightComponent.prototype._lang;
|
|
237
|
-
/**
|
|
238
|
-
* copyCodeToClipboard?: boolean
|
|
239
|
-
*
|
|
240
|
-
* Display copy button on code snippets to copy code to clipboard.
|
|
241
|
-
* @type {?}
|
|
242
|
-
*/
|
|
243
|
-
TdHighlightComponent.prototype.copyCodeToClipboard;
|
|
244
|
-
/**
|
|
245
|
-
* copyCodeTooltips?: ICopyCodeTooltips
|
|
246
|
-
*
|
|
247
|
-
* Tooltips for copy button to copy and upon copying.
|
|
248
|
-
* @type {?}
|
|
249
|
-
*/
|
|
250
|
-
TdHighlightComponent.prototype.copyCodeTooltips;
|
|
251
|
-
/** @type {?} */
|
|
252
|
-
TdHighlightComponent.prototype.copyContent;
|
|
253
|
-
/**
|
|
254
|
-
* contentReady?: function
|
|
255
|
-
* Event emitted after the highlight content rendering is finished.
|
|
256
|
-
* @type {?}
|
|
257
|
-
*/
|
|
258
|
-
TdHighlightComponent.prototype.contentReady;
|
|
259
|
-
/** @type {?} */
|
|
260
|
-
TdHighlightComponent.prototype.highlightComp;
|
|
261
|
-
/** @type {?} */
|
|
262
|
-
TdHighlightComponent.prototype.copyComp;
|
|
263
|
-
/** @type {?} */
|
|
264
|
-
TdHighlightComponent.prototype.tooltip;
|
|
265
|
-
/**
|
|
266
|
-
* @type {?}
|
|
267
|
-
* @private
|
|
268
|
-
*/
|
|
269
|
-
TdHighlightComponent.prototype._renderer;
|
|
270
|
-
/**
|
|
271
|
-
* @type {?}
|
|
272
|
-
* @private
|
|
273
|
-
*/
|
|
274
|
-
TdHighlightComponent.prototype._elementRef;
|
|
275
|
-
/**
|
|
276
|
-
* @type {?}
|
|
277
|
-
* @private
|
|
278
|
-
*/
|
|
279
|
-
TdHighlightComponent.prototype._domSanitizer;
|
|
280
|
-
/**
|
|
281
|
-
* @type {?}
|
|
282
|
-
* @private
|
|
283
|
-
*/
|
|
284
|
-
TdHighlightComponent.prototype.cdr;
|
|
285
|
-
}
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vaGlnaGxpZ2h0LyIsInNvdXJjZXMiOlsiaGlnaGxpZ2h0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULGlCQUFpQixHQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7SUFLbkQsSUFBSSxHQUFRLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQU8zQyxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7O0lBcUUvQixZQUNVLFNBQW9CLEVBQ3BCLFdBQXVCLEVBQ3ZCLGFBQTJCLEVBQzNCLEdBQXNCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF4RXhCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRzlCLFVBQUssR0FBVyxZQUFZLENBQUM7Ozs7OztRQXVCNUIsd0JBQW1CLEdBQVksS0FBSyxDQUFDOzs7Ozs7UUFPckMscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQzs7Ozs7UUE2QnhDLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7SUFXbkUsQ0FBQzs7Ozs7Ozs7Ozs7SUE1REosSUFDSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVks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QUFFLEVBQUUsQ0FBQzthQUNyRCxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDOzs7WUFyS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxjQUFjO2dCQUV4QixxV0FBeUM7O2FBQzFDOzs7O1lBbkJDLFNBQVM7WUFKVCxVQUFVO1lBV0gsWUFBWTtZQUpuQixpQkFBaUI7OztzQkErQmhCLEtBQUssU0FBQyxTQUFTO2tDQWFmLEtBQUs7K0JBT0wsS0FBSzt1QkFXTCxLQUFLLFNBQUMsVUFBVTttQkFLaEIsS0FBSzsyQkFhTCxNQUFNOzRCQUNOLFNBQVMsU0FBQyxvQkFBb0I7dUJBQzlCLFNBQVMsU0FBQyxlQUFlO3NCQUV6QixTQUFTLFNBQUMsU0FBUzs7Ozs7OztJQWxFcEIsNENBQXNDOzs7OztJQUV0Qyx3Q0FBeUI7Ozs7O0lBQ3pCLHFDQUFxQzs7Ozs7OztJQXVCckMsbURBQThDOzs7Ozs7O0lBTzlDLGdEQUFrRDs7SUF1QmxELDJDQUFvQjs7Ozs7O0lBTXBCLDRDQUFzRTs7SUFDdEUsNkNBQTJEOztJQUMzRCx3Q0FBaUQ7O0lBRWpELHVDQUEwQzs7Ozs7SUFHeEMseUNBQTRCOzs7OztJQUM1QiwyQ0FBK0I7Ozs7O0lBQy9CLDZDQUFtQzs7Ozs7SUFDbkMsbUNBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdJbml0LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgU2VjdXJpdHlDb250ZXh0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBZnRlclZpZXdDaGVja2VkLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IElDb3B5Q29kZVRvb2x0aXBzIH0gZnJvbSAnLic7XG5cbmRlY2xhcmUgY29uc3QgcmVxdWlyZTogYW55O1xuLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG5sZXQgaGxqczogYW55ID0gcmVxdWlyZSgnaGlnaGxpZ2h0LmpzL2xpYicpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1oaWdobGlnaHQnLFxuICBzdHlsZVVybHM6IFsnLi9oaWdobGlnaHQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpZ2hsaWdodC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkSGlnaGxpZ2h0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY29udGVudDogc3RyaW5nO1xuICBwcml2YXRlIF9sYW5nOiBzdHJpbmcgPSAndHlwZXNjcmlwdCc7XG5cbiAgLyoqXG4gICAqIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICpcbiAgICogQ29kZSBjb250ZW50IHRvIGJlIHBhcnNlZCBhcyBoaWdobGlnaHRlZCBodG1sLlxuICAgKiBVc2VkIHRvIGxvYWQgZGF0YSBkeW5hbWljYWxseS5cbiAgICpcbiAgICogZS5nLiBgLmh0bWxgLCBgLnRzYCAsIGV0Yy5cbiAgICovXG4gIEBJbnB1dCgnY29udGVudCcpXG4gIHNldCBjb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvcHlDb2RlVG9DbGlwYm9hcmQ/OiBib29sZWFuXG4gICAqXG4gICAqIERpc3BsYXkgY29weSBidXR0b24gb24gY29kZSBzbmlwcGV0cyB0byBjb3B5IGNvZGUgdG8gY2xpcGJvYXJkLlxuICAgKi9cbiAgQElucHV0KCkgY29weUNvZGVUb0NsaXBib2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBjb3B5Q29kZVRvb2x0aXBzPzogSUNvcHlDb2RlVG9vbHRpcHNcbiAgICpcbiAgICogVG9vbHRpcHMgZm9yIGNvcHkgYnV0dG9uIHRvIGNvcHkgYW5kIHVwb24gY29weWluZy5cbiAgICovXG4gIEBJbnB1dCgpIGNvcHlDb2RlVG9vbHRpcHM6IElDb3B5Q29kZVRvb2x0aXBzID0ge307XG5cbiAgLyoqXG4gICAqIGxhbmc/OiBzdHJpbmdcbiAgICpcbiAgICogTGFuZ3VhZ2Ugb2YgdGhlIGNvZGUgY29udGVudCB0byBiZSBwYXJzZWQgYXMgaGlnaGxpZ2h0ZWQgaHRtbC5cbiAgICogRGVmYXVsdHMgdG8gYHR5cGVzY3JpcHRgXG4gICAqXG4gICAqIGUuZy4gYHR5cGVzY3JpcHRgLCBgaHRtbGAgLCBldGMuXG4gICAqL1xuXG4gIEBJbnB1dCgnY29kZUxhbmcnKVxuICBzZXQgY29kZUxhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5nKTtcbiAgfVxuICAvKiogQGRlcHJlY2F0ZWQgLSByZW1vdmVkIGNvbXBsZXRlbHkgQDQuMC4wICovXG4gIEBJbnB1dCgpXG4gIHNldCBsYW5nKGxhbmc6IHN0cmluZykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybignREVQUkVDQVRJT04gV0FSTklORzogc3dpdGNoIHRvIGNvZGVMYW5nIGF0dHJpYnV0ZSBhcyBsYW5nIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkLicpO1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UobGFuZyk7XG4gIH1cblxuICBjb3B5Q29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBjb250ZW50UmVhZHk/OiBmdW5jdGlvblxuICAgKiBFdmVudCBlbWl0dGVkIGFmdGVyIHRoZSBoaWdobGlnaHQgY29udGVudCByZW5kZXJpbmcgaXMgZmluaXNoZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgY29udGVudFJlYWR5OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoJ2hpZ2hsaWdodENvbXBvbmVudCcpIGhpZ2hsaWdodENvbXA6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvcHlDb21wb25lbnQnKSBjb3B5Q29tcDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCd0b29sdGlwJykgdG9vbHRpcDogTWF0VG9vbHRpcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2xvYWRDb250ZW50KCg8SFRNTEVsZW1lbnQ+dGhpcy5oaWdobGlnaHRDb21wLm5hdGl2ZUVsZW1lbnQpLnRleHRDb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9hZENvbnRlbnQodGhpcy5fY29udGVudCk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghbGFuZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvcjogbGFuZ3VhZ2UgYXR0cmlidXRlIG11c3QgYmUgZGVmaW5lZCBpbiBUZEhpZ2hsaWdodENvbXBvbmVudC4nKTtcbiAgICB9XG4gICAgdGhpcy5fbGFuZyA9IGxhbmc7XG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBtZXRob2QgdG8gcGFyc2UgYSBzdHJpbmcgb2YgY29kZSBpbnRvIEhUTUwgRWxlbWVudHMgYW5kIGxvYWQgdGhlbSBpbnRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgX2xvYWRDb250ZW50KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChjb2RlICYmIGNvZGUudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENsZWFuIGNvbnRhaW5lclxuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaW5uZXJIVE1MJywgJycpO1xuICAgICAgLy8gUGFyc2UgaHRtbCBzdHJpbmcgaW50byBhY3R1YWwgSFRNTCBlbGVtZW50cy5cbiAgICAgIHRoaXMuX2VsZW1lbnRGcm9tU3RyaW5nKHRoaXMuX3JlbmRlcihjb2RlKSk7XG4gICAgICBpZiAodGhpcy5jb3B5Q29kZVRvQ2xpcGJvYXJkKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5jb3B5Q29tcC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb250ZW50UmVhZHkuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZWxlbWVudEZyb21TdHJpbmcoY29kZVN0cjogc3RyaW5nKTogSFRNTFByZUVsZW1lbnQge1xuICAgIC8vIFJlbmRlcmVyMiBkb2VzbnQgaGF2ZSBhIHBhcnNpbmcgbWV0aG9kLCBzbyB3ZSBoYXZlIHRvIHNhbml0aXplIGFuZCB1c2UgW2lubmVySFRNTF1cbiAgICAvLyB0byBwYXJzZSB0aGUgc3RyaW5nIGludG8gRE9NIGVsZW1lbnQgZm9yIG5vdy5cbiAgICBjb25zdCBwcmVFbGVtZW50OiBIVE1MUHJlRWxlbWVudCA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcHJlRWxlbWVudCk7XG4gICAgY29uc3QgY29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnY29kZScpO1xuICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHByZUVsZW1lbnQsIGNvZGVFbGVtZW50KTtcbiAgICAvLyBTZXQgLmhpZ2hsaWdodCBjbGFzcyBpbnRvIDxjb2RlPiBlbGVtZW50XG4gICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MoY29kZUVsZW1lbnQsICdoaWdobGlnaHQnKTtcbiAgICBjb2RlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9kb21TYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGNvZGVTdHIpO1xuICAgIHJldHVybiBwcmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyKGNvbnRlbnRzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgbmV3bGluZXNcbiAgICBjb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoL14oXFxzfFxcdCkqXFxuKy9nLCAnJykucmVwbGFjZSgvKFxcc3xcXHQpKlxcbisoXFxzfFxcdCkqJC9nLCAnJyk7XG4gICAgLy8gU3BsaXQgbWFya3VwIGJ5IGxpbmUgY2hhcmFjdGVyc1xuICAgIGxldCBsaW5lczogc3RyaW5nW10gPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG5cbiAgICAvLyBjaGVjayBob3cgbXVjaCBpbmRlbnRhdGlvbiBpcyB1c2VkIGJ5IHRoZSBmaXJzdCBhY3R1YWwgY29kZSBsaW5lXG4gICAgY29uc3QgZmlyc3RMaW5lV2hpdGVzcGFjZTogc3RyaW5nID0gbGluZXNbMF0ubWF0Y2goL14oXFxzfFxcdCkqLylbMF07XG5cbiAgICAvLyBSZW1vdmUgYWxsIGluZGVudGF0aW9uIHNwYWNlcyBzbyBjb2RlIGNhbiBiZSBwYXJzZWQgY29ycmVjdGx5XG4gICAgY29uc3Qgc3RhcnRpbmdXaGl0ZXNwYWNlUmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14nICsgZmlyc3RMaW5lV2hpdGVzcGFjZSk7XG4gICAgbGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gbGluZVxuICAgICAgICAucmVwbGFjZSgnPVwiXCInLCAnJykgLy8gcmVtb3ZlIGVtcHR5IHZhbHVlc1xuICAgICAgICAucmVwbGFjZShzdGFydGluZ1doaXRlc3BhY2VSZWdleCwgJycpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrJC8sICcnKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlc1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29kZVRvUGFyc2U6IHN0cmluZyA9IGxpbmVzXG4gICAgICAuam9pbignXFxuJylcbiAgICAgIC5yZXBsYWNlKC9cXHsgXFx7L2dpLCAne3snKVxuICAgICAgLnJlcGxhY2UoL1xcfSBcXH0vZ2ksICd9fScpXG4gICAgICAucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZ2ksICc+Jyk7IC8vIHJlcGxhY2Ugd2l0aCA8IGFuZCA+IHRvIHJlbmRlciBIVE1MIGluIEFuZ3VsYXJcbiAgICB0aGlzLmNvcHlDb250ZW50ID0gY29kZVRvUGFyc2U7XG4gICAgLy8gUGFyc2UgY29kZSB3aXRoIGhpZ2hsaWdodC5qcyBkZXBlbmRpbmcgb24gbGFuZ3VhZ2VcbiAgICBjb25zdCBoaWdobGlnaHRlZENvZGU6IGFueSA9IGhsanMuaGlnaGxpZ2h0KHRoaXMuX2xhbmcsIGNvZGVUb1BhcnNlLCB0cnVlKTtcbiAgICBoaWdobGlnaHRlZENvZGUudmFsdWUgPSBoaWdobGlnaHRlZENvZGUudmFsdWVcbiAgICAgIC5yZXBsYWNlKC89PHNwYW4gY2xhc3M9XCJobGpzLXZhbHVlXCI+XCJcIjxcXC9zcGFuPi9naSwgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQ+JywgJycpXG4gICAgICAucmVwbGFjZSgnPGhlYWQvPicsICcnKTtcbiAgICByZXR1cm4gaGlnaGxpZ2h0ZWRDb2RlLnZhbHVlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: highlight.module.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
import { NgModule } from '@angular/core';
|
|
7
|
-
import { CommonModule } from '@angular/common';
|
|
8
|
-
import { ClipboardModule } from '@angular/cdk/clipboard';
|
|
9
|
-
import { TdHighlightComponent } from './highlight.component';
|
|
10
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
11
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
13
|
-
import { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';
|
|
14
|
-
export class CovalentHighlightModule {
|
|
15
|
-
}
|
|
16
|
-
CovalentHighlightModule.decorators = [
|
|
17
|
-
{ type: NgModule, args: [{
|
|
18
|
-
imports: [CommonModule, ClipboardModule, MatIconModule, MatTooltipModule, MatButtonModule],
|
|
19
|
-
declarations: [TdHighlightComponent, TdCopyCodeButtonComponent],
|
|
20
|
-
exports: [TdHighlightComponent],
|
|
21
|
-
},] }
|
|
22
|
-
];
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vaGlnaGxpZ2h0LyIsInNvdXJjZXMiOlsiaGlnaGxpZ2h0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBTzFGLE1BQU0sT0FBTyx1QkFBdUI7OztZQUxuQyxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDO2dCQUMxRixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSx5QkFBeUIsQ0FBQztnQkFDL0QsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7YUFDaEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENsaXBib2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgVGRIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuL2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFRkQ29weUNvZGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDbGlwYm9hcmRNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1RkSGlnaGxpZ2h0Q29tcG9uZW50LCBUZENvcHlDb2RlQnV0dG9uQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW1RkSGlnaGxpZ2h0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ292YWxlbnRIaWdobGlnaHRNb2R1bGUge31cbiJdfQ==
|
package/esm2015/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: index.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
export { TdHighlightComponent, CovalentHighlightModule, TdCopyCodeButtonComponent } from './public_api';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vc3JjL3BsYXRmb3JtL2hpZ2hsaWdodC8iLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUZBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
package/esm2015/public_api.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: public_api.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
6
|
-
export { TdHighlightComponent } from './highlight.component';
|
|
7
|
-
export { CovalentHighlightModule } from './highlight.module';
|
|
8
|
-
export { TdCopyCodeButtonComponent } from './copy-code-button/copy-code-button.component';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vaGlnaGxpZ2h0LyIsInNvdXJjZXMiOlsicHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFjLHVCQUF1QixDQUFDO0FBQ3RDLHdDQUFjLG9CQUFvQixDQUFDO0FBQ25DLDBDQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9oaWdobGlnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGlnaGxpZ2h0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvcHktY29kZS1idXR0b24vY29weS1jb2RlLWJ1dHRvbi5jb21wb25lbnQnO1xuIl19
|