@matechat/ng 0.0.1-alpha.0 → 20.0.1-alpha.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.
- package/Base/base.component.d.ts +5 -5
- package/Bubble/bubble.component.d.ts +7 -5
- package/Input/button/button.component.d.ts +3 -2
- package/Input/input.component.d.ts +13 -4
- package/MarkdownCard/code-block.component.d.ts +49 -0
- package/MarkdownCard/index.d.ts +3 -0
- package/MarkdownCard/markdown-card.component.d.ts +200 -0
- package/MarkdownCard/markdown-card.module.d.ts +13 -0
- package/README.md +117 -13
- package/components-common/Base/foundation.d.ts +2 -0
- package/components-common/MarkdownCard/codeblock-foundation.d.ts +21 -0
- package/components-common/MarkdownCard/common/MDCardService.d.ts +14 -0
- package/components-common/MarkdownCard/common/MermaidService.d.ts +23 -0
- package/components-common/MarkdownCard/common/mdCard.types.d.ts +56 -0
- package/components-common/MarkdownCard/common/parser.d.ts +150 -0
- package/components-common/MarkdownCard/foundation.d.ts +38 -0
- package/esm2022/Base/base.component.mjs +2 -2
- package/esm2022/Bubble/bubble.component.mjs +15 -8
- package/esm2022/Input/button/button.component.mjs +1 -1
- package/esm2022/Input/input.component.mjs +107 -3
- package/esm2022/Locale/locale.service.mjs +5 -5
- package/esm2022/MarkdownCard/code-block.component.mjs +175 -0
- package/esm2022/MarkdownCard/index.mjs +4 -0
- package/esm2022/MarkdownCard/markdown-card.component.mjs +436 -0
- package/esm2022/MarkdownCard/markdown-card.module.mjs +44 -0
- package/esm2022/components-common/Base/foundation.mjs +4 -1
- package/esm2022/components-common/Input/foundation.mjs +1 -2
- package/esm2022/components-common/MarkdownCard/codeblock-foundation.mjs +132 -0
- package/esm2022/components-common/MarkdownCard/common/MDCardService.mjs +69 -0
- package/esm2022/components-common/MarkdownCard/common/MermaidService.mjs +222 -0
- package/esm2022/components-common/MarkdownCard/common/mdCard.types.mjs +6 -0
- package/esm2022/components-common/MarkdownCard/common/parser.mjs +194 -0
- package/esm2022/components-common/MarkdownCard/foundation.mjs +84 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/matechat-ng.mjs +1514 -17
- package/fesm2022/matechat-ng.mjs.map +1 -1
- package/package.json +12 -7
- package/public-api.d.ts +1 -0
- package/fesm2022/matechat-ng-en-us-DsYnUbZd.mjs +0 -28
- package/fesm2022/matechat-ng-en-us-DsYnUbZd.mjs.map +0 -1
- package/fesm2022/matechat-ng-zh-cn--_YVZHnW.mjs +0 -28
- package/fesm2022/matechat-ng-zh-cn--_YVZHnW.mjs.map +0 -1
|
@@ -42,7 +42,6 @@ export class InputFoundation extends BaseFoundation {
|
|
|
42
42
|
this._adapter.emitChange();
|
|
43
43
|
}
|
|
44
44
|
emitChange() {
|
|
45
|
-
console.log('emitChange---2');
|
|
46
45
|
this._adapter.emitChange();
|
|
47
46
|
}
|
|
48
47
|
submit(inputValue) {
|
|
@@ -69,4 +68,4 @@ export class InputFoundation extends BaseFoundation {
|
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtbmcvc3JjL2NvbXBvbmVudHMtY29tbW9uL0lucHV0L2ZvdW5kYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUVaLGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBUXhCLE1BQU0sT0FBTyxlQUFnQixTQUFRLGNBQTRCO0lBQy9ELFlBQVksT0FBcUI7UUFDL0IsS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNELE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSTtZQUNoQixtQkFBbUIsRUFBRSxRQUFRO1lBQzdCLGlCQUFpQixFQUFFLFdBQVcsS0FBSyxXQUFXLENBQUMsTUFBTTtZQUNyRCxxQkFBcUIsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLFVBQVU7U0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLGNBQWMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUNuQixhQUFhLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLGNBQWMsS0FBSyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEQsUUFBUSxHQUFHLGVBQWUsQ0FBQztZQUMzQixhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLFFBQVE7WUFDYixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsOEJBQThCLEVBQUU7Z0JBQ25ELFFBQVE7Z0JBQ1IsYUFBYTthQUNkLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBa0I7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQ1osY0FBYyxLQUFLLGNBQWMsQ0FBQyxLQUFLO1lBQ3JDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ2pCLENBQUMsQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDLFVBQVU7Z0JBQzlDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVaLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixVQUFVLEVBQUUsRUFBRTthQUNmLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VGb3VuZGF0aW9uLCB7IERlZmF1bHRBZGFwdGVyIH0gZnJvbSAnLi4vQmFzZS9mb3VuZGF0aW9uJztcbmltcG9ydCB7XG4gIERpc3BsYXlUeXBlLFxuICBJbnB1dFZhcmlhbnQsXG4gIFNlbmRCdG5WYXJpYW50LFxuICBTdWJtaXRTaG9ydEtleSxcbn0gZnJvbSAnLi9jb21tb24vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElucHV0QWRhcHRlciBleHRlbmRzIERlZmF1bHRBZGFwdGVyIHtcbiAgbG9jYWxlKGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nO1xuICBlbWl0Q2hhbmdlKCk6IHZvaWQ7XG4gIHN1Ym1pdChpbnB1dFZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgSW5wdXRGb3VuZGF0aW9uIGV4dGVuZHMgQmFzZUZvdW5kYXRpb248SW5wdXRBZGFwdGVyPiB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI6IElucHV0QWRhcHRlcikge1xuICAgIHN1cGVyKHsgLi4uYWRhcHRlciB9KTtcbiAgfVxuXG4gIGdldElucHV0Q2xhc3NlcygpIHtcbiAgICBjb25zdCB7IGRpc2FibGVkLCBkaXNwbGF5VHlwZSwgdmFyaWFudCB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIHJldHVybiB7XG4gICAgICAnbWMtaW5wdXQnOiB0cnVlLFxuICAgICAgJ21jLWlucHV0LWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAnbWMtaW5wdXQtc2ltcGxlJzogZGlzcGxheVR5cGUgPT09IERpc3BsYXlUeXBlLlNpbXBsZSxcbiAgICAgICdtYy1pbnB1dC1ib3JkZXJsZXNzJzogdmFyaWFudCA9PT0gSW5wdXRWYXJpYW50LkJvcmRlckxlc3MsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBsYWNlaG9sZGVyVGV4dCgpIHtcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzdWJtaXRTaG9ydEtleSB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGxldCBlbnRlcktleSA9ICcnO1xuICAgIGxldCBzaGlmdEVudGVyS2V5ID0gJyc7XG5cbiAgICBpZiAoc3VibWl0U2hvcnRLZXkgPT09IFN1Ym1pdFNob3J0S2V5LkVudGVyKSB7XG4gICAgICBlbnRlcktleSA9ICdFbnRlcic7XG4gICAgICBzaGlmdEVudGVyS2V5ID0gJ1NoaWZ0ICsgRW50ZXInO1xuICAgIH0gZWxzZSBpZiAoc3VibWl0U2hvcnRLZXkgPT09IFN1Ym1pdFNob3J0S2V5LlNoaWZ0RW50ZXIpIHtcbiAgICAgIGVudGVyS2V5ID0gJ1NoaWZ0ICsgRW50ZXInO1xuICAgICAgc2hpZnRFbnRlcktleSA9ICdFbnRlcic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGVyS2V5XG4gICAgICA/IHRoaXMuX2FkYXB0ZXIubG9jYWxlKCdJbnB1dC5wbGVhc2VFbnRlclBsYWNlaG9sZGVyJywge1xuICAgICAgICAgIGVudGVyS2V5LFxuICAgICAgICAgIHNoaWZ0RW50ZXJLZXksXG4gICAgICAgIH0pXG4gICAgICA6IHRoaXMuX2FkYXB0ZXIubG9jYWxlKCdJbnB1dC5wbGVhc2VFbnRlcicpO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgIH0pO1xuICAgIHRoaXMuX2FkYXB0ZXIuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hZGFwdGVyLmVtaXRDaGFuZ2UoKTtcbiAgfVxuXG4gIHN1Ym1pdChpbnB1dFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9hZGFwdGVyLnN1Ym1pdChpbnB1dFZhbHVlKTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHsgc3VibWl0U2hvcnRLZXksIGxvY2sgfSA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRTdGF0ZSgnaW5wdXRWYWx1ZScpO1xuICAgIGlmIChzdWJtaXRTaG9ydEtleSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNoaWZ0S2V5ID1cbiAgICAgIHN1Ym1pdFNob3J0S2V5ID09PSBTdWJtaXRTaG9ydEtleS5FbnRlclxuICAgICAgICA/ICFldmVudC5zaGlmdEtleVxuICAgICAgICA6IHN1Ym1pdFNob3J0S2V5ID09PSBTdWJtaXRTaG9ydEtleS5TaGlmdEVudGVyXG4gICAgICAgID8gZXZlbnQuc2hpZnRLZXlcbiAgICAgICAgOiBmYWxzZTtcblxuICAgIGlmIChzaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWxvY2spIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnN1Ym1pdChpbnB1dFZhbHVlKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpbnB1dFZhbHVlOiAnJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import BaseFoundation from '../Base/foundation';
|
|
2
|
+
import { MermaidService } from './common/MermaidService';
|
|
3
|
+
import hljs from 'highlight.js';
|
|
4
|
+
import { MDCardService } from './common/MDCardService';
|
|
5
|
+
export class CodeBlockFoundation extends BaseFoundation {
|
|
6
|
+
constructor(adapter) {
|
|
7
|
+
super({ ...adapter });
|
|
8
|
+
this.toggleExpand = () => {
|
|
9
|
+
this.setState({ expanded: !this.getStates().expanded });
|
|
10
|
+
};
|
|
11
|
+
this.zoomOut = () => {
|
|
12
|
+
const container = this._adapter.getContainer();
|
|
13
|
+
if (container && this.mermaidService) {
|
|
14
|
+
this.mermaidService.zoomOut(container);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
this.zoomIn = () => {
|
|
18
|
+
const container = this._adapter.getContainer();
|
|
19
|
+
if (container && this.mermaidService) {
|
|
20
|
+
this.mermaidService.zoomIn(container);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
this.checkIsMermaid = () => {
|
|
24
|
+
const { enableMermaid, language } = this.getProps();
|
|
25
|
+
return enableMermaid && language?.toLowerCase() === 'mermaid';
|
|
26
|
+
};
|
|
27
|
+
this.download = () => {
|
|
28
|
+
const container = this._adapter.getContainer();
|
|
29
|
+
if (container && this.mermaidService) {
|
|
30
|
+
this.mermaidService.download(container);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
this.handleCopySuccess = () => {
|
|
34
|
+
this.setState({ copied: true });
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
this.setState({ copied: false });
|
|
37
|
+
}, 1500);
|
|
38
|
+
};
|
|
39
|
+
this.updateHighlightedCode = () => {
|
|
40
|
+
const { code, language } = this.getProps();
|
|
41
|
+
let highlightedCode = '';
|
|
42
|
+
try {
|
|
43
|
+
const typeIndex = code.indexOf(`<span class="mc-typewriter`);
|
|
44
|
+
if (language && hljs.getLanguage(language)) {
|
|
45
|
+
if (typeIndex !== -1) {
|
|
46
|
+
highlightedCode =
|
|
47
|
+
hljs.highlight(code.slice(0, typeIndex), {
|
|
48
|
+
language,
|
|
49
|
+
}).value + code.slice(typeIndex);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
highlightedCode = hljs.highlight(code, {
|
|
53
|
+
language,
|
|
54
|
+
}).value;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
if (typeof hljs.highlightAuto !== 'undefined') {
|
|
59
|
+
if (typeIndex !== -1) {
|
|
60
|
+
highlightedCode =
|
|
61
|
+
hljs.highlightAuto(code.slice(0, typeIndex)).value +
|
|
62
|
+
code.slice(typeIndex);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
highlightedCode = hljs.highlightAuto(code).value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
highlightedCode = this.mdCardService.filterHtml(code);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (_) {
|
|
74
|
+
highlightedCode = code;
|
|
75
|
+
}
|
|
76
|
+
this._adapter.highlightCodeChange(highlightedCode, language);
|
|
77
|
+
};
|
|
78
|
+
this.renderMermaid = async () => {
|
|
79
|
+
const { code, theme, mermaidConfig, } = this.getProps();
|
|
80
|
+
const { mermaidContentRef } = this.getStates();
|
|
81
|
+
const isMermaid = this.checkIsMermaid();
|
|
82
|
+
if (!isMermaid || !code || !mermaidContentRef) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!this.mermaidService) {
|
|
86
|
+
try {
|
|
87
|
+
this.mermaidService = new MermaidService();
|
|
88
|
+
const config = {
|
|
89
|
+
theme: theme === 'dark' ? 'dark' : 'default',
|
|
90
|
+
...mermaidConfig,
|
|
91
|
+
};
|
|
92
|
+
this.mermaidService.setConfig(config);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('Failed to load MermaidService:', error);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
this.nextTick(async () => {
|
|
100
|
+
const container = mermaidContentRef.nativeElement;
|
|
101
|
+
if (container) {
|
|
102
|
+
// 移除打字效果相关的span标签
|
|
103
|
+
const cleanCode = code.replace(/<span[^>]*\bclass\s*=\s*['"]mc-typewriter[^>]*>([\s\S]*?)<\/span>/g, `$1`);
|
|
104
|
+
await this.mermaidService?.renderToContainer(container, cleanCode, theme);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
this.mdCardService = new MDCardService();
|
|
109
|
+
}
|
|
110
|
+
copyCodeInternal() {
|
|
111
|
+
const { code } = this.getProps();
|
|
112
|
+
if (navigator.clipboard) {
|
|
113
|
+
navigator.clipboard.writeText(code).then(() => {
|
|
114
|
+
this.handleCopySuccess();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const textarea = document.createElement('textarea');
|
|
119
|
+
textarea.style.position = 'fixed';
|
|
120
|
+
textarea.style.top = '-9999px';
|
|
121
|
+
textarea.style.left = '-9999px';
|
|
122
|
+
textarea.style.zIndex = '-1';
|
|
123
|
+
textarea.value = code;
|
|
124
|
+
document.body.appendChild(textarea);
|
|
125
|
+
textarea.select();
|
|
126
|
+
document.execCommand('copy');
|
|
127
|
+
document.body.removeChild(textarea);
|
|
128
|
+
this.handleCopySuccess();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJsb2NrLWZvdW5kYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29kZWJsb2NrLWZvdW5kYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3ZELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFnQztJQUd2RSxZQUFZLE9BQXlCO1FBQ25DLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUl4QixpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFB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QyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0ErRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUZvdW5kYXRpb24sIHsgRGVmYXVsdEFkYXB0ZXIgfSBmcm9tICcuLi9CYXNlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB0eXBlIHsgQVNUTm9kZSwgTWVybWFpZENvbmZpZyB9IGZyb20gJy4vY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHlwaW5nQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vbWRDYXJkLnR5cGVzJztcbmltcG9ydCB7IE1lcm1haWRTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vTWVybWFpZFNlcnZpY2UnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IE1EQ2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi9NRENhcmRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tBZGFwdGVyIGV4dGVuZHMgRGVmYXVsdEFkYXB0ZXIge1xuICBnZXRDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBoaWdobGlnaHRDb2RlQ2hhbmdlKGNvZGU6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2RlQmxvY2tGb3VuZGF0aW9uIGV4dGVuZHMgQmFzZUZvdW5kYXRpb248Q29kZUJsb2NrQWRhcHRlcj4ge1xuICBtZXJtYWlkU2VydmljZT86IE1lcm1haWRTZXJ2aWNlO1xuICBtZENhcmRTZXJ2aWNlOiBNRENhcmRTZXJ2aWNlO1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBDb2RlQmxvY2tBZGFwdGVyKSB7XG4gICAgc3VwZXIoeyAuLi5hZGFwdGVyIH0pO1xuICAgIHRoaXMubWRDYXJkU2VydmljZSA9IG5ldyBNRENhcmRTZXJ2aWNlKCk7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGV4cGFuZGVkOiAhdGhpcy5nZXRTdGF0ZXMoKS5leHBhbmRlZCB9KTtcbiAgfTtcblxuICB6b29tT3V0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2FkYXB0ZXIuZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnpvb21PdXQoY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgem9vbUluID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2FkYXB0ZXIuZ2V0Q29udGFpbmVyKCk7XG4gICAgaWYgKGNvbnRhaW5lciAmJiB0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnpvb21Jbihjb250YWluZXIpO1xuICAgIH1cbiAgfTtcblxuICBjaGVja0lzTWVybWFpZCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZU1lcm1haWQsIGxhbmd1YWdlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgcmV0dXJuIGVuYWJsZU1lcm1haWQgJiYgbGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKCkgPT09ICdtZXJtYWlkJztcbiAgfTtcblxuICBkb3dubG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS5kb3dubG9hZChjb250YWluZXIpO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVDb3B5U3VjY2VzcyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY29waWVkOiB0cnVlIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvcGllZDogZmFsc2UgfSk7XG4gICAgfSwgMTUwMCk7XG4gIH07XG5cbiAgY29weUNvZGVJbnRlcm5hbCgpIHtcbiAgICBjb25zdCB7IGNvZGUgfSA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29kZSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29weVN1Y2Nlc3MoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS50b3AgPSAnLTk5OTlweCc7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUuekluZGV4ID0gJy0xJztcbiAgICAgIHRleHRhcmVhLnZhbHVlID0gY29kZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xuICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7XG4gICAgICB0aGlzLmhhbmRsZUNvcHlTdWNjZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSGlnaGxpZ2h0ZWRDb2RlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29kZSwgbGFuZ3VhZ2UgfSA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICBsZXQgaGlnaGxpZ2h0ZWRDb2RlID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGVJbmRleCA9IGNvZGUuaW5kZXhPZihgPHNwYW4gY2xhc3M9XCJtYy10eXBld3JpdGVyYCk7XG5cbiAgICAgIGlmIChsYW5ndWFnZSAmJiBobGpzLmdldExhbmd1YWdlKGxhbmd1YWdlKSkge1xuICAgICAgICBpZiAodHlwZUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9XG4gICAgICAgICAgICBobGpzLmhpZ2hsaWdodChjb2RlLnNsaWNlKDAsIHR5cGVJbmRleCksIHtcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICB9KS52YWx1ZSArIGNvZGUuc2xpY2UodHlwZUluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSBobGpzLmhpZ2hsaWdodChjb2RlLCB7XG4gICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICB9KS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBobGpzLmhpZ2hsaWdodEF1dG8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9XG4gICAgICAgICAgICAgIGhsanMuaGlnaGxpZ2h0QXV0byhjb2RlLnNsaWNlKDAsIHR5cGVJbmRleCkpLnZhbHVlICtcbiAgICAgICAgICAgICAgY29kZS5zbGljZSh0eXBlSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSBobGpzLmhpZ2hsaWdodEF1dG8oY29kZSkudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodGVkQ29kZSA9IHRoaXMubWRDYXJkU2VydmljZS5maWx0ZXJIdG1sKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gY29kZTtcbiAgICB9XG4gICAgdGhpcy5fYWRhcHRlci5oaWdobGlnaHRDb2RlQ2hhbmdlKGhpZ2hsaWdodGVkQ29kZSwgbGFuZ3VhZ2UpO1xuICB9O1xuXG4gIHJlbmRlck1lcm1haWQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29kZSxcbiAgICAgIHRoZW1lLFxuICAgICAgbWVybWFpZENvbmZpZyxcbiAgICB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIGNvbnN0IHsgbWVybWFpZENvbnRlbnRSZWZ9ID0gdGhpcy5nZXRTdGF0ZXMoKTtcbiAgICBjb25zdCBpc01lcm1haWQgPSB0aGlzLmNoZWNrSXNNZXJtYWlkKCk7XG4gICAgaWYgKCFpc01lcm1haWQgfHwgIWNvZGUgfHwgIW1lcm1haWRDb250ZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1lcm1haWRTZXJ2aWNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlID0gbmV3IE1lcm1haWRTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IGNvbmZpZzogTWVybWFpZENvbmZpZyA9IHtcbiAgICAgICAgICB0aGVtZTogdGhlbWUgPT09ICdkYXJrJyA/ICdkYXJrJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAuLi5tZXJtYWlkQ29uZmlnLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1lcm1haWRTZXJ2aWNlLnNldENvbmZpZyhjb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgTWVybWFpZFNlcnZpY2U6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubmV4dFRpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVybWFpZENvbnRlbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgLy8g56e76Zmk5omT5a2X5pWI5p6c55u45YWz55qEc3Bhbuagh+etvlxuICAgICAgICBjb25zdCBjbGVhbkNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgLzxzcGFuW14+XSpcXGJjbGFzc1xccyo9XFxzKlsnXCJdbWMtdHlwZXdyaXRlcltePl0qPihbXFxzXFxTXSo/KTxcXC9zcGFuPi9nLFxuICAgICAgICAgIGAkMWBcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tZXJtYWlkU2VydmljZT8ucmVuZGVyVG9Db250YWluZXIoXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGNsZWFuQ29kZSxcbiAgICAgICAgICB0aGVtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { filterXSS, getDefaultCSSWhiteList, getDefaultWhiteList } from 'xss';
|
|
2
|
+
export class MDCardService {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.xssWhiteList = getDefaultWhiteList();
|
|
5
|
+
this.cssWhiteList = getDefaultCSSWhiteList();
|
|
6
|
+
this.setDefaultXss();
|
|
7
|
+
}
|
|
8
|
+
setDefaultXss() {
|
|
9
|
+
this.xssWhiteList['input'] = ['type', 'checked', 'disabled', 'class'];
|
|
10
|
+
this.xssWhiteList['label'] = ['for'];
|
|
11
|
+
this.xssWhiteList['ul'] = ['class'];
|
|
12
|
+
this.xssWhiteList['div'] = ['class'];
|
|
13
|
+
this.xssWhiteList['a'] = ['href', 'class', 'target', 'name'];
|
|
14
|
+
this.xssWhiteList['ol'] = ['start'];
|
|
15
|
+
this.xssWhiteList['p'] = ['class'];
|
|
16
|
+
this.xssWhiteList['span'] = ['style', 'class', 'title', 'id'];
|
|
17
|
+
this.xssWhiteList['svg'] = ['style', 'class', 'width', 'height', 'viewbox', 'preserveaspectratio', 'id', 'fill', 'stroke'];
|
|
18
|
+
this.xssWhiteList['path'] = ['style', 'class', 'd', 'id', 'fill', 'stroke'];
|
|
19
|
+
this.xssWhiteList['th'] = ['style'];
|
|
20
|
+
this.xssWhiteList['td'] = ['style'];
|
|
21
|
+
}
|
|
22
|
+
onIgnoreTagAttr(tag, name, value, isWhiteAttr) {
|
|
23
|
+
if (!isWhiteAttr && (name === 'id' || (tag === 'span' && name === 'style'))) {
|
|
24
|
+
return name + '=' + value;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
getXssWhiteList() {
|
|
29
|
+
return this.xssWhiteList;
|
|
30
|
+
}
|
|
31
|
+
setXssWhiteList(list) {
|
|
32
|
+
this.xssWhiteList = list;
|
|
33
|
+
}
|
|
34
|
+
setCustomXssRules(rules) {
|
|
35
|
+
if (rules) {
|
|
36
|
+
rules.forEach((rule) => {
|
|
37
|
+
if (rule['value'] === null) {
|
|
38
|
+
delete this.xssWhiteList[rule['key']];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.xssWhiteList[rule['key']] = rule['value'];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
setMdPlugins(plugins, mdt) {
|
|
47
|
+
if (plugins && plugins.length) {
|
|
48
|
+
plugins.forEach(item => {
|
|
49
|
+
const { plugin, opts } = item;
|
|
50
|
+
mdt.use(plugin, opts);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
filterHtml(html) {
|
|
55
|
+
return filterXSS(html, {
|
|
56
|
+
whiteList: this.xssWhiteList,
|
|
57
|
+
onIgnoreTagAttr: this.onIgnoreTagAttr,
|
|
58
|
+
css: {
|
|
59
|
+
whiteList: Object.assign({}, this.cssWhiteList, {
|
|
60
|
+
top: true,
|
|
61
|
+
left: true,
|
|
62
|
+
bottom: true,
|
|
63
|
+
right: true,
|
|
64
|
+
}),
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTURDYXJkU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtbmcvc3JjL2NvbXBvbmVudHMtY29tbW9uL01hcmtkb3duQ2FyZC9jb21tb24vTURDYXJkU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFtQixNQUFNLEtBQUssQ0FBQztBQUU5RixNQUFNLE9BQU8sYUFBYTtJQUl4QjtRQUhRLGlCQUFZLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxpQkFBWSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFHOUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJ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dCI6WyJpbXBvcnQgeyBmaWx0ZXJYU1MsIGdldERlZmF1bHRDU1NXaGl0ZUxpc3QsIGdldERlZmF1bHRXaGl0ZUxpc3QsIHR5cGUgSVdoaXRlTGlzdCB9IGZyb20gJ3hzcyc7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbVhzc1J1bGUsIE1kUGx1Z2luIH0gZnJvbSAnLi9tZENhcmQudHlwZXMudHMnO1xuZXhwb3J0IGNsYXNzIE1EQ2FyZFNlcnZpY2Uge1xuICBwcml2YXRlIHhzc1doaXRlTGlzdCA9IGdldERlZmF1bHRXaGl0ZUxpc3QoKTtcbiAgcHJpdmF0ZSBjc3NXaGl0ZUxpc3QgPSBnZXREZWZhdWx0Q1NTV2hpdGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXREZWZhdWx0WHNzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRYc3MoKSB7XG4gICAgdGhpcy54c3NXaGl0ZUxpc3RbJ2lucHV0J10gPSBbJ3R5cGUnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdjbGFzcyddO1xuICAgIHRoaXMueHNzV2hpdGVMaXN0WydsYWJlbCddID0gWydmb3InXTtcbiAgICB0aGlzLnhzc1doaXRlTGlzdFsndWwnXSA9IFsnY2xhc3MnXTtcbiAgICB0aGlzLnhzc1doaXRlTGlzdFsnZGl2J10gPSBbJ2NsYXNzJ107XG4gICAgdGhpcy54c3NXaGl0ZUxpc3RbJ2EnXSA9IFsnaHJlZicsICdjbGFzcycsICd0YXJnZXQnLCAnbmFtZSddO1xuICAgIHRoaXMueHNzV2hpdGVMaXN0WydvbCddID0gWydzdGFydCddO1xuXG4gICAgdGhpcy54c3NXaGl0ZUxpc3RbJ3AnXSA9IFsnY2xhc3MnXTtcbiAgICB0aGlzLnhzc1doaXRlTGlzdFsnc3BhbiddID0gWydzdHlsZScsICdjbGFzcycsICd0aXRsZScsICdpZCddO1xuICAgIHRoaXMueHNzV2hpdGVMaXN0WydzdmcnXSA9IFsnc3R5bGUnLCAnY2xhc3MnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ3ZpZXdib3gnLCAncHJlc2VydmVhc3BlY3RyYXRpbycsICdpZCcsICdmaWxsJywgJ3N0cm9rZSddO1xuICAgIHRoaXMueHNzV2hpdGVMaXN0WydwYXRoJ10gPSBbJ3N0eWxlJywgJ2NsYXNzJywgJ2QnLCAnaWQnLCAnZmlsbCcsICdzdHJva2UnXTtcbiAgICB0aGlzLnhzc1doaXRlTGlzdFsndGgnXSA9IFsnc3R5bGUnXTtcbiAgICB0aGlzLnhzc1doaXRlTGlzdFsndGQnXSA9IFsnc3R5bGUnXTtcbiAgfVxuXG4gIHByaXZhdGUgb25JZ25vcmVUYWdBdHRyKHRhZzogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGlzV2hpdGVBdHRyOiBib29sZWFuKSB7XG4gICAgaWYgKCFpc1doaXRlQXR0ciAmJiAobmFtZSA9PT0gJ2lkJyB8fCAodGFnID09PSAnc3BhbicgJiYgbmFtZSA9PT0gJ3N0eWxlJykpKSB7XG4gICAgICByZXR1cm4gbmFtZSArICc9JyArIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0WHNzV2hpdGVMaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnhzc1doaXRlTGlzdDtcbiAgfVxuXG4gIHNldFhzc1doaXRlTGlzdChsaXN0OiBJV2hpdGVMaXN0KSB7XG4gICAgdGhpcy54c3NXaGl0ZUxpc3QgPSBsaXN0O1xuICB9XG5cbiAgc2V0Q3VzdG9tWHNzUnVsZXMocnVsZXM6IEN1c3RvbVhzc1J1bGVbXSkge1xuICAgIGlmIChydWxlcykge1xuICAgICAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBpZiAocnVsZVsndmFsdWUnXSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLnhzc1doaXRlTGlzdFtydWxlWydrZXknXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy54c3NXaGl0ZUxpc3RbcnVsZVsna2V5J11dID0gcnVsZVsndmFsdWUnXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBzZXRNZFBsdWdpbnMocGx1Z2luczogTWRQbHVnaW5bXSwgbWR0OiBhbnkpIHtcbiAgICBpZiAocGx1Z2lucyAmJiBwbHVnaW5zLmxlbmd0aCkge1xuICAgICAgcGx1Z2lucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IHBsdWdpbiwgb3B0cyB9ID0gaXRlbTtcbiAgICAgICAgbWR0LnVzZShwbHVnaW4sIG9wdHMpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJIdG1sKGh0bWw6IHN0cmluZykge1xuICAgIHJldHVybiBmaWx0ZXJYU1MoaHRtbCwge1xuICAgICAgd2hpdGVMaXN0OiB0aGlzLnhzc1doaXRlTGlzdCxcbiAgICAgIG9uSWdub3JlVGFnQXR0cjogdGhpcy5vbklnbm9yZVRhZ0F0dHIsXG4gICAgICBjc3M6IHtcbiAgICAgICAgd2hpdGVMaXN0OiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNzc1doaXRlTGlzdCwge1xuICAgICAgICAgIHRvcDogdHJ1ZSxcbiAgICAgICAgICBsZWZ0OiB0cnVlLFxuICAgICAgICAgIGJvdHRvbTogdHJ1ZSxcbiAgICAgICAgICByaWdodDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
export class MermaidService {
|
|
2
|
+
constructor(config = {}) {
|
|
3
|
+
this.config = config;
|
|
4
|
+
this.mermaidInstance = null;
|
|
5
|
+
this.isLoading = false;
|
|
6
|
+
this.lastValidResult = '';
|
|
7
|
+
this.viewStateMap = new WeakMap();
|
|
8
|
+
this.containerHeight = 400;
|
|
9
|
+
}
|
|
10
|
+
async loadMermaid() {
|
|
11
|
+
if (this.mermaidInstance) {
|
|
12
|
+
return this.mermaidInstance;
|
|
13
|
+
}
|
|
14
|
+
if (this.isLoading) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const checkInstance = () => {
|
|
17
|
+
if (this.mermaidInstance) {
|
|
18
|
+
resolve(this.mermaidInstance);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
setTimeout(checkInstance, 50);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
checkInstance();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
this.isLoading = true;
|
|
28
|
+
try {
|
|
29
|
+
const { default: mermaid } = await import('mermaid');
|
|
30
|
+
mermaid.initialize({
|
|
31
|
+
theme: this.config.theme || 'default',
|
|
32
|
+
startOnLoad: false,
|
|
33
|
+
suppressErrorRendering: true,
|
|
34
|
+
...this.config
|
|
35
|
+
});
|
|
36
|
+
this.mermaidInstance = mermaid;
|
|
37
|
+
return mermaid;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('Failed to load mermaid:', error);
|
|
41
|
+
throw new Error('Failed to load mermaid library');
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
this.isLoading = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async renderToContainer(container, code, theme = 'light') {
|
|
48
|
+
const svgStr = await this.renderMermaid(code, theme);
|
|
49
|
+
container.innerHTML = svgStr;
|
|
50
|
+
const svg = container.querySelector('svg');
|
|
51
|
+
if (svg) {
|
|
52
|
+
this.initViewState(container, svg);
|
|
53
|
+
this.applyTransform(container, svg);
|
|
54
|
+
svg.addEventListener('mousedown', (e) => this.onSvgMouseDown(e, container, svg));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
initViewState(container, svg) {
|
|
58
|
+
// 获取svg的viewBox或宽高
|
|
59
|
+
let vb = svg.getAttribute('viewBox');
|
|
60
|
+
let svgW = 0, svgH = 0;
|
|
61
|
+
if (vb) {
|
|
62
|
+
const arr = vb.split(/\s+/);
|
|
63
|
+
svgW = parseFloat(arr[2]);
|
|
64
|
+
svgH = parseFloat(arr[3]);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
svgW = svg.width.baseVal.value || svg.getBoundingClientRect().width;
|
|
68
|
+
svgH = svg.height.baseVal.value || svg.getBoundingClientRect().height;
|
|
69
|
+
}
|
|
70
|
+
const contW = container.clientWidth || 0;
|
|
71
|
+
const contH = this.containerHeight;
|
|
72
|
+
let scale = 1;
|
|
73
|
+
if (svgW && svgH && contW && contH) {
|
|
74
|
+
scale = Math.min(contW / svgW, contH / svgH, 1);
|
|
75
|
+
}
|
|
76
|
+
this.viewStateMap.set(container, {
|
|
77
|
+
scale,
|
|
78
|
+
offsetX: 0,
|
|
79
|
+
offsetY: 0,
|
|
80
|
+
dragging: false,
|
|
81
|
+
dragStart: { x: 0, y: 0 },
|
|
82
|
+
lastOffset: { x: 0, y: 0 },
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
applyTransform(container, svg) {
|
|
86
|
+
const state = this.viewStateMap.get(container);
|
|
87
|
+
if (!state)
|
|
88
|
+
return;
|
|
89
|
+
svg.style.position = 'absolute';
|
|
90
|
+
svg.style.left = '50%';
|
|
91
|
+
svg.style.top = '50%';
|
|
92
|
+
svg.style.transform = `translate(-50%, -50%) translate(${state.offsetX}px, ${state.offsetY}px) scale(${state.scale})`;
|
|
93
|
+
svg.style.transformOrigin = 'center center';
|
|
94
|
+
svg.style.cursor = state.dragging ? 'grabbing' : 'grab';
|
|
95
|
+
}
|
|
96
|
+
zoomIn(container) {
|
|
97
|
+
const svg = container.querySelector('svg');
|
|
98
|
+
const state = this.viewStateMap.get(container);
|
|
99
|
+
if (svg && state) {
|
|
100
|
+
state.scale = Math.min(state.scale + 0.2, 3);
|
|
101
|
+
this.applyTransform(container, svg);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
zoomOut(container) {
|
|
105
|
+
const svg = container.querySelector('svg');
|
|
106
|
+
const state = this.viewStateMap.get(container);
|
|
107
|
+
if (svg && state) {
|
|
108
|
+
state.scale = Math.max(state.scale - 0.2, 0.2);
|
|
109
|
+
this.applyTransform(container, svg);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
reset(container) {
|
|
113
|
+
const svg = container.querySelector('svg');
|
|
114
|
+
if (svg) {
|
|
115
|
+
this.initViewState(container, svg);
|
|
116
|
+
this.applyTransform(container, svg);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async download(container, filename = 'diagram.png') {
|
|
120
|
+
const svg = container.querySelector('svg');
|
|
121
|
+
if (!svg)
|
|
122
|
+
return;
|
|
123
|
+
try {
|
|
124
|
+
const clonedSvg = svg.cloneNode(true);
|
|
125
|
+
const svgData = new XMLSerializer().serializeToString(clonedSvg);
|
|
126
|
+
const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgData)}`;
|
|
127
|
+
const img = new Image();
|
|
128
|
+
await new Promise((resolve, reject) => {
|
|
129
|
+
img.onload = () => resolve();
|
|
130
|
+
img.onerror = (e) => reject(new Error('Image loading failed'));
|
|
131
|
+
img.src = svgUrl;
|
|
132
|
+
});
|
|
133
|
+
const canvas = document.createElement('canvas');
|
|
134
|
+
const ctx = canvas.getContext('2d');
|
|
135
|
+
if (!ctx)
|
|
136
|
+
throw new Error('Canvas context not available');
|
|
137
|
+
canvas.width = img.width * 2;
|
|
138
|
+
canvas.height = img.height * 2;
|
|
139
|
+
ctx.fillStyle = 'white';
|
|
140
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
141
|
+
ctx.drawImage(img, 0, 0);
|
|
142
|
+
canvas.toBlob((blob) => {
|
|
143
|
+
if (!blob) {
|
|
144
|
+
console.error('Failed to create blob from canvas');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const url = URL.createObjectURL(blob);
|
|
148
|
+
const a = document.createElement('a');
|
|
149
|
+
a.href = url;
|
|
150
|
+
a.download = filename;
|
|
151
|
+
document.body.appendChild(a);
|
|
152
|
+
a.click();
|
|
153
|
+
setTimeout(() => {
|
|
154
|
+
document.body.removeChild(a);
|
|
155
|
+
URL.revokeObjectURL(url);
|
|
156
|
+
}, 100);
|
|
157
|
+
}, 'image/png');
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
console.error('Failed to download diagram:', error);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
onSvgMouseDown(e, container, svg) {
|
|
164
|
+
const state = this.viewStateMap.get(container);
|
|
165
|
+
if (!state)
|
|
166
|
+
return;
|
|
167
|
+
state.dragging = true;
|
|
168
|
+
state.dragStart = { x: e.clientX, y: e.clientY };
|
|
169
|
+
state.lastOffset = { x: state.offsetX, y: state.offsetY };
|
|
170
|
+
const move = (ev) => this.onSvgMouseMove(ev, container, svg);
|
|
171
|
+
const up = () => this.onSvgMouseUp(container, svg, move, up);
|
|
172
|
+
document.addEventListener('mousemove', move);
|
|
173
|
+
document.addEventListener('mouseup', up);
|
|
174
|
+
this.applyTransform(container, svg);
|
|
175
|
+
}
|
|
176
|
+
onSvgMouseMove(e, container, svg) {
|
|
177
|
+
const state = this.viewStateMap.get(container);
|
|
178
|
+
if (!state || !state.dragging)
|
|
179
|
+
return;
|
|
180
|
+
state.offsetX = state.lastOffset.x + (e.clientX - state.dragStart.x);
|
|
181
|
+
state.offsetY = state.lastOffset.y + (e.clientY - state.dragStart.y);
|
|
182
|
+
this.applyTransform(container, svg);
|
|
183
|
+
}
|
|
184
|
+
onSvgMouseUp(container, svg, move, up) {
|
|
185
|
+
const state = this.viewStateMap.get(container);
|
|
186
|
+
if (!state)
|
|
187
|
+
return;
|
|
188
|
+
state.dragging = false;
|
|
189
|
+
document.removeEventListener('mousemove', move);
|
|
190
|
+
document.removeEventListener('mouseup', up);
|
|
191
|
+
this.applyTransform(container, svg);
|
|
192
|
+
}
|
|
193
|
+
async renderMermaid(code, theme = 'light') {
|
|
194
|
+
try {
|
|
195
|
+
const mermaid = await this.loadMermaid();
|
|
196
|
+
if (this.config.theme !== theme) {
|
|
197
|
+
this.config.theme = theme;
|
|
198
|
+
mermaid.initialize({
|
|
199
|
+
startOnLoad: false,
|
|
200
|
+
suppressErrorRendering: true,
|
|
201
|
+
theme: theme === 'dark' ? 'dark' : 'default',
|
|
202
|
+
...this.config
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
const id = `mc_mermaid_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
206
|
+
const { svg } = await mermaid.render(id, code);
|
|
207
|
+
this.lastValidResult = svg;
|
|
208
|
+
return svg;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
return this.lastValidResult;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// 设置配置
|
|
215
|
+
setConfig(config = {}) {
|
|
216
|
+
this.config = {
|
|
217
|
+
theme: 'default',
|
|
218
|
+
...config
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVybWFpZFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29tbW9uL01lcm1haWRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sT0FBTyxjQUFjO0lBT3pCLFlBQW9CLFNBQXdCLEVBQUU7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFOdEMsb0JBQWUsR0FBUSxJQUFJLENBQUM7UUFDNUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFpQyxDQUFDO1FBQzVELG9CQUFlLEdBQUcsR0FBRyxDQUFDO0lBRW1CLENBQUM7SUFFMUMsS0FBSyxDQUFDLFdBQVc7UUFDdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdCLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtvQkFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ2hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFDRixhQUFhLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJ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O29CQUM1QixLQUFLLEVBQUUsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUM1QyxHQUFHLElBQUksQ0FBQyxNQUFNO2lCQUNmLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxjQUFjLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztZQUMzQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUMsT0FBTztJQUNULFNBQVMsQ0FBQyxTQUF3QixFQUFFO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixLQUFLLEVBQUUsU0FBUztZQUNoQixHQUFHLE1BQU07U0FDVixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXJtYWlkQ29uZmlnIH0gZnJvbSAnLi9tZENhcmQudHlwZXMnO1xuXG5pbnRlcmZhY2UgTWVybWFpZFZpZXdTdGF0ZSB7XG4gIHNjYWxlOiBudW1iZXI7XG4gIG9mZnNldFg6IG51bWJlcjtcbiAgb2Zmc2V0WTogbnVtYmVyO1xuICBkcmFnZ2luZzogYm9vbGVhbjtcbiAgZHJhZ1N0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIGxhc3RPZmZzZXQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGNsYXNzIE1lcm1haWRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtZXJtYWlkSW5zdGFuY2U6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgaXNMb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFZhbGlkUmVzdWx0OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSB2aWV3U3RhdGVNYXAgPSBuZXcgV2Vha01hcDxIVE1MRWxlbWVudCwgTWVybWFpZFZpZXdTdGF0ZT4oKTtcbiAgcHJpdmF0ZSBjb250YWluZXJIZWlnaHQgPSA0MDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IE1lcm1haWRDb25maWcgPSB7fSkge31cblxuICBwcml2YXRlIGFzeW5jIGxvYWRNZXJtYWlkKCkge1xuICAgIGlmICh0aGlzLm1lcm1haWRJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVybWFpZEluc3RhbmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrSW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubWVybWFpZEluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubWVybWFpZEluc3RhbmNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0luc3RhbmNlLCA1MCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjaGVja0luc3RhbmNlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdDogbWVybWFpZCB9ID0gYXdhaXQgaW1wb3J0KCdtZXJtYWlkJykgYXMgYW55O1xuICAgICAgbWVybWFpZC5pbml0aWFsaXplKHtcbiAgICAgICAgdGhlbWU6IHRoaXMuY29uZmlnLnRoZW1lIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgc3RhcnRPbkxvYWQ6IGZhbHNlLFxuICAgICAgICBzdXBwcmVzc0Vycm9yUmVuZGVyaW5nOiB0cnVlLFxuICAgICAgICAuLi50aGlzLmNvbmZpZ1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1lcm1haWRJbnN0YW5jZSA9IG1lcm1haWQ7XG4gICAgICByZXR1cm4gbWVybWFpZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgbWVybWFpZDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG1lcm1haWQgbGlicmFyeScpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbmRlclRvQ29udGFpbmVyKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGNvZGU6IHN0cmluZywgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnKSB7XG4gICAgY29uc3Qgc3ZnU3RyID0gYXdhaXQgdGhpcy5yZW5kZXJNZXJtYWlkKGNvZGUsIHRoZW1lKTtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gc3ZnU3RyO1xuICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICBpZiAoc3ZnKSB7XG4gICAgICB0aGlzLmluaXRWaWV3U3RhdGUoY29udGFpbmVyLCBzdmcpO1xuICAgICAgdGhpcy5hcHBseVRyYW5zZm9ybShjb250YWluZXIsIHN2Zyk7XG4gICAgICBzdmcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHRoaXMub25TdmdNb3VzZURvd24oZSwgY29udGFpbmVyLCBzdmcpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRWaWV3U3RhdGUoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgc3ZnOiBTVkdTVkdFbGVtZW50KSB7XG4gICAgLy8g6I635Y+Wc3Zn55qEdmlld0JveOaIluWuvemrmFxuICAgIGxldCB2YiA9IHN2Zy5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKTtcbiAgICBsZXQgc3ZnVyA9IDAsIHN2Z0ggPSAwO1xuICAgIGlmICh2Yikge1xuICAgICAgY29uc3QgYXJyID0gdmIuc3BsaXQoL1xccysvKTtcbiAgICAgIHN2Z1cgPSBwYXJzZUZsb2F0KGFyclsyXSk7XG4gICAgICBzdmdIID0gcGFyc2VGbG9hdChhcnJbM10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmdXID0gc3ZnLndpZHRoLmJhc2VWYWwudmFsdWUgfHwgc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgc3ZnSCA9IHN2Zy5oZWlnaHQuYmFzZVZhbC52YWx1ZSB8fCBzdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH1cbiAgICBjb25zdCBjb250VyA9IGNvbnRhaW5lci5jbGllbnRXaWR0aCB8fCAwO1xuICAgIGNvbnN0IGNvbnRIID0gdGhpcy5jb250YWluZXJIZWlnaHQ7XG4gICAgbGV0IHNjYWxlID0gMTtcbiAgICBpZiAoc3ZnVyAmJiBzdmdIICYmIGNvbnRXICYmIGNvbnRIKSB7XG4gICAgICBzY2FsZSA9IE1hdGgubWluKGNvbnRXIC8gc3ZnVywgY29udEggLyBzdmdILCAxKTtcbiAgICB9XG4gICAgdGhpcy52aWV3U3RhdGVNYXAuc2V0KGNvbnRhaW5lciwge1xuICAgICAgc2NhbGUsXG4gICAgICBvZmZzZXRYOiAwLFxuICAgICAgb2Zmc2V0WTogMCxcbiAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgIGRyYWdTdGFydDogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBsYXN0T2Zmc2V0OiB7IHg6IDAsIHk6IDAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUcmFuc2Zvcm0oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgc3ZnOiBTVkdTVkdFbGVtZW50KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnZpZXdTdGF0ZU1hcC5nZXQoY29udGFpbmVyKTtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgc3ZnLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBzdmcuc3R5bGUubGVmdCA9ICc1MCUnO1xuICAgIHN2Zy5zdHlsZS50b3AgPSAnNTAlJztcbiAgICBzdmcuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSB0cmFuc2xhdGUoJHtzdGF0ZS5vZmZzZXRYfXB4LCAke3N0YXRlLm9mZnNldFl9cHgpIHNjYWxlKCR7c3RhdGUuc2NhbGV9KWA7XG4gICAgc3ZnLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICdjZW50ZXIgY2VudGVyJztcbiAgICBzdmcuc3R5bGUuY3Vyc29yID0gc3RhdGUuZHJhZ2dpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInO1xuICB9XG5cbiAgem9vbUluKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBzdmcgPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnZpZXdTdGF0ZU1hcC5nZXQoY29udGFpbmVyKTtcbiAgICBpZiAoc3ZnICYmIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5zY2FsZSA9IE1hdGgubWluKHN0YXRlLnNjYWxlICsgMC4yLCAzKTtcbiAgICAgIHRoaXMuYXBwbHlUcmFuc2Zvcm0oY29udGFpbmVyLCBzdmcpO1xuICAgIH1cbiAgfVxuXG4gIHpvb21PdXQoY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMudmlld1N0YXRlTWFwLmdldChjb250YWluZXIpO1xuICAgIGlmIChzdmcgJiYgc3RhdGUpIHtcbiAgICAgIHN0YXRlLnNjYWxlID0gTWF0aC5tYXgoc3RhdGUuc2NhbGUgLSAwLjIsIDAuMik7XG4gICAgICB0aGlzLmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lciwgc3ZnKTtcbiAgICB9XG4gIH1cblxuICByZXNldChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3Qgc3ZnID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICAgIGlmIChzdmcpIHtcbiAgICAgIHRoaXMuaW5pdFZpZXdTdGF0ZShjb250YWluZXIsIHN2Zyk7XG4gICAgICB0aGlzLmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lciwgc3ZnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChjb250YWluZXI6IEhUTUxFbGVtZW50LCBmaWxlbmFtZTogc3RyaW5nID0gJ2RpYWdyYW0ucG5nJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICBpZiAoIXN2ZykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsb25lZFN2ZyA9IHN2Zy5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHU1ZHRWxlbWVudDtcblxuICAgICAgY29uc3Qgc3ZnRGF0YSA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoY2xvbmVkU3ZnKTtcbiAgICAgIFxuICAgICAgY29uc3Qgc3ZnVXJsID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z0RhdGEpfWA7XG5cbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgICAgICBpbWcub25lcnJvciA9IChlKSA9PiByZWplY3QobmV3IEVycm9yKCdJbWFnZSBsb2FkaW5nIGZhaWxlZCcpKTtcbiAgICAgICAgaW1nLnNyYyA9IHN2Z1VybDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgaWYgKCFjdHgpIHRocm93IG5ldyBFcnJvcignQ2FudmFzIGNvbnRleHQgbm90IGF2YWlsYWJsZScpO1xuXG4gICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiAyO1xuICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQgKiAyO1xuICAgICAgXG4gICAgICBjdHguZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgXG4gICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XG5cbiAgICAgIGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcbiAgICAgICAgaWYgKCFibG9iKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBibG9iIGZyb20gY2FudmFzJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBhLmhyZWYgPSB1cmw7XG4gICAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9LCAnaW1hZ2UvcG5nJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBkaWFncmFtOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uU3ZnTW91c2VEb3duKGU6IE1vdXNlRXZlbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHN2ZzogU1ZHU1ZHRWxlbWVudCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy52aWV3U3RhdGVNYXAuZ2V0KGNvbnRhaW5lcik7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHN0YXRlLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5kcmFnU3RhcnQgPSB7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZIH07XG4gICAgc3RhdGUubGFzdE9mZnNldCA9IHsgeDogc3RhdGUub2Zmc2V0WCwgeTogc3RhdGUub2Zmc2V0WSB9O1xuICAgIGNvbnN0IG1vdmUgPSAoZXY6IE1vdXNlRXZlbnQpID0+IHRoaXMub25TdmdNb3VzZU1vdmUoZXYsIGNvbnRhaW5lciwgc3ZnKTtcbiAgICBjb25zdCB1cCA9ICgpID0+IHRoaXMub25TdmdNb3VzZVVwKGNvbnRhaW5lciwgc3ZnLCBtb3ZlLCB1cCk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwKTtcbiAgICB0aGlzLmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lciwgc3ZnKTtcbiAgfVxuICBwcml2YXRlIG9uU3ZnTW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIHN2ZzogU1ZHU1ZHRWxlbWVudCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy52aWV3U3RhdGVNYXAuZ2V0KGNvbnRhaW5lcik7XG4gICAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuZHJhZ2dpbmcpIHJldHVybjtcbiAgICBzdGF0ZS5vZmZzZXRYID0gc3RhdGUubGFzdE9mZnNldC54ICsgKGUuY2xpZW50WCAtIHN0YXRlLmRyYWdTdGFydC54KTtcbiAgICBzdGF0ZS5vZmZzZXRZID0gc3RhdGUubGFzdE9mZnNldC55ICsgKGUuY2xpZW50WSAtIHN0YXRlLmRyYWdTdGFydC55KTtcbiAgICB0aGlzLmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lciwgc3ZnKTtcbiAgfVxuICBwcml2YXRlIG9uU3ZnTW91c2VVcChjb250YWluZXI6IEhUTUxFbGVtZW50LCBzdmc6IFNWR1NWR0VsZW1lbnQsIG1vdmU6IGFueSwgdXA6IGFueSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy52aWV3U3RhdGVNYXAuZ2V0KGNvbnRhaW5lcik7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHN0YXRlLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwKTtcbiAgICB0aGlzLmFwcGx5VHJhbnNmb3JtKGNvbnRhaW5lciwgc3ZnKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlck1lcm1haWQoY29kZTogc3RyaW5nLCB0aGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXJtYWlkID0gYXdhaXQgdGhpcy5sb2FkTWVybWFpZCgpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnRoZW1lICE9PSB0aGVtZSkge1xuICAgICAgICB0aGlzLmNvbmZpZy50aGVtZSA9IHRoZW1lO1xuICAgICAgICAgIG1lcm1haWQuaW5pdGlhbGl6ZSh7XG4gICAgICAgICAgc3RhcnRPbkxvYWQ6IGZhbHNlLFxuICAgICAgICAgIHN1cHByZXNzRXJyb3JSZW5kZXJpbmc6IHRydWUsXG4gICAgICAgICAgdGhlbWU6IHRoZW1lID09PSAnZGFyaycgPyAnZGFyaycgOiAnZGVmYXVsdCcsXG4gICAgICAgICAgLi4udGhpcy5jb25maWdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGBtY19tZXJtYWlkXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcbiAgICAgIGNvbnN0IHsgc3ZnIH0gPSBhd2FpdCBtZXJtYWlkLnJlbmRlcihpZCwgY29kZSk7XG4gICAgICB0aGlzLmxhc3RWYWxpZFJlc3VsdCA9IHN2ZztcbiAgICAgIHJldHVybiBzdmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhc3RWYWxpZFJlc3VsdDtcbiAgICB9XG4gIH1cblxuICAgIC8vIOiuvue9rumFjee9rlxuICBzZXRDb25maWcoY29uZmlnOiBNZXJtYWlkQ29uZmlnID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const defaultTypingConfig = {
|
|
2
|
+
step: 2,
|
|
3
|
+
interval: 50,
|
|
4
|
+
style: 'normal',
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRDYXJkLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1uZy9zcmMvY29tcG9uZW50cy1jb21tb24vTWFya2Rvd25DYXJkL2NvbW1vbi9tZENhcmQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLElBQUksRUFBRSxDQUFDO0lBQ1AsUUFBUSxFQUFFLEVBQUU7SUFDWixLQUFLLEVBQUUsUUFBdUI7Q0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3B0aW9ucywgUGx1Z2luU2ltcGxlLCBQbHVnaW5XaXRoT3B0aW9ucywgUGx1Z2luV2l0aFBhcmFtcyB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB0eXBlIHsgVG9rZW4gfSBmcm9tICdtYXJrZG93bi1pdCc7XG5leHBvcnQgaW50ZXJmYWNlIE1lcm1haWRDb25maWcge1xuICB0aGVtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Yc3NSdWxlIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmdbXSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kQmxvY2tEYXRhIHtcbiAgY29kZTogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDb2RlQmxvY2tTbG90ID0ge1xuICBhY3Rpb25zPzogKCkgPT4gdm9pZDtcbiAgaGVhZGVyPzogKCkgPT4gdm9pZDtcbiAgY29udGVudD86ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBUaGVtZSA9ICdsaWdodCcgfCAnZGFyayc7XG5cbmV4cG9ydCB0eXBlIFR5cGluZ1N0eWxlID0gJ25vcm1hbCcgfCAnY3Vyc29yJyB8ICdjb2xvcicgfCAnZ3JhZGllbnQnO1xuXG5leHBvcnQgdHlwZSBJbnRlcnZhbFR5cGUgPSBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFR5cGluZ0NvbmZpZyA9IHtcbiAgc3RlcDogMixcbiAgaW50ZXJ2YWw6IDUwLFxuICBzdHlsZTogJ25vcm1hbCcgYXMgVHlwaW5nU3R5bGUsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1kUGx1Z2luIHtcbiAgcGx1Z2luOiBQbHVnaW5TaW1wbGUgfCBQbHVnaW5XaXRoT3B0aW9ucyB8IFBsdWdpbldpdGhQYXJhbXM7XG4gIG9wdHM/OiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtkb3duQ2FyZFByb3BzIHtcbiAgY29udGVudD86IHN0cmluZztcbiAgdHlwaW5nPzogYm9vbGVhbjtcbiAgZW5hYmxlVGhpbms/OiBib29sZWFuO1xuICB0eXBpbmdPcHRpb25zPzoge1xuICAgIHN0ZXA/OiBudW1iZXI7XG4gICAgaW50ZXJ2YWw/OiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHN0eWxlPzogVHlwaW5nU3R5bGU7XG4gIH07XG4gIHRoaW5rT3B0aW9ucz86IHtcbiAgICBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgfTtcbiAgbWRPcHRpb25zPzogT3B0aW9ucztcbiAgbWRQbHVnaW5zPzogQXJyYXk8TWRQbHVnaW4+O1xuICBjdXN0b21Yc3NSdWxlcz86IEFycmF5PEN1c3RvbVhzc1J1bGU+O1xuICB0aGVtZT86IFRoZW1lO1xuICBlbmFibGVNZXJtYWlkPzogYm9vbGVhbjtcbiAgbWVybWFpZENvbmZpZz86IE1lcm1haWRDb25maWc7XG59XG5cbi8vIOWumuS5iSBBU1Qg6IqC54K55o6l5Y+jXG5leHBvcnQgaW50ZXJmYWNlIEFTVE5vZGUge1xuICBub2RlVHlwZTogc3RyaW5nO1xuICBvcGVuTm9kZTogVG9rZW4gfCBudWxsO1xuICBjbG9zZU5vZGU6IFRva2VuIHwgbnVsbDtcbiAgY2hpbGRyZW46IChBU1ROb2RlIHwgVG9rZW4pW107XG4gIHZOb2RlS2V5OiBzdHJpbmc7XG59Il19
|