@matechat/ng 0.0.1-alpha.0 → 0.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/Bubble/bubble.component.d.ts +5 -3
  2. package/Input/input.component.d.ts +10 -1
  3. package/MarkdownCard/code-block.component.d.ts +46 -0
  4. package/MarkdownCard/index.d.ts +3 -0
  5. package/MarkdownCard/markdown-card.component.d.ts +198 -0
  6. package/MarkdownCard/markdown-card.module.d.ts +13 -0
  7. package/README.md +117 -13
  8. package/components-common/Base/foundation.d.ts +2 -0
  9. package/components-common/MarkdownCard/codeblock-foundation.d.ts +20 -0
  10. package/components-common/MarkdownCard/common/MDCardService.d.ts +14 -0
  11. package/components-common/MarkdownCard/common/MermaidService.d.ts +23 -0
  12. package/components-common/MarkdownCard/common/mdCard.types.d.ts +56 -0
  13. package/components-common/MarkdownCard/common/parser.d.ts +150 -0
  14. package/components-common/MarkdownCard/foundation.d.ts +38 -0
  15. package/esm2022/Base/base.component.mjs +2 -1
  16. package/esm2022/Bubble/bubble.component.mjs +15 -8
  17. package/esm2022/Input/input.component.mjs +107 -3
  18. package/esm2022/Locale/locale.service.mjs +5 -5
  19. package/esm2022/MarkdownCard/code-block.component.mjs +150 -0
  20. package/esm2022/MarkdownCard/index.mjs +4 -0
  21. package/esm2022/MarkdownCard/markdown-card.component.mjs +406 -0
  22. package/esm2022/MarkdownCard/markdown-card.module.mjs +44 -0
  23. package/esm2022/components-common/Base/foundation.mjs +4 -1
  24. package/esm2022/components-common/Input/foundation.mjs +1 -2
  25. package/esm2022/components-common/MarkdownCard/codeblock-foundation.mjs +132 -0
  26. package/esm2022/components-common/MarkdownCard/common/MDCardService.mjs +69 -0
  27. package/esm2022/components-common/MarkdownCard/common/MermaidService.mjs +222 -0
  28. package/esm2022/components-common/MarkdownCard/common/mdCard.types.mjs +6 -0
  29. package/esm2022/components-common/MarkdownCard/common/parser.mjs +194 -0
  30. package/esm2022/components-common/MarkdownCard/foundation.mjs +84 -0
  31. package/esm2022/public-api.mjs +2 -1
  32. package/fesm2022/matechat-ng.mjs +1460 -16
  33. package/fesm2022/matechat-ng.mjs.map +1 -1
  34. package/package.json +8 -5
  35. package/public-api.d.ts +1 -0
  36. package/fesm2022/matechat-ng-en-us-DsYnUbZd.mjs +0 -28
  37. package/fesm2022/matechat-ng-en-us-DsYnUbZd.mjs.map +0 -1
  38. package/fesm2022/matechat-ng-zh-cn--_YVZHnW.mjs +0 -28
  39. package/fesm2022/matechat-ng-zh-cn--_YVZHnW.mjs.map +0 -1
@@ -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.setState({ highlightedCode });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJsb2NrLWZvdW5kYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9jb21wb25lbnRzLWNvbW1vbi9NYXJrZG93bkNhcmQvY29kZWJsb2NrLWZvdW5kYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxjQUFrQyxNQUFNLG9CQUFvQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXZELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFnQztJQUd2RSxZQUFZLE9BQXlCO1FBQ25DLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUl4QixpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFB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UUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0ErRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUZvdW5kYXRpb24sIHsgRGVmYXVsdEFkYXB0ZXIgfSBmcm9tICcuLi9CYXNlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ21hcmtkb3duLWl0JztcbmltcG9ydCB0eXBlIHsgQVNUTm9kZSwgTWVybWFpZENvbmZpZyB9IGZyb20gJy4vY29tbW9uL21kQ2FyZC50eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHlwaW5nQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vbWRDYXJkLnR5cGVzJztcbmltcG9ydCB7IE1lcm1haWRTZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24vTWVybWFpZFNlcnZpY2UnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IE1EQ2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi9NRENhcmRTZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tBZGFwdGVyIGV4dGVuZHMgRGVmYXVsdEFkYXB0ZXIge1xuICBnZXRDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZUJsb2NrRm91bmRhdGlvbiBleHRlbmRzIEJhc2VGb3VuZGF0aW9uPENvZGVCbG9ja0FkYXB0ZXI+IHtcbiAgbWVybWFpZFNlcnZpY2U/OiBNZXJtYWlkU2VydmljZTtcbiAgbWRDYXJkU2VydmljZTogTURDYXJkU2VydmljZTtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQ29kZUJsb2NrQWRhcHRlcikge1xuICAgIHN1cGVyKHsgLi4uYWRhcHRlciB9KTtcbiAgICB0aGlzLm1kQ2FyZFNlcnZpY2UgPSBuZXcgTURDYXJkU2VydmljZSgpO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBleHBhbmRlZDogIXRoaXMuZ2V0U3RhdGVzKCkuZXhwYW5kZWQgfSk7XG4gIH07XG5cbiAgem9vbU91dCA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS56b29tT3V0KGNvbnRhaW5lcik7XG4gICAgfVxuICB9O1xuXG4gIHpvb21JbiA9ICgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9hZGFwdGVyLmdldENvbnRhaW5lcigpO1xuICAgIGlmIChjb250YWluZXIgJiYgdGhpcy5tZXJtYWlkU2VydmljZSkge1xuICAgICAgdGhpcy5tZXJtYWlkU2VydmljZS56b29tSW4oY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgY2hlY2tJc01lcm1haWQgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBlbmFibGVNZXJtYWlkLCBsYW5ndWFnZSB9ID0gdGhpcy5nZXRQcm9wcygpO1xuICAgIHJldHVybiBlbmFibGVNZXJtYWlkICYmIGxhbmd1YWdlPy50b0xvd2VyQ2FzZSgpID09PSAnbWVybWFpZCc7XG4gIH07XG5cbiAgZG93bmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fYWRhcHRlci5nZXRDb250YWluZXIoKTtcbiAgICBpZiAoY29udGFpbmVyICYmIHRoaXMubWVybWFpZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMubWVybWFpZFNlcnZpY2UuZG93bmxvYWQoY29udGFpbmVyKTtcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlQ29weVN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNvcGllZDogdHJ1ZSB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb3BpZWQ6IGZhbHNlIH0pO1xuICAgIH0sIDE1MDApO1xuICB9O1xuXG4gIGNvcHlDb2RlSW50ZXJuYWwoKSB7XG4gICAgY29uc3QgeyBjb2RlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUNvcHlTdWNjZXNzKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgdGV4dGFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgICAgdGV4dGFyZWEuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICAgIHRleHRhcmVhLnN0eWxlLnpJbmRleCA9ICctMSc7XG4gICAgICB0ZXh0YXJlYS52YWx1ZSA9IGNvZGU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRhcmVhKTtcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xuICAgICAgdGhpcy5oYW5kbGVDb3B5U3VjY2VzcygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUhpZ2hsaWdodGVkQ29kZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvZGUsIGxhbmd1YWdlIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgbGV0IGhpZ2hsaWdodGVkQ29kZSA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eXBlSW5kZXggPSBjb2RlLmluZGV4T2YoYDxzcGFuIGNsYXNzPVwibWMtdHlwZXdyaXRlcmApO1xuXG4gICAgICBpZiAobGFuZ3VhZ2UgJiYgaGxqcy5nZXRMYW5ndWFnZShsYW5ndWFnZSkpIHtcbiAgICAgICAgaWYgKHR5cGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPVxuICAgICAgICAgICAgaGxqcy5oaWdobGlnaHQoY29kZS5zbGljZSgwLCB0eXBlSW5kZXgpLCB7XG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgfSkudmFsdWUgKyBjb2RlLnNsaWNlKHR5cGVJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gaGxqcy5oaWdobGlnaHQoY29kZSwge1xuICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgfSkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgaGxqcy5oaWdobGlnaHRBdXRvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0eXBlSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPVxuICAgICAgICAgICAgICBobGpzLmhpZ2hsaWdodEF1dG8oY29kZS5zbGljZSgwLCB0eXBlSW5kZXgpKS52YWx1ZSArXG4gICAgICAgICAgICAgIGNvZGUuc2xpY2UodHlwZUluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRDb2RlID0gaGxqcy5oaWdobGlnaHRBdXRvKGNvZGUpLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRlZENvZGUgPSB0aGlzLm1kQ2FyZFNlcnZpY2UuZmlsdGVySHRtbChjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGhpZ2hsaWdodGVkQ29kZSA9IGNvZGU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBoaWdobGlnaHRlZENvZGUgfSk7XG4gIH07XG5cbiAgcmVuZGVyTWVybWFpZCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb2RlLFxuICAgICAgdGhlbWUsXG4gICAgICBtZXJtYWlkQ29uZmlnLFxuICAgIH0gPSB0aGlzLmdldFByb3BzKCk7XG4gICAgY29uc3QgeyBtZXJtYWlkQ29udGVudFJlZn0gPSB0aGlzLmdldFN0YXRlcygpO1xuICAgIGNvbnN0IGlzTWVybWFpZCA9IHRoaXMuY2hlY2tJc01lcm1haWQoKTtcbiAgICBpZiAoIWlzTWVybWFpZCB8fCAhY29kZSB8fCAhbWVybWFpZENvbnRlbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVybWFpZFNlcnZpY2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubWVybWFpZFNlcnZpY2UgPSBuZXcgTWVybWFpZFNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgY29uZmlnOiBNZXJtYWlkQ29uZmlnID0ge1xuICAgICAgICAgIHRoZW1lOiB0aGVtZSA9PT0gJ2RhcmsnID8gJ2RhcmsnIDogJ2RlZmF1bHQnLFxuICAgICAgICAgIC4uLm1lcm1haWRDb25maWcsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWVybWFpZFNlcnZpY2Uuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBNZXJtYWlkU2VydmljZTonLCBlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZXh0VGljayhhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBtZXJtYWlkQ29udGVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAvLyDnp7vpmaTmiZPlrZfmlYjmnpznm7jlhbPnmoRzcGFu5qCH562+XG4gICAgICAgIGNvbnN0IGNsZWFuQ29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAvPHNwYW5bXj5dKlxcYmNsYXNzXFxzKj1cXHMqWydcIl1tYy10eXBld3JpdGVyW14+XSo+KFtcXHNcXFNdKj8pPFxcL3NwYW4+L2csXG4gICAgICAgICAgYCQxYFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm1lcm1haWRTZXJ2aWNlPy5yZW5kZXJUb0NvbnRhaW5lcihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY2xlYW5Db2RlLFxuICAgICAgICAgIHRoZW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
@@ -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