@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,150 @@
1
+ import type { Token } from "markdown-it";
2
+ import type { ASTNode } from './mdCard.types';
3
+ export declare const isSelfClosingTag: (token: Token) => boolean;
4
+ export declare const isClosingTag: (openToken: Token, closeToken: Token) => boolean;
5
+ export declare const genTreeNode: (node: Token | null) => ASTNode;
6
+ export declare const matchHtmlToken: (token: Token, stack: Token[]) => void;
7
+ export declare const isValidTagName: (tagName: string | undefined) => boolean;
8
+ export declare const tokensToAst: (tokens: Token[]) => ASTNode[];
9
+ declare const _default: {
10
+ isSelfClosingTag: (token: {
11
+ type: string;
12
+ tag: string;
13
+ attrs: [string, string][] | null;
14
+ map: [number, number] | null;
15
+ nesting: Token.Nesting;
16
+ level: number;
17
+ children: any[] | null;
18
+ content: string;
19
+ markup: string;
20
+ info: string;
21
+ meta: any;
22
+ block: boolean;
23
+ hidden: boolean;
24
+ attrIndex(name: string): number;
25
+ attrPush(attrData: [string, string]): void;
26
+ attrSet(name: string, value: string): void;
27
+ attrGet(name: string): string | null;
28
+ attrJoin(name: string, value: string): void;
29
+ }) => boolean;
30
+ isClosingTag: (openToken: {
31
+ type: string;
32
+ tag: string;
33
+ attrs: [string, string][] | null;
34
+ map: [number, number] | null;
35
+ nesting: Token.Nesting;
36
+ level: number;
37
+ children: any[] | null;
38
+ content: string;
39
+ markup: string;
40
+ info: string;
41
+ meta: any;
42
+ block: boolean;
43
+ hidden: boolean;
44
+ attrIndex(name: string): number;
45
+ attrPush(attrData: [string, string]): void;
46
+ attrSet(name: string, value: string): void;
47
+ attrGet(name: string): string | null;
48
+ attrJoin(name: string, value: string): void;
49
+ }, closeToken: {
50
+ type: string;
51
+ tag: string;
52
+ attrs: [string, string][] | null;
53
+ map: [number, number] | null;
54
+ nesting: Token.Nesting;
55
+ level: number;
56
+ children: any[] | null;
57
+ content: string;
58
+ markup: string;
59
+ info: string;
60
+ meta: any;
61
+ block: boolean;
62
+ hidden: boolean;
63
+ attrIndex(name: string): number;
64
+ attrPush(attrData: [string, string]): void;
65
+ attrSet(name: string, value: string): void;
66
+ attrGet(name: string): string | null;
67
+ attrJoin(name: string, value: string): void;
68
+ }) => boolean;
69
+ tokensToAst: (tokens: {
70
+ type: string;
71
+ tag: string;
72
+ attrs: [string, string][] | null;
73
+ map: [number, number] | null;
74
+ nesting: Token.Nesting;
75
+ level: number;
76
+ children: any[] | null;
77
+ content: string;
78
+ markup: string;
79
+ info: string;
80
+ meta: any;
81
+ block: boolean;
82
+ hidden: boolean;
83
+ attrIndex(name: string): number;
84
+ attrPush(attrData: [string, string]): void;
85
+ attrSet(name: string, value: string): void;
86
+ attrGet(name: string): string | null;
87
+ attrJoin(name: string, value: string): void;
88
+ }[]) => ASTNode[];
89
+ genTreeNode: (node: {
90
+ type: string;
91
+ tag: string;
92
+ attrs: [string, string][] | null;
93
+ map: [number, number] | null;
94
+ nesting: Token.Nesting;
95
+ level: number;
96
+ children: any[] | null;
97
+ content: string;
98
+ markup: string;
99
+ info: string;
100
+ meta: any;
101
+ block: boolean;
102
+ hidden: boolean;
103
+ attrIndex(name: string): number;
104
+ attrPush(attrData: [string, string]): void;
105
+ attrSet(name: string, value: string): void;
106
+ attrGet(name: string): string | null;
107
+ attrJoin(name: string, value: string): void;
108
+ } | null) => ASTNode;
109
+ matchHtmlToken: (token: {
110
+ type: string;
111
+ tag: string;
112
+ attrs: [string, string][] | null;
113
+ map: [number, number] | null;
114
+ nesting: Token.Nesting;
115
+ level: number;
116
+ children: any[] | null;
117
+ content: string;
118
+ markup: string;
119
+ info: string;
120
+ meta: any;
121
+ block: boolean;
122
+ hidden: boolean;
123
+ attrIndex(name: string): number;
124
+ attrPush(attrData: [string, string]): void;
125
+ attrSet(name: string, value: string): void;
126
+ attrGet(name: string): string | null;
127
+ attrJoin(name: string, value: string): void;
128
+ }, stack: {
129
+ type: string;
130
+ tag: string;
131
+ attrs: [string, string][] | null;
132
+ map: [number, number] | null;
133
+ nesting: Token.Nesting;
134
+ level: number;
135
+ children: any[] | null;
136
+ content: string;
137
+ markup: string;
138
+ info: string;
139
+ meta: any;
140
+ block: boolean;
141
+ hidden: boolean;
142
+ attrIndex(name: string): number;
143
+ attrPush(attrData: [string, string]): void;
144
+ attrSet(name: string, value: string): void;
145
+ attrGet(name: string): string | null;
146
+ attrJoin(name: string, value: string): void;
147
+ }[]) => void;
148
+ isValidTagName: (tagName: string | undefined) => boolean;
149
+ };
150
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import BaseFoundation, { DefaultAdapter } from '../Base/foundation';
2
+ import type { Token } from 'markdown-it';
3
+ import type { ASTNode } from './common/mdCard.types';
4
+ export interface MarkdownCardAdapter extends DefaultAdapter {
5
+ locale(key: string, params?: Record<string, string>): string;
6
+ typingStart: () => void;
7
+ typingEnd: () => void;
8
+ typingEvent: () => void;
9
+ parseContent: (content: string) => void;
10
+ }
11
+ export declare class MarkdownCardFoundation extends BaseFoundation<MarkdownCardAdapter> {
12
+ constructor(adapter: MarkdownCardAdapter);
13
+ isToken: (node: ASTNode | Token) => node is {
14
+ type: string;
15
+ tag: string;
16
+ attrs: [string, string][] | null;
17
+ map: [number, number] | null;
18
+ nesting: Token.Nesting;
19
+ level: number;
20
+ children: any[] | null;
21
+ content: string;
22
+ markup: string;
23
+ info: string;
24
+ meta: any;
25
+ block: boolean;
26
+ hidden: boolean;
27
+ attrIndex(name: string): number;
28
+ attrPush(attrData: [string, string]): void;
29
+ attrSet(name: string, value: string): void;
30
+ attrGet(name: string): string | null;
31
+ attrJoin(name: string, value: string): void;
32
+ };
33
+ typewriterEnd: () => void;
34
+ getThinkContent: (content: string, thinkOptions: any) => string;
35
+ parseTypingContent: (content: string) => string;
36
+ parseContent: () => void;
37
+ typewriterStart: () => void;
38
+ }
@@ -30,6 +30,7 @@ export default class BaseComponent {
30
30
  getCache: (key) => key && this.cache[key],
31
31
  getCaches: () => this.cache,
32
32
  setCache: (key, value) => key && (this.cache[key] = value),
33
+ nextTick: (cb) => setTimeout(cb, 0),
33
34
  };
34
35
  }
35
36
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: BaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -43,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
43
44
  template: '',
44
45
  }]
45
46
  }], ctorParameters: () => [] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9CYXNlL2Jhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sYUFBYTtJQUdoQztRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVU7WUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVU7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO2dCQUN2QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ3pCLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDO29CQUNELEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDYixDQUFDO1lBQ0gsQ0FBQztZQUNELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUM1QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNyQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN6QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDM0QsQ0FBQztJQUNKLENBQUM7OEdBbkNrQixhQUFhO2tHQUFiLGFBQWEsK0VBRnRCLEVBQUU7OzJGQUVPLGFBQWE7a0JBTGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxFQUFFO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdEFkYXB0ZXIgfSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9CYXNlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdGUtYmFzZS1jb21wb25lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJycsXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZUNvbXBvbmVudCB7XG4gIGZvdW5kYXRpb246IGFueTtcbiAgY2FjaGU6IGFueTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5mb3VuZGF0aW9uID0gbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZm91bmRhdGlvbiAmJlxuICAgICAgdHlwZW9mIHRoaXMuZm91bmRhdGlvbi5kZXN0cm95ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0aGlzLmZvdW5kYXRpb24uZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0IGFkYXB0ZXIoKTogRGVmYXVsdEFkYXB0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRQcm9wOiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICAgIH0sXG4gICAgICBnZXRQcm9wczogKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBzZXRTdGF0ZTogKHN0YXRlcywgY2IpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3RhdGVzKSB7XG4gICAgICAgICAgaWYgKHN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB0aGlzW2tleV0gPSBzdGF0ZXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2IgJiYgY2IoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldFN0YXRlOiAoa2V5KSA9PiB0aGlzW2tleV0sXG4gICAgICBnZXRTdGF0ZXM6ICgpID0+IHRoaXMsXG4gICAgICBnZXRDYWNoZTogKGtleSkgPT4ga2V5ICYmIHRoaXMuY2FjaGVba2V5XSxcbiAgICAgIGdldENhY2hlczogKCkgPT4gdGhpcy5jYWNoZSxcbiAgICAgIHNldENhY2hlOiAoa2V5LCB2YWx1ZSkgPT4ga2V5ICYmICh0aGlzLmNhY2hlW2tleV0gPSB2YWx1ZSksXG4gICAgfTtcbiAgfVxufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLW5nL3NyYy9CYXNlL2Jhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sYUFBYTtJQUdoQztRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVU7WUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLFVBQVU7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO2dCQUN2QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ3pCLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDO29CQUNELEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDYixDQUFDO1lBQ0gsQ0FBQztZQUNELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUM1QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNyQixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN6QyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDMUQsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNwQyxDQUFDO0lBQ0osQ0FBQzs4R0FwQ2tCLGFBQWE7a0dBQWIsYUFBYSwrRUFGdEIsRUFBRTs7MkZBRU8sYUFBYTtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLEVBQUU7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0QWRhcHRlciB9IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL0Jhc2UvZm91bmRhdGlvbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0ZS1iYXNlLWNvbXBvbmVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQ29tcG9uZW50IHtcbiAgZm91bmRhdGlvbjogYW55O1xuICBjYWNoZTogYW55O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZvdW5kYXRpb24gPSBudWxsO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3VuZGF0aW9uICYmXG4gICAgICB0eXBlb2YgdGhpcy5mb3VuZGF0aW9uLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHRoaXMuZm91bmRhdGlvbi5kZXN0cm95KCk7XG4gIH1cblxuICBnZXQgYWRhcHRlcigpOiBEZWZhdWx0QWRhcHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFByb3A6IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgICAgfSxcbiAgICAgIGdldFByb3BzOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIHNldFN0YXRlOiAoc3RhdGVzLCBjYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdGF0ZXMpIHtcbiAgICAgICAgICBpZiAoc3RhdGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHN0YXRlc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYiAmJiBjYigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0U3RhdGU6IChrZXkpID0+IHRoaXNba2V5XSxcbiAgICAgIGdldFN0YXRlczogKCkgPT4gdGhpcyxcbiAgICAgIGdldENhY2hlOiAoa2V5KSA9PiBrZXkgJiYgdGhpcy5jYWNoZVtrZXldLFxuICAgICAgZ2V0Q2FjaGVzOiAoKSA9PiB0aGlzLmNhY2hlLFxuICAgICAgc2V0Q2FjaGU6IChrZXksIHZhbHVlKSA9PiBrZXkgJiYgKHRoaXMuY2FjaGVba2V5XSA9IHZhbHVlKSxcbiAgICAgIG5leHRUaWNrOiAoY2IpID0+IHNldFRpbWVvdXQoY2IsIDApLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Component, Input, ContentChild } from '@angular/core';
1
+ import { Component, Input, ContentChild, ContentChildren } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { BubbleLoadingComponent } from './bubble-loading/bubble-loading.component';
4
4
  import { AvatarComponent } from './avatar/avatar.component';
@@ -8,6 +8,10 @@ import { TranslatePipe } from '../Locale/translate.pipe';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/common";
10
10
  export class BubbleComponent extends BaseComponent {
11
+ // 计算是否有内容投影
12
+ get ngContentProjected() {
13
+ return this.contentChildren && this.contentChildren.length > 0;
14
+ }
11
15
  constructor() {
12
16
  super();
13
17
  // 组件属性
@@ -17,9 +21,9 @@ export class BubbleComponent extends BaseComponent {
17
21
  this.avatarPosition = 'side';
18
22
  this.variant = 'filled';
19
23
  // 内容投影模板引用
24
+ this.avatarTemplate = null;
20
25
  this.topTemplate = null;
21
26
  this.loadingTplTemplate = null;
22
- this.defaultTemplate = null;
23
27
  this.bottomTemplate = null;
24
28
  }
25
29
  ngOnInit() {
@@ -49,11 +53,11 @@ export class BubbleComponent extends BaseComponent {
49
53
  }
50
54
  ;
51
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: BubbleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
52
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: BubbleComponent, isStandalone: true, selector: "mc-bubble", inputs: { content: "content", loading: "loading", align: "align", avatarPosition: "avatarPosition", variant: "variant", avatarConfig: "avatarConfig" }, queries: [{ propertyName: "topTemplate", first: true, predicate: ["top"], descendants: true }, { propertyName: "loadingTplTemplate", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "bottomTemplate", first: true, predicate: ["bottom"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-bubble\" [ngClass]=\"bubbleClasses\" role=\"group\" [attr.aria-label]=\"'Bubble.ariaLabel' | translate\">\n <div\n *ngIf=\"avatarConfig\"\n class=\"mc-bubble-avatar\" role=\"img\"\n [ngClass]=\"{ 'empty-avatar': isEmptyAvatar }\"\n >\n <mc-avatar\n *ngIf=\"!isEmptyAvatar\"\n [imgSrc]=\"avatarConfig?.imgSrc || ''\"\n [name]=\"avatarConfig?.name || ''\"\n [width]=\"avatarConfig?.width || 36\"\n [height]=\"avatarConfig?.height || 36\"\n [gender]=\"avatarConfig?.gender || ''\"\n />\n <div *ngIf=\"isEmptyAvatar\" class=\"mc-bubble-avatar-wrapper\" [attr.aria-label]=\"'Bubble.emptyAvatar' | translate\"\n [style.width.px]=\"avatarConfig?.width || 36\"\n [style.height.px]=\"avatarConfig?.height || 36\"></div>\n <span *ngIf=\"avatarPosition === 'top'\" class=\"mc-bubble-avatar-name\" [attr.aria-label]=\"'Bubble.userName' | translate:{ name: avatarConfig?.displayName || '' } \">{{\n avatarConfig?.displayName\n }}</span>\n </div>\n <div\n class=\"mc-bubble-content-container\" aria-live=\"polite\"\n [ngClass]=\"{ 'with-avatar': avatarConfig }\"\n >\n <!-- \u9876\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"topTemplate\"></ng-container>\n <ng-content select=\"[top]\"></ng-content>\n </ng-container>\n \n <!-- \u52A0\u8F7D\u72B6\u6001 -->\n <div *ngIf=\"loading\" class=\"loading-container\" role=\"status\" aria-busy=\"true\">\n <ng-container *ngIf=\"loadingTplTemplate; else defaultLoadingTemplate\">\n <ng-container *ngTemplateOutlet=\"loadingTplTemplate\"></ng-container>\n <ng-content select=\"[loadingTpl]\"></ng-content>\n </ng-container>\n <ng-template #defaultLoadingTemplate>\n <mc-bubble-loading></mc-bubble-loading>\n </ng-template>\n </div>\n \n <!-- \u4E3B\u8981\u5185\u5BB9 -->\n <div\n *ngIf=\"(defaultTemplate || content) && !loading\"\n class=\"mc-bubble-content\"\n [ngClass]=\"[variant]\"\n role=\"region\"\n >\n <ng-container *ngIf=\"defaultTemplate; else contentTemplate\">\n <ng-container *ngTemplateOutlet=\"defaultTemplate\"></ng-container>\n <ng-content></ng-content>\n </ng-container>\n <ng-template #contentTemplate>\n <span [attr.aria-label]=\"'Bubble.content' | translate\">{{ content }}</span>\n </ng-template>\n </div>\n \n <!-- \u5E95\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"bottomTemplate\"></ng-container>\n <ng-content select=\"[bottom]\"></ng-content>\n </ng-container>\n </div>\n</div>\n", styles: [".mc-bubble{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content{word-wrap:break-word}.mc-bubble .mc-bubble-content.filled,.mc-bubble .mc-bubble-content.bordered{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar{align-items:center}.mc-bubble .mc-bubble-content-container{max-width:100%}.mc-bubble.mc-bubble-avatar-top{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar{flex-direction:row-reverse}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BubbleLoadingComponent, selector: "mc-bubble-loading" }, { kind: "component", type: AvatarComponent, selector: "mc-avatar", inputs: ["imgSrc", "name", "width", "height", "isRound", "gender"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: BubbleComponent, isStandalone: true, selector: "mc-bubble", inputs: { content: "content", loading: "loading", align: "align", avatarPosition: "avatarPosition", variant: "variant", avatarConfig: "avatarConfig" }, queries: [{ propertyName: "avatarTemplate", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "topTemplate", first: true, predicate: ["top"], descendants: true }, { propertyName: "loadingTplTemplate", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "bottomTemplate", first: true, predicate: ["bottom"], descendants: true }, { propertyName: "contentChildren", predicate: ["ng-content"] }], usesInheritance: true, ngImport: i0, template: "<div class=\"mc-bubble\" [ngClass]=\"bubbleClasses\" role=\"group\" [attr.aria-label]=\"'Bubble.ariaLabel' | translate\">\n <!-- \u81EA\u5B9A\u4E49\u5934\u50CF\u533A\u57DF -->\n <div *ngIf=\"avatarTemplate\" class=\"mc-bubble-avatar\" role=\"img\">\n <ng-container *ngTemplateOutlet=\"avatarTemplate\"></ng-container>\n <ng-content select=\"[avatar]\"></ng-content>\n </div>\n \n <!-- \u9ED8\u8BA4\u5934\u50CF\u914D\u7F6E -->\n <div *ngIf=\"!avatarTemplate && avatarConfig\"\n class=\"mc-bubble-avatar\" role=\"img\"\n [ngClass]=\"{ 'empty-avatar': isEmptyAvatar }\"\n >\n <mc-avatar\n *ngIf=\"!isEmptyAvatar\"\n [imgSrc]=\"avatarConfig?.imgSrc || ''\"\n [name]=\"avatarConfig?.name || ''\"\n [width]=\"avatarConfig?.width || 36\"\n [height]=\"avatarConfig?.height || 36\"\n [gender]=\"avatarConfig?.gender || ''\"\n />\n <div *ngIf=\"isEmptyAvatar\" class=\"mc-bubble-avatar-wrapper\" [attr.aria-label]=\"'Bubble.emptyAvatar' | translate\"\n [style.width.px]=\"avatarConfig?.width || 36\"\n [style.height.px]=\"avatarConfig?.height || 36\"></div>\n <span *ngIf=\"avatarPosition === 'top'\" class=\"mc-bubble-avatar-name\" [attr.aria-label]=\"'Bubble.userName' | translate:{ name: avatarConfig?.displayName || '' } \">{{\n avatarConfig?.displayName\n }}</span>\n </div>\n <div\n class=\"mc-bubble-content-container\" aria-live=\"polite\"\n [ngClass]=\"{ 'with-avatar': avatarTemplate || avatarConfig }\"\n >\n <!-- \u9876\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"topTemplate\"></ng-container>\n <ng-content select=\"[top]\"></ng-content>\n </ng-container>\n \n <!-- \u52A0\u8F7D\u72B6\u6001 -->\n <div *ngIf=\"loading\" class=\"loading-container\" role=\"status\" aria-busy=\"true\">\n <ng-container *ngIf=\"loadingTplTemplate; else defaultLoadingTemplate\">\n <ng-container *ngTemplateOutlet=\"loadingTplTemplate\"></ng-container>\n <ng-content select=\"[loadingTpl]\"></ng-content>\n </ng-container>\n <ng-template #defaultLoadingTemplate>\n <mc-bubble-loading></mc-bubble-loading>\n </ng-template>\n </div>\n \n <!-- \u4E3B\u8981\u5185\u5BB9 -->\n <div\n *ngIf=\"!loading\"\n class=\"mc-bubble-content\"\n [ngClass]=\"[variant]\"\n role=\"region\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"content && !ngContentProjected\">\n <span [attr.aria-label]=\"'Bubble.content' | translate\">{{ content }}</span>\n </ng-container>\n </div>\n \n <!-- \u5E95\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"bottomTemplate\"></ng-container>\n <ng-content select=\"[bottom]\"></ng-content>\n </ng-container>\n </div>\n</div>\n", styles: [".mc-bubble{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content{word-wrap:break-word}.mc-bubble .mc-bubble-content.filled,.mc-bubble .mc-bubble-content.bordered{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar{align-items:center}.mc-bubble .mc-bubble-content-container{max-width:100%}.mc-bubble.mc-bubble-avatar-top{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar{flex-direction:row-reverse}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BubbleLoadingComponent, selector: "mc-bubble-loading" }, { kind: "component", type: AvatarComponent, selector: "mc-avatar", inputs: ["imgSrc", "name", "width", "height", "isRound", "gender"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
53
57
  }
54
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: BubbleComponent, decorators: [{
55
59
  type: Component,
56
- args: [{ selector: 'mc-bubble', standalone: true, imports: [CommonModule, BubbleLoadingComponent, AvatarComponent, TranslatePipe], template: "<div class=\"mc-bubble\" [ngClass]=\"bubbleClasses\" role=\"group\" [attr.aria-label]=\"'Bubble.ariaLabel' | translate\">\n <div\n *ngIf=\"avatarConfig\"\n class=\"mc-bubble-avatar\" role=\"img\"\n [ngClass]=\"{ 'empty-avatar': isEmptyAvatar }\"\n >\n <mc-avatar\n *ngIf=\"!isEmptyAvatar\"\n [imgSrc]=\"avatarConfig?.imgSrc || ''\"\n [name]=\"avatarConfig?.name || ''\"\n [width]=\"avatarConfig?.width || 36\"\n [height]=\"avatarConfig?.height || 36\"\n [gender]=\"avatarConfig?.gender || ''\"\n />\n <div *ngIf=\"isEmptyAvatar\" class=\"mc-bubble-avatar-wrapper\" [attr.aria-label]=\"'Bubble.emptyAvatar' | translate\"\n [style.width.px]=\"avatarConfig?.width || 36\"\n [style.height.px]=\"avatarConfig?.height || 36\"></div>\n <span *ngIf=\"avatarPosition === 'top'\" class=\"mc-bubble-avatar-name\" [attr.aria-label]=\"'Bubble.userName' | translate:{ name: avatarConfig?.displayName || '' } \">{{\n avatarConfig?.displayName\n }}</span>\n </div>\n <div\n class=\"mc-bubble-content-container\" aria-live=\"polite\"\n [ngClass]=\"{ 'with-avatar': avatarConfig }\"\n >\n <!-- \u9876\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"topTemplate\"></ng-container>\n <ng-content select=\"[top]\"></ng-content>\n </ng-container>\n \n <!-- \u52A0\u8F7D\u72B6\u6001 -->\n <div *ngIf=\"loading\" class=\"loading-container\" role=\"status\" aria-busy=\"true\">\n <ng-container *ngIf=\"loadingTplTemplate; else defaultLoadingTemplate\">\n <ng-container *ngTemplateOutlet=\"loadingTplTemplate\"></ng-container>\n <ng-content select=\"[loadingTpl]\"></ng-content>\n </ng-container>\n <ng-template #defaultLoadingTemplate>\n <mc-bubble-loading></mc-bubble-loading>\n </ng-template>\n </div>\n \n <!-- \u4E3B\u8981\u5185\u5BB9 -->\n <div\n *ngIf=\"(defaultTemplate || content) && !loading\"\n class=\"mc-bubble-content\"\n [ngClass]=\"[variant]\"\n role=\"region\"\n >\n <ng-container *ngIf=\"defaultTemplate; else contentTemplate\">\n <ng-container *ngTemplateOutlet=\"defaultTemplate\"></ng-container>\n <ng-content></ng-content>\n </ng-container>\n <ng-template #contentTemplate>\n <span [attr.aria-label]=\"'Bubble.content' | translate\">{{ content }}</span>\n </ng-template>\n </div>\n \n <!-- \u5E95\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"bottomTemplate\"></ng-container>\n <ng-content select=\"[bottom]\"></ng-content>\n </ng-container>\n </div>\n</div>\n", styles: [".mc-bubble{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content{word-wrap:break-word}.mc-bubble .mc-bubble-content.filled,.mc-bubble .mc-bubble-content.bordered{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar{align-items:center}.mc-bubble .mc-bubble-content-container{max-width:100%}.mc-bubble.mc-bubble-avatar-top{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar{flex-direction:row-reverse}\n"] }]
60
+ args: [{ selector: 'mc-bubble', standalone: true, imports: [CommonModule, BubbleLoadingComponent, AvatarComponent, TranslatePipe], template: "<div class=\"mc-bubble\" [ngClass]=\"bubbleClasses\" role=\"group\" [attr.aria-label]=\"'Bubble.ariaLabel' | translate\">\n <!-- \u81EA\u5B9A\u4E49\u5934\u50CF\u533A\u57DF -->\n <div *ngIf=\"avatarTemplate\" class=\"mc-bubble-avatar\" role=\"img\">\n <ng-container *ngTemplateOutlet=\"avatarTemplate\"></ng-container>\n <ng-content select=\"[avatar]\"></ng-content>\n </div>\n \n <!-- \u9ED8\u8BA4\u5934\u50CF\u914D\u7F6E -->\n <div *ngIf=\"!avatarTemplate && avatarConfig\"\n class=\"mc-bubble-avatar\" role=\"img\"\n [ngClass]=\"{ 'empty-avatar': isEmptyAvatar }\"\n >\n <mc-avatar\n *ngIf=\"!isEmptyAvatar\"\n [imgSrc]=\"avatarConfig?.imgSrc || ''\"\n [name]=\"avatarConfig?.name || ''\"\n [width]=\"avatarConfig?.width || 36\"\n [height]=\"avatarConfig?.height || 36\"\n [gender]=\"avatarConfig?.gender || ''\"\n />\n <div *ngIf=\"isEmptyAvatar\" class=\"mc-bubble-avatar-wrapper\" [attr.aria-label]=\"'Bubble.emptyAvatar' | translate\"\n [style.width.px]=\"avatarConfig?.width || 36\"\n [style.height.px]=\"avatarConfig?.height || 36\"></div>\n <span *ngIf=\"avatarPosition === 'top'\" class=\"mc-bubble-avatar-name\" [attr.aria-label]=\"'Bubble.userName' | translate:{ name: avatarConfig?.displayName || '' } \">{{\n avatarConfig?.displayName\n }}</span>\n </div>\n <div\n class=\"mc-bubble-content-container\" aria-live=\"polite\"\n [ngClass]=\"{ 'with-avatar': avatarTemplate || avatarConfig }\"\n >\n <!-- \u9876\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"topTemplate\"></ng-container>\n <ng-content select=\"[top]\"></ng-content>\n </ng-container>\n \n <!-- \u52A0\u8F7D\u72B6\u6001 -->\n <div *ngIf=\"loading\" class=\"loading-container\" role=\"status\" aria-busy=\"true\">\n <ng-container *ngIf=\"loadingTplTemplate; else defaultLoadingTemplate\">\n <ng-container *ngTemplateOutlet=\"loadingTplTemplate\"></ng-container>\n <ng-content select=\"[loadingTpl]\"></ng-content>\n </ng-container>\n <ng-template #defaultLoadingTemplate>\n <mc-bubble-loading></mc-bubble-loading>\n </ng-template>\n </div>\n \n <!-- \u4E3B\u8981\u5185\u5BB9 -->\n <div\n *ngIf=\"!loading\"\n class=\"mc-bubble-content\"\n [ngClass]=\"[variant]\"\n role=\"region\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"content && !ngContentProjected\">\n <span [attr.aria-label]=\"'Bubble.content' | translate\">{{ content }}</span>\n </ng-container>\n </div>\n \n <!-- \u5E95\u90E8\u5185\u5BB9\u6295\u5F71 -->\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"bottomTemplate\"></ng-container>\n <ng-content select=\"[bottom]\"></ng-content>\n </ng-container>\n </div>\n</div>\n", styles: [".mc-bubble{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content{word-wrap:break-word}.mc-bubble .mc-bubble-content.filled,.mc-bubble .mc-bubble-content.bordered{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar{align-items:center}.mc-bubble .mc-bubble-content-container{max-width:100%}.mc-bubble.mc-bubble-avatar-top{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar,.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar{flex-direction:row-reverse}\n"] }]
57
61
  }], ctorParameters: () => [], propDecorators: { content: [{
58
62
  type: Input
59
63
  }], loading: [{
@@ -66,17 +70,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
66
70
  type: Input
67
71
  }], avatarConfig: [{
68
72
  type: Input
73
+ }], avatarTemplate: [{
74
+ type: ContentChild,
75
+ args: ['avatar']
69
76
  }], topTemplate: [{
70
77
  type: ContentChild,
71
78
  args: ['top']
72
79
  }], loadingTplTemplate: [{
73
80
  type: ContentChild,
74
81
  args: ['loadingTpl']
75
- }], defaultTemplate: [{
76
- type: ContentChild,
77
- args: ['defaultTemplate']
78
82
  }], bottomTemplate: [{
79
83
  type: ContentChild,
80
84
  args: ['bottom']
85
+ }], contentChildren: [{
86
+ type: ContentChildren,
87
+ args: ['ng-content']
81
88
  }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtbmcvc3JjL0J1YmJsZS9idWJibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1uZy9zcmMvQnViYmxlL2J1YmJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBWSxZQUFZLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUc1RCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFTekQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQWVoRDtRQUFnQixLQUFLLEVBQUUsQ0FBQztRQWR4QixPQUFPO1FBQ0UsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFVBQUssR0FBZ0IsTUFBTSxDQUFDO1FBQzVCLG1CQUFjLEdBQW1CLE1BQU0sQ0FBQztRQUN4QyxZQUFPLEdBQWtCLFFBQVEsQ0FBQztRQUczQyxXQUFXO1FBQ1UsZ0JBQVcsR0FBNEIsSUFBSSxDQUFDO1FBQ3JDLHVCQUFrQixHQUE0QixJQUFJLENBQUM7UUFDOUMsb0JBQWUsR0FBNEIsSUFBSSxDQUFDO1FBQ3pELG1CQUFjLEdBQTRCLElBQUksQ0FBQztJQUU5QyxDQUFDO0lBRTFCLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsT0FBTztRQUNsQixPQUFPO1lBQ0wsR0FBRyxLQUFLLENBQUMsT0FBTztZQUNoQixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2FBQ2hDLENBQUM7U0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87SUFDUCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQUEsQ0FBQztJQUVGLElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFBLENBQUM7OEdBM0NTLGVBQWU7a0dBQWYsZUFBZSx1bkJDakI1QiwrcUZBaUVBLHM5Q0RwRFksWUFBWSx3WUFBRSxzQkFBc0IsOERBQUUsZUFBZSxxSEFBRSxhQUFhOzsyRkFJbkUsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7d0RBTXRFLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR2UsV0FBVztzQkFBL0IsWUFBWTt1QkFBQyxLQUFLO2dCQUNTLGtCQUFrQjtzQkFBN0MsWUFBWTt1QkFBQyxZQUFZO2dCQUNPLGVBQWU7c0JBQS9DLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUNQLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBDb250ZW50Q2hpbGQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnViYmxlTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vYnViYmxlLWxvYWRpbmcvYnViYmxlLWxvYWRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9BVkFUQVJfV0lEVEgsIERFRkFVTFRfQVZBVEFSX0hFSUdIVCwgQVZBVEFSX05BTUUsIEFWQVRBUl9JTUcgfSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi9CdWJibGUvY29tbW9uL2J1YmJsZS1jb25zdGFudHMnO1xuaW1wb3J0IHsgQnViYmxlQWxpZ24sIEJ1YmJsZVZhcmlhbnQsIEF2YXRhclBvc2l0aW9uLCBCdWJibGVBdmF0YXIgfSBmcm9tICcuLi9jb21wb25lbnRzLWNvbW1vbi8vQnViYmxlL2NvbW1vbi9idWJibGUtdHlwZXMnO1xuaW1wb3J0IHsgQnViYmxlQWRhcHRlciwgQnViYmxlRm91bmRhdGlvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL0J1YmJsZS9mb3VuZGF0aW9uJztcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4uL0Jhc2UvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL0xvY2FsZS90cmFuc2xhdGUucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21jLWJ1YmJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1YmJsZUxvYWRpbmdDb21wb25lbnQsIEF2YXRhckNvbXBvbmVudCwgVHJhbnNsYXRlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9idWJibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idWJibGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCdWJibGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8g57uE5Lu25bGe5oCnXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsaWduOiBCdWJibGVBbGlnbiA9ICdsZWZ0JztcbiAgQElucHV0KCkgYXZhdGFyUG9zaXRpb246IEF2YXRhclBvc2l0aW9uID0gJ3NpZGUnO1xuICBASW5wdXQoKSB2YXJpYW50OiBCdWJibGVWYXJpYW50ID0gJ2ZpbGxlZCc7XG4gIEBJbnB1dCgpIGF2YXRhckNvbmZpZz86IEJ1YmJsZUF2YXRhcjtcblxuICAvLyDlhoXlrrnmipXlvbHmqKHmnb/lvJXnlKhcbiAgQENvbnRlbnRDaGlsZCgndG9wJykgdG9wVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgQENvbnRlbnRDaGlsZCgnbG9hZGluZ1RwbCcpIGxvYWRpbmdUcGxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBAQ29udGVudENoaWxkKCdkZWZhdWx0VGVtcGxhdGUnKSBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgQENvbnRlbnRDaGlsZCgnYm90dG9tJykgYm90dG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm91bmRhdGlvbiA9IG5ldyBCdWJibGVGb3VuZGF0aW9uKHRoaXMuYWRhcHRlcik7XG4gICAgdGhpcy5mb3VuZGF0aW9uLmluaXQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBhZGFwdGVyKCk6IEJ1YmJsZUFkYXB0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5hZGFwdGVyLFxuICAgICAgZ2V0UHJvcHM6ICgpID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCxcbiAgICAgICAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICAgICAgICBhbGlnbjogdGhpcy5hbGlnbixcbiAgICAgICAgYXZhdGFyUG9zaXRpb246IHRoaXMuYXZhdGFyUG9zaXRpb24sXG4gICAgICAgIHZhcmlhbnQ6IHRoaXMudmFyaWFudCxcbiAgICAgICAgYXZhdGFyQ29uZmlnOiB0aGlzLmF2YXRhckNvbmZpZyxcbiAgICAgIH0pLFxuICAgIH1cbiAgfVxuXG4gIC8vIOiuoeeul+WxnuaAp1xuICBnZXQgYnViYmxlQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvdW5kYXRpb24uZ2V0QnViYmxlQ2xhc3NlcygpO1xuICB9O1xuXG4gIGdldCBpc0VtcHR5QXZhdGFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvdW5kYXRpb24uZ2V0SXNFbXB0eUF2YXRhcih0aGlzLmF2YXRhckNvbmZpZyk7XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwibWMtYnViYmxlXCIgW25nQ2xhc3NdPVwiYnViYmxlQ2xhc3Nlc1wiIHJvbGU9XCJncm91cFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0J1YmJsZS5hcmlhTGFiZWwnIHwgdHJhbnNsYXRlXCI+XG4gIDxkaXZcbiAgICAqbmdJZj1cImF2YXRhckNvbmZpZ1wiXG4gICAgY2xhc3M9XCJtYy1idWJibGUtYXZhdGFyXCIgcm9sZT1cImltZ1wiXG4gICAgW25nQ2xhc3NdPVwieyAnZW1wdHktYXZhdGFyJzogaXNFbXB0eUF2YXRhciB9XCJcbiAgPlxuICAgIDxtYy1hdmF0YXJcbiAgICAgICpuZ0lmPVwiIWlzRW1wdHlBdmF0YXJcIlxuICAgICAgW2ltZ1NyY109XCJhdmF0YXJDb25maWc/LmltZ1NyYyB8fCAnJ1wiXG4gICAgICBbbmFtZV09XCJhdmF0YXJDb25maWc/Lm5hbWUgfHwgJydcIlxuICAgICAgW3dpZHRoXT1cImF2YXRhckNvbmZpZz8ud2lkdGggfHwgMzZcIlxuICAgICAgW2hlaWdodF09XCJhdmF0YXJDb25maWc/LmhlaWdodCB8fCAzNlwiXG4gICAgICBbZ2VuZGVyXT1cImF2YXRhckNvbmZpZz8uZ2VuZGVyIHx8ICcnXCJcbiAgICAvPlxuICAgIDxkaXYgKm5nSWY9XCJpc0VtcHR5QXZhdGFyXCIgICAgY2xhc3M9XCJtYy1idWJibGUtYXZhdGFyLXdyYXBwZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidCdWJibGUuZW1wdHlBdmF0YXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJhdmF0YXJDb25maWc/LndpZHRoIHx8IDM2XCJcbiAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiYXZhdGFyQ29uZmlnPy5oZWlnaHQgfHwgMzZcIj48L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cImF2YXRhclBvc2l0aW9uID09PSAndG9wJ1wiIGNsYXNzPVwibWMtYnViYmxlLWF2YXRhci1uYW1lXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQnViYmxlLnVzZXJOYW1lJyB8IHRyYW5zbGF0ZTp7IG5hbWU6IGF2YXRhckNvbmZpZz8uZGlzcGxheU5hbWUgfHwgJycgfSBcIj57e1xuICAgICAgYXZhdGFyQ29uZmlnPy5kaXNwbGF5TmFtZVxuICAgIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWMtYnViYmxlLWNvbnRlbnQtY29udGFpbmVyXCIgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICBbbmdDbGFzc109XCJ7ICd3aXRoLWF2YXRhcic6IGF2YXRhckNvbmZpZyB9XCJcbiAgPlxuICAgIDwhLS0g6aG26YOo5YaF5a655oqV5b2xIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbdG9wXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8IS0tIOWKoOi9veeKtuaAgSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1idXN5PVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUcGxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVHBsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2xvYWRpbmdUcGxdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgIDxtYy1idWJibGUtbG9hZGluZz48L21jLWJ1YmJsZS1sb2FkaW5nPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8IS0tIOS4u+imgeWGheWuuSAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIihkZWZhdWx0VGVtcGxhdGUgfHwgY29udGVudCkgJiYgIWxvYWRpbmdcIlxuICAgICAgY2xhc3M9XCJtYy1idWJibGUtY29udGVudFwiXG4gICAgICBbbmdDbGFzc109XCJbdmFyaWFudF1cIlxuICAgICAgcm9sZT1cInJlZ2lvblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRlZmF1bHRUZW1wbGF0ZTsgZWxzZSBjb250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgICAgICA8c3BhbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidCdWJibGUuY29udGVudCcgfCB0cmFuc2xhdGVcIj57eyBjb250ZW50IH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8IS0tIOW6lemDqOWGheWuueaKleW9sSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib3R0b21UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JvdHRvbV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtbmcvc3JjL0J1YmJsZS9idWJibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1uZy9zcmMvQnViYmxlL2J1YmJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBWSxZQUFZLEVBQWUsZUFBZSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHNUQsT0FBTyxFQUFpQixnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBU3pELE1BQU0sT0FBTyxlQUFnQixTQUFRLGFBQWE7SUFrQmhELFlBQVk7SUFDWixJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDtRQUFnQixLQUFLLEVBQUUsQ0FBQztRQXRCeEIsT0FBTztRQUNFLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixVQUFLLEdBQWdCLE1BQU0sQ0FBQztRQUM1QixtQkFBYyxHQUFtQixNQUFNLENBQUM7UUFDeEMsWUFBTyxHQUFrQixRQUFRLENBQUM7UUFHM0MsV0FBVztRQUNhLG1CQUFjLEdBQTRCLElBQUksQ0FBQztRQUNsRCxnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDckMsdUJBQWtCLEdBQTRCLElBQUksQ0FBQztRQUN2RCxtQkFBYyxHQUE0QixJQUFJLENBQUM7SUFVOUMsQ0FBQztJQUUxQixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLE9BQU87UUFDbEIsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLE9BQU87WUFDaEIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTthQUNoQyxDQUFDO1NBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPO0lBQ1AsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUFBLENBQUM7SUFFRixJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQSxDQUFDOzhHQW5EUyxlQUFlO2tHQUFmLGVBQWUsNnFCQ2pCNUIsdzFGQW9FQSxzOUNEdkRZLFlBQVksd1lBQUUsc0JBQXNCLDhEQUFFLGVBQWUscUhBQUUsYUFBYTs7MkZBSW5FLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDO3dEQU10RSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdrQixjQUFjO3NCQUFyQyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ0QsV0FBVztzQkFBL0IsWUFBWTt1QkFBQyxLQUFLO2dCQUNTLGtCQUFrQjtzQkFBN0MsWUFBWTt1QkFBQyxZQUFZO2dCQUNGLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFHUyxlQUFlO3NCQUE3QyxlQUFlO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBjb21wdXRlZCwgQ29udGVudENoaWxkLCBUZW1wbGF0ZVJlZiwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdWJibGVMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9idWJibGUtbG9hZGluZy9idWJibGUtbG9hZGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBERUZBVUxUX0FWQVRBUl9XSURUSCwgREVGQVVMVF9BVkFUQVJfSEVJR0hULCBBVkFUQVJfTkFNRSwgQVZBVEFSX0lNRyB9IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uL0J1YmJsZS9jb21tb24vYnViYmxlLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBCdWJibGVBbGlnbiwgQnViYmxlVmFyaWFudCwgQXZhdGFyUG9zaXRpb24sIEJ1YmJsZUF2YXRhciB9IGZyb20gJy4uL2NvbXBvbmVudHMtY29tbW9uLy9CdWJibGUvY29tbW9uL2J1YmJsZS10eXBlcyc7XG5pbXBvcnQgeyBCdWJibGVBZGFwdGVyLCBCdWJibGVGb3VuZGF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy1jb21tb24vQnViYmxlL2ZvdW5kYXRpb24nO1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi4vQmFzZS9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vTG9jYWxlL3RyYW5zbGF0ZS5waXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWMtYnViYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnViYmxlTG9hZGluZ0NvbXBvbmVudCwgQXZhdGFyQ29tcG9uZW50LCBUcmFuc2xhdGVQaXBlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1YmJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1YmJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJ1YmJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyDnu4Tku7blsZ7mgKdcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWxpZ246IEJ1YmJsZUFsaWduID0gJ2xlZnQnO1xuICBASW5wdXQoKSBhdmF0YXJQb3NpdGlvbjogQXZhdGFyUG9zaXRpb24gPSAnc2lkZSc7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IEJ1YmJsZVZhcmlhbnQgPSAnZmlsbGVkJztcbiAgQElucHV0KCkgYXZhdGFyQ29uZmlnPzogQnViYmxlQXZhdGFyO1xuXG4gIC8vIOWGheWuueaKleW9seaooeadv+W8leeUqFxuICBAQ29udGVudENoaWxkKCdhdmF0YXInKSBhdmF0YXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBAQ29udGVudENoaWxkKCd0b3AnKSB0b3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBAQ29udGVudENoaWxkKCdsb2FkaW5nVHBsJykgbG9hZGluZ1RwbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBDb250ZW50Q2hpbGQoJ2JvdHRvbScpIGJvdHRvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyDmo4DmtYvmmK/lkKbmnInlhoXlrrnmipXlvbFcbiAgQENvbnRlbnRDaGlsZHJlbignbmctY29udGVudCcpIGNvbnRlbnRDaGlsZHJlbjogUXVlcnlMaXN0PGFueT47XG4gIFxuICAvLyDorqHnrpfmmK/lkKbmnInlhoXlrrnmipXlvbFcbiAgZ2V0IG5nQ29udGVudFByb2plY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50Q2hpbGRyZW4gJiYgdGhpcy5jb250ZW50Q2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgfVxuICBcbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvdW5kYXRpb24gPSBuZXcgQnViYmxlRm91bmRhdGlvbih0aGlzLmFkYXB0ZXIpO1xuICAgIHRoaXMuZm91bmRhdGlvbi5pbml0KCk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgYWRhcHRlcigpOiBCdWJibGVBZGFwdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuYWRhcHRlcixcbiAgICAgIGdldFByb3BzOiAoKSA9PiAoe1xuICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICAgIGxvYWRpbmc6IHRoaXMubG9hZGluZyxcbiAgICAgICAgYWxpZ246IHRoaXMuYWxpZ24sXG4gICAgICAgIGF2YXRhclBvc2l0aW9uOiB0aGlzLmF2YXRhclBvc2l0aW9uLFxuICAgICAgICB2YXJpYW50OiB0aGlzLnZhcmlhbnQsXG4gICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5hdmF0YXJDb25maWcsXG4gICAgICB9KSxcbiAgICB9XG4gIH1cblxuICAvLyDorqHnrpflsZ7mgKdcbiAgZ2V0IGJ1YmJsZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mb3VuZGF0aW9uLmdldEJ1YmJsZUNsYXNzZXMoKTtcbiAgfTtcblxuICBnZXQgaXNFbXB0eUF2YXRhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3VuZGF0aW9uLmdldElzRW1wdHlBdmF0YXIodGhpcy5hdmF0YXJDb25maWcpO1xuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWJ1YmJsZVwiIFtuZ0NsYXNzXT1cImJ1YmJsZUNsYXNzZXNcIiByb2xlPVwiZ3JvdXBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidCdWJibGUuYXJpYUxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICA8IS0tIOiHquWumuS5ieWktOWDj+WMuuWfnyAtLT5cbiAgPGRpdiAqbmdJZj1cImF2YXRhclRlbXBsYXRlXCIgY2xhc3M9XCJtYy1idWJibGUtYXZhdGFyXCIgcm9sZT1cImltZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdmF0YXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthdmF0YXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgXG4gIDwhLS0g6buY6K6k5aS05YOP6YWN572uIC0tPlxuICA8ZGl2ICpuZ0lmPVwiIWF2YXRhclRlbXBsYXRlICYmIGF2YXRhckNvbmZpZ1wiXG4gICAgY2xhc3M9XCJtYy1idWJibGUtYXZhdGFyXCIgcm9sZT1cImltZ1wiXG4gICAgW25nQ2xhc3NdPVwieyAnZW1wdHktYXZhdGFyJzogaXNFbXB0eUF2YXRhciB9XCJcbiAgPlxuICAgIDxtYy1hdmF0YXJcbiAgICAgICpuZ0lmPVwiIWlzRW1wdHlBdmF0YXJcIlxuICAgICAgW2ltZ1NyY109XCJhdmF0YXJDb25maWc/LmltZ1NyYyB8fCAnJ1wiXG4gICAgICBbbmFtZV09XCJhdmF0YXJDb25maWc/Lm5hbWUgfHwgJydcIlxuICAgICAgW3dpZHRoXT1cImF2YXRhckNvbmZpZz8ud2lkdGggfHwgMzZcIlxuICAgICAgW2hlaWdodF09XCJhdmF0YXJDb25maWc/LmhlaWdodCB8fCAzNlwiXG4gICAgICBbZ2VuZGVyXT1cImF2YXRhckNvbmZpZz8uZ2VuZGVyIHx8ICcnXCJcbiAgICAvPlxuICAgIDxkaXYgKm5nSWY9XCJpc0VtcHR5QXZhdGFyXCIgICAgY2xhc3M9XCJtYy1idWJibGUtYXZhdGFyLXdyYXBwZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidCdWJibGUuZW1wdHlBdmF0YXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJhdmF0YXJDb25maWc/LndpZHRoIHx8IDM2XCJcbiAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiYXZhdGFyQ29uZmlnPy5oZWlnaHQgfHwgMzZcIj48L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cImF2YXRhclBvc2l0aW9uID09PSAndG9wJ1wiIGNsYXNzPVwibWMtYnViYmxlLWF2YXRhci1uYW1lXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQnViYmxlLnVzZXJOYW1lJyB8IHRyYW5zbGF0ZTp7IG5hbWU6IGF2YXRhckNvbmZpZz8uZGlzcGxheU5hbWUgfHwgJycgfSBcIj57e1xuICAgICAgYXZhdGFyQ29uZmlnPy5kaXNwbGF5TmFtZVxuICAgIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWMtYnViYmxlLWNvbnRlbnQtY29udGFpbmVyXCIgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICBbbmdDbGFzc109XCJ7ICd3aXRoLWF2YXRhcic6IGF2YXRhclRlbXBsYXRlIHx8IGF2YXRhckNvbmZpZyB9XCJcbiAgPlxuICAgIDwhLS0g6aG26YOo5YaF5a655oqV5b2xIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbdG9wXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8IS0tIOWKoOi9veeKtuaAgSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1idXN5PVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdUcGxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVHBsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2xvYWRpbmdUcGxdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nVGVtcGxhdGU+XG4gICAgICAgIDxtYy1idWJibGUtbG9hZGluZz48L21jLWJ1YmJsZS1sb2FkaW5nPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8IS0tIOS4u+imgeWGheWuuSAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgIGNsYXNzPVwibWMtYnViYmxlLWNvbnRlbnRcIlxuICAgICAgW25nQ2xhc3NdPVwiW3ZhcmlhbnRdXCJcbiAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50ICYmICFuZ0NvbnRlbnRQcm9qZWN0ZWRcIj5cbiAgICAgICAgPHNwYW4gW2F0dHIuYXJpYS1sYWJlbF09XCInQnViYmxlLmNvbnRlbnQnIHwgdHJhbnNsYXRlXCI+e3sgY29udGVudCB9fTwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDwhLS0g5bqV6YOo5YaF5a655oqV5b2xIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvdHRvbVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYm90dG9tXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==