igniteui-angular-extras 15.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/esm2020/igniteui-angular-extras.mjs +5 -0
- package/esm2020/images/charts.mjs +408 -0
- package/esm2020/images/conditions.mjs +95 -0
- package/esm2020/lib/context-menu/chart-dialog/chart-dialog.component.mjs +67 -0
- package/esm2020/lib/context-menu/context-menu.component.mjs +177 -0
- package/esm2020/lib/context-menu/igx-context-menu.directive.mjs +160 -0
- package/esm2020/lib/directives/chart-integration/chart-integration.directive.mjs +312 -0
- package/esm2020/lib/directives/chart-integration/chart-types.mjs +28 -0
- package/esm2020/lib/directives/chart-integration/initializers.mjs +103 -0
- package/esm2020/lib/directives/conditional-formatting/conditional-formatting.directive.mjs +311 -0
- package/esm2020/lib/igniteui-angular-extras.module.mjs +104 -0
- package/esm2020/lib/pipes/svg.pipe.mjs +20 -0
- package/esm2020/public-api.mjs +21 -0
- package/fesm2015/igniteui-angular-extras.mjs +1789 -0
- package/fesm2015/igniteui-angular-extras.mjs.map +1 -0
- package/fesm2020/igniteui-angular-extras.mjs +1782 -0
- package/fesm2020/igniteui-angular-extras.mjs.map +1 -0
- package/images/charts.d.ts +16 -0
- package/images/conditions.d.ts +10 -0
- package/index.d.ts +5 -0
- package/lib/context-menu/chart-dialog/chart-dialog.component.d.ts +31 -0
- package/lib/context-menu/context-menu.component.d.ts +38 -0
- package/lib/context-menu/igx-context-menu.directive.d.ts +33 -0
- package/lib/directives/chart-integration/chart-integration.directive.d.ts +52 -0
- package/lib/directives/chart-integration/chart-types.d.ts +25 -0
- package/lib/directives/chart-integration/initializers.d.ts +39 -0
- package/lib/directives/conditional-formatting/conditional-formatting.directive.d.ts +95 -0
- package/lib/igniteui-angular-extras.module.d.ts +14 -0
- package/lib/pipes/svg.pipe.d.ts +10 -0
- package/package.json +35 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// tslint:disable: max-line-length
|
|
2
|
+
export const Clear = `
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
4
|
+
<defs>
|
|
5
|
+
<style>.cls-Clear-1{fill-rule:evenodd;}.cls-Clear-2{fill:none;}</style>
|
|
6
|
+
</defs>
|
|
7
|
+
<g id="Layer_2" data-name="Layer 2">
|
|
8
|
+
<g id="Layer_1-2" data-name="Layer 1">
|
|
9
|
+
<g id="Conditional-formating">
|
|
10
|
+
<g id="Artboard">
|
|
11
|
+
<g id="refresh-24px">
|
|
12
|
+
<path id="Path" class="cls-Clear-1" d="M17.65,6.35A8,8,0,1,0,19.73,14H17.65A6,6,0,1,1,12,6a5.91,5.91,0,0,1,4.22,1.78L13,11h7V4Z"/>
|
|
13
|
+
<polygon class="cls-Clear-2" points="0 0 24 0 24 24 0 24 0 0"/>
|
|
14
|
+
</g>
|
|
15
|
+
</g>
|
|
16
|
+
</g>
|
|
17
|
+
</g>
|
|
18
|
+
</g>
|
|
19
|
+
</svg>
|
|
20
|
+
`;
|
|
21
|
+
export const ColorScale = `
|
|
22
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
23
|
+
<path d="M13 13.65h5a5.63 5.63 0 00-.09-1H13zM13 10.65h4.19a6.29 6.29 0 00-.74-1H13zM13 19.58a5.87 5.87 0 002.34-.93H13zM13 6.18v1.48h1.48l-1-1-.48-.48zM13 15.65v1h4.2a5.68 5.68 0 00.46-1zM11 6.18L7.76 9.43A6 6 0 0011 19.58z" fill="none"/>
|
|
24
|
+
<path d="M16.45 9.65H13v1h4.19a6.29 6.29 0 00-.74-1zM13.48 6.66L13 6.18v1.48h1.48l-1-1zM6 13.66a6 6 0 005 5.92V6.18L7.76 9.42A6 6 0 006 13.66zM13 19.58a5.87 5.87 0 002.34-.93H13zM13 16.65h4.2a5.68 5.68 0 00.46-1H13zM13 12.65v1h5a5.63 5.63 0 00-.09-1z" fill="none"/>
|
|
25
|
+
<path d="M19.93 12.66a7.84 7.84 0 00-.51-2 8.48 8.48 0 00-.5-1A7.8 7.8 0 0017.66 8l-.35-.36-.31-.26-.73-.73-2-2-.85-.84L12 2.34 6.34 8A8 8 0 0011 21.58h.21a7 7 0 00.79 0 7.14 7.14 0 00.8 0h.2a7.94 7.94 0 006.93-8.92zM11 19.58A6 6 0 017.76 9.42L11 6.18zm2-12.93v-.47l.48.47 1 1H13zm0 3h3.45a6.29 6.29 0 01.74 1H13zm0 9.93v-.93h2.34a5.87 5.87 0 01-2.34.93zm4.2-2.93H13v-1h4.66a5.68 5.68 0 01-.46 1zm-4.2-3v-1h4.91a5.63 5.63 0 01.09 1z"/>
|
|
26
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
27
|
+
</svg>
|
|
28
|
+
|
|
29
|
+
`;
|
|
30
|
+
export const DataBars = `
|
|
31
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
32
|
+
<path d="M3 7h12v2H3zM3 15h12v2H3zM3 19h18v2H3zM3 11h18v2H3zM3 3h18v2H3z"/>
|
|
33
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
34
|
+
</svg>
|
|
35
|
+
|
|
36
|
+
`;
|
|
37
|
+
export const DuplicateValues = `
|
|
38
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
39
|
+
<path d="M4.94 10.56a1 1 0 00-.38.79.79.79 0 00.25.63 1.06 1.06 0 00.74.24 1.9 1.9 0 001.06-.3 1.48 1.48 0 00.63-.67v-1H6a1.58 1.58 0 00-1.06.31zM16.94 14.69a1 1 0 00-.38.79.82.82 0 00.25.63 1.11 1.11 0 00.74.23 2 2 0 001.06-.29 1.5 1.5 0 00.63-.68v-1H18a1.54 1.54 0 00-1.06.32z" fill="none"/>
|
|
40
|
+
<path d="M4.94 10.56a1 1 0 00-.38.79.79.79 0 00.25.63 1.06 1.06 0 00.74.24 1.9 1.9 0 001.06-.3 1.48 1.48 0 00.63-.67v-1H6a1.58 1.58 0 00-1.06.31zM16.94 14.69a1 1 0 00-.38.79.82.82 0 00.25.63 1.11 1.11 0 00.74.23 2 2 0 001.06-.29 1.5 1.5 0 00.63-.68v-1H18a1.54 1.54 0 00-1.06.32z" fill="none"/>
|
|
41
|
+
<path d="M20.76 15.87v-3.06a2.17 2.17 0 00-.76-1.76 3 3 0 00-1.94-.61 3.06 3.06 0 00-2 .63 1.7 1.7 0 00-.73 1.45h1.49a.83.83 0 01.31-.66 1.29 1.29 0 01.84-.25 1.26 1.26 0 01.91.3 1.09 1.09 0 01.32.85v.6H18a3.81 3.81 0 00-2.22.56 1.78 1.78 0 00-.78 1.59 2 2 0 00.58 1.49 2.31 2.31 0 001.65.55 2.12 2.12 0 001.16-.33 2.79 2.79 0 00.83-.81 4.33 4.33 0 00.08.5c0 .16.08.33.13.51H21a4.29 4.29 0 01-.18-.77 5.46 5.46 0 01-.06-.78zm-1.52-.5a1.5 1.5 0 01-.63.68 2 2 0 01-1.06.29 1.11 1.11 0 01-.74-.23.82.82 0 01-.25-.63 1 1 0 01.38-.79 1.54 1.54 0 011.06-.34h1.24zM8.76 11.75V8.69A2.16 2.16 0 008 6.93a2.93 2.93 0 00-1.94-.61 3.06 3.06 0 00-2 .63 1.69 1.69 0 00-.73 1.44h1.5a.83.83 0 01.31-.65A1.3 1.3 0 016 7.52a1.23 1.23 0 01.91.31 1.07 1.07 0 01.32.84v.61H6a3.74 3.74 0 00-2.22.56A1.78 1.78 0 003 11.39a2 2 0 00.58 1.52 2.27 2.27 0 001.65.56 2.12 2.12 0 001.16-.33 2.79 2.79 0 00.83-.81 4.17 4.17 0 00.08.49 4.77 4.77 0 00.13.51H9a4 4 0 01-.18-.76 5.55 5.55 0 01-.06-.82zm-1.52-.5a1.48 1.48 0 01-.63.67 1.9 1.9 0 01-1.06.3 1.06 1.06 0 01-.74-.22.79.79 0 01-.25-.63 1 1 0 01.38-.79A1.58 1.58 0 016 10.23h1.24zM7 19h2v2H7zM7 15h2v2H7zM3 15h2v2H3zM15 7h2v2h-2zM15 3h2v2h-2zM3 19h2v2H3zM19 19h2v2h-2zM19 7h2v2h-2zM15 19h2v2h-2zM19 3h2v2h-2zM11 11h2v2h-2zM11 19h2v2h-2zM11 15h2v2h-2zM11 7h2v2h-2zM11 3h2v2h-2zM7 3h2v2H7zM3 3h2v2H3z"/>
|
|
42
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
43
|
+
</svg>
|
|
44
|
+
|
|
45
|
+
`;
|
|
46
|
+
export const Empty = `
|
|
47
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
48
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
49
|
+
<path d="M5 17h2v2H5zM13 17h2v2h-2zM5 13h2v2H5zM17 17h2v2h-2zM13 5h2v2h-2zM9 17h2v2H9zM17 9h2v2h-2zM17 13h2v2h-2zM17 5h2v2h-2zM5 9h2v2H5zM5 5h2v2H5zM9 5h2v2H9z"/>
|
|
50
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
51
|
+
</svg>
|
|
52
|
+
|
|
53
|
+
`;
|
|
54
|
+
export const Equal = `
|
|
55
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
56
|
+
<path d="M5 13.5h14v2H5zM5 8.5h14v2H5z"/>
|
|
57
|
+
</svg>
|
|
58
|
+
|
|
59
|
+
`;
|
|
60
|
+
export const GreaterThan = `
|
|
61
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
62
|
+
<path d="M6 7.11L15.09 12 6 16.89V19l12-6.46v-1.08L6 5v2.11z"/>
|
|
63
|
+
</svg>
|
|
64
|
+
|
|
65
|
+
`;
|
|
66
|
+
export const TextContains = `
|
|
67
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
68
|
+
<path d="M10.79 12.77a1.16 1.16 0 00-.44.9.92.92 0 00.3.72 1.18 1.18 0 00.84.27 2.27 2.27 0 001.21-.34 1.61 1.61 0 00.71-.77v-1.17H12a1.76 1.76 0 00-1.21.39z" fill="none"/>
|
|
69
|
+
<path d="M5 19h14V5H5zm8-9.36a1.45 1.45 0 00-1-.35 1.5 1.5 0 00-1 .29.93.93 0 00-.35.75H9a1.93 1.93 0 01.83-1.65 3.54 3.54 0 012.3-.72 3.34 3.34 0 012.22.7 2.44 2.44 0 01.84 2v3.5a5.57 5.57 0 00.07.93 4.51 4.51 0 00.21.88h-1.83c-.06-.2-.12-.39-.16-.58a3.72 3.72 0 01-.08-.57 3.05 3.05 0 01-1 .93 2.39 2.39 0 01-1.32.37 2.63 2.63 0 01-1.89-.63 2.29 2.29 0 01-.66-1.74 2.07 2.07 0 01.9-1.78A4.39 4.39 0 0112 11.3h1.38v-.69a1.3 1.3 0 00-.38-.97z" fill="none"/>
|
|
70
|
+
<path d="M3 3v18h18V3zm16 16H5V5h14z"/>
|
|
71
|
+
<path d="M12 11.3a4.39 4.39 0 00-2.54.63 2.07 2.07 0 00-.9 1.78 2.29 2.29 0 00.66 1.74 2.63 2.63 0 001.89.63 2.39 2.39 0 001.32-.37 3.05 3.05 0 001-.93 3.72 3.72 0 00.08.57c0 .19.1.38.16.58h1.79a4.51 4.51 0 01-.21-.88 5.57 5.57 0 01-.07-.93v-3.5a2.44 2.44 0 00-.84-2 3.34 3.34 0 00-2.22-.7 3.54 3.54 0 00-2.3.72A1.93 1.93 0 009 10.29h1.71a.93.93 0 01.29-.71 1.5 1.5 0 011-.29 1.45 1.45 0 011 .35 1.3 1.3 0 01.37 1v.69zm1.4 1.08v1.17a1.61 1.61 0 01-.71.77 2.27 2.27 0 01-1.21.34 1.18 1.18 0 01-.84-.27.92.92 0 01-.3-.72 1.16 1.16 0 01.44-.9 1.76 1.76 0 011.22-.39z"/>
|
|
72
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
73
|
+
</svg>
|
|
74
|
+
|
|
75
|
+
`;
|
|
76
|
+
export const Top10 = `
|
|
77
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
78
|
+
<path d="M17.34 7.14a.5.5 0 00-.13.33v.33a.48.48 0 00.13.33.41.41 0 00.31.14.37.37 0 00.42-.37v-.41a.49.49 0 00-.07-.34.45.45 0 00-.62 0zM10.84 8a.54.54 0 00.51-.3 2.05 2.05 0 00.17-.92V5.3a2 2 0 00-.17-.94.6.6 0 00-1 0 2.13 2.13 0 00-.17.88V6.7a2.14 2.14 0 00.17 1 .55.55 0 00.49.3zM14.88 5c.28 0 .42-.18.42-.53v-.26a.53.53 0 00-.11-.34.4.4 0 00-.32-.14.42.42 0 00-.31.13.52.52 0 00-.12.36v.29a.49.49 0 00.12.34.39.39 0 00.32.15z" fill="none"/>
|
|
79
|
+
<path d="M9 18h2v3h2v-3h2l-3-3-3 3zM4 11h16v2H4zM6.38 8.92h1.36V3.08h-.12l-2.57.89V5l1.33-.39v4.31zM10.84 9a1.85 1.85 0 001.5-.64 2.82 2.82 0 00.53-1.82V5.47a2.76 2.76 0 00-.54-1.82 1.83 1.83 0 00-1.5-.65 1.83 1.83 0 00-1.5.65 2.78 2.78 0 00-.53 1.82v1.07a2.79 2.79 0 00.53 1.81 1.86 1.86 0 001.51.65zm-.69-3.79a2.13 2.13 0 01.17-.88.6.6 0 011 0 2 2 0 01.17.94v1.47a2.05 2.05 0 01-.17.92.59.59 0 01-1 0 2.14 2.14 0 01-.17-1zM14.88 5.71a1.31 1.31 0 00.94-.33 1.11 1.11 0 00.35-.86v-.29a1.19 1.19 0 00-.35-.9 1.32 1.32 0 00-1-.33 1.34 1.34 0 00-.95.33 1.17 1.17 0 00-.35.88v.28a1.16 1.16 0 00.36.9 1.4 1.4 0 001 .32zm-.44-1.49a.52.52 0 01.12-.36.42.42 0 01.31-.13.4.4 0 01.32.14.53.53 0 01.11.34v.24c0 .35-.14.53-.42.53a.39.39 0 01-.32-.13.49.49 0 01-.12-.34zM15.13 8.48l2.85-4.56-.62-.32-2.85 4.57.62.31zM16.7 6.62a1.1 1.1 0 00-.35.87v.29a1.12 1.12 0 00.35.89 1.36 1.36 0 00.95.33 1.32 1.32 0 001-.33A1.15 1.15 0 0019 7.8v-.28a1.17 1.17 0 00-.36-.91 1.54 1.54 0 00-1.89 0zm1.38.87v.41a.37.37 0 01-.42.37.41.41 0 01-.31-.14.48.48 0 01-.13-.33v-.33a.5.5 0 01.13-.33.45.45 0 01.62 0 .49.49 0 01.11.35z"/>
|
|
80
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
81
|
+
</svg>
|
|
82
|
+
|
|
83
|
+
`;
|
|
84
|
+
export const UniqueValues = `
|
|
85
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
86
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
87
|
+
<path d="M8.94 10.56a1 1 0 00-.38.79.79.79 0 00.25.63 1.06 1.06 0 00.74.24 1.9 1.9 0 001.06-.3 1.48 1.48 0 00.63-.67v-1H10a1.58 1.58 0 00-1.06.31z" fill="none"/>
|
|
88
|
+
<path d="M8.94 10.56a1 1 0 00-.38.79.79.79 0 00.25.63 1.06 1.06 0 00.74.24 1.9 1.9 0 001.06-.3 1.48 1.48 0 00.63-.67v-1H10a1.58 1.58 0 00-1.06.31z" fill="none"/>
|
|
89
|
+
<path d="M12.76 11.75V8.69A2.16 2.16 0 0012 6.93a2.93 2.93 0 00-1.94-.61 3.06 3.06 0 00-2 .63 1.69 1.69 0 00-.73 1.44h1.5a.83.83 0 01.31-.65 1.3 1.3 0 01.86-.22 1.23 1.23 0 01.91.31 1.07 1.07 0 01.32.84v.61H10a3.74 3.74 0 00-2.22.56A1.78 1.78 0 007 11.39a2 2 0 00.58 1.52 2.27 2.27 0 001.65.56 2.12 2.12 0 001.16-.33 2.79 2.79 0 00.83-.81 4.17 4.17 0 00.08.49 4.77 4.77 0 00.13.51H13a4 4 0 01-.18-.76 5.55 5.55 0 01-.06-.82zm-1.52-.5a1.48 1.48 0 01-.63.67 1.9 1.9 0 01-1.06.3 1.06 1.06 0 01-.74-.22.79.79 0 01-.25-.63 1 1 0 01.38-.79 1.58 1.58 0 011.06-.35h1.24zM7 19h2v2H7zM7 15h2v2H7zM3 15h2v2H3zM15 7h2v2h-2zM15 3h2v2h-2zM3 19h2v2H3zM19 19h2v2h-2zM19 7h2v2h-2zM15 19h2v2h-2zM19 3h2v2h-2zM15 11h2v2h-2zM19 11h2v2h-2zM15 15h2v2h-2zM19 15h2v2h-2zM11 19h2v2h-2zM11 15h2v2h-2zM11 3h2v2h-2zM7 3h2v2H7zM3 3h2v2H3zM3 7h2v2H3zM3 11h2v2H3z"/>
|
|
90
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
91
|
+
<path d="M0 0h24v24H0z" fill="none"/>
|
|
92
|
+
</svg>
|
|
93
|
+
|
|
94
|
+
`;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXItZXh0cmFzL3NyYy9pbWFnZXMvY29uZGl0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQnBCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7O0NBUXpCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7Ozs7OztDQU12QixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHOzs7Ozs7OztDQVE5QixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHOzs7Ozs7O0NBT3BCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7Ozs7O0NBS3BCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7Ozs7O0NBSzFCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7Ozs7Ozs7OztDQVMzQixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHOzs7Ozs7O0NBT3BCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7Ozs7Ozs7Ozs7Q0FVM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcclxuZXhwb3J0IGNvbnN0IENsZWFyID0gYFxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgPGRlZnM+XHJcbiAgICAgICAgPHN0eWxlPi5jbHMtQ2xlYXItMXtmaWxsLXJ1bGU6ZXZlbm9kZDt9LmNscy1DbGVhci0ye2ZpbGw6bm9uZTt9PC9zdHlsZT5cclxuICAgIDwvZGVmcz5cclxuICAgIDxnIGlkPVwiTGF5ZXJfMlwiIGRhdGEtbmFtZT1cIkxheWVyIDJcIj5cclxuICAgICAgICA8ZyBpZD1cIkxheWVyXzEtMlwiIGRhdGEtbmFtZT1cIkxheWVyIDFcIj5cclxuICAgICAgICAgICAgPGcgaWQ9XCJDb25kaXRpb25hbC1mb3JtYXRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxnIGlkPVwiQXJ0Ym9hcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cInJlZnJlc2gtMjRweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlBhdGhcIiBjbGFzcz1cImNscy1DbGVhci0xXCIgZD1cIk0xNy42NSw2LjM1QTgsOCwwLDEsMCwxOS43MywxNEgxNy42NUE2LDYsMCwxLDEsMTIsNmE1LjkxLDUuOTEsMCwwLDEsNC4yMiwxLjc4TDEzLDExaDdWNFpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPVwiY2xzLUNsZWFyLTJcIiBwb2ludHM9XCIwIDAgMjQgMCAyNCAyNCAwIDI0IDAgMFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvZz5cclxuICAgICAgICA8L2c+XHJcbiAgICA8L2c+XHJcbjwvc3ZnPlxyXG5gO1xyXG5leHBvcnQgY29uc3QgQ29sb3JTY2FsZSA9IGBcclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgIDxwYXRoIGQ9XCJNMTMgMTMuNjVoNWE1LjYzIDUuNjMgMCAwMC0uMDktMUgxM3pNMTMgMTAuNjVoNC4xOWE2LjI5IDYuMjkgMCAwMC0uNzQtMUgxM3pNMTMgMTkuNThhNS44NyA1Ljg3IDAgMDAyLjM0LS45M0gxM3pNMTMgNi4xOHYxLjQ4aDEuNDhsLTEtMS0uNDgtLjQ4ek0xMyAxNS42NXYxaDQuMmE1LjY4IDUuNjggMCAwMC40Ni0xek0xMSA2LjE4TDcuNzYgOS40M0E2IDYgMCAwMDExIDE5LjU4elwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0xNi40NSA5LjY1SDEzdjFoNC4xOWE2LjI5IDYuMjkgMCAwMC0uNzQtMXpNMTMuNDggNi42NkwxMyA2LjE4djEuNDhoMS40OGwtMS0xek02IDEzLjY2YTYgNiAwIDAwNSA1LjkyVjYuMThMNy43NiA5LjQyQTYgNiAwIDAwNiAxMy42NnpNMTMgMTkuNThhNS44NyA1Ljg3IDAgMDAyLjM0LS45M0gxM3pNMTMgMTYuNjVoNC4yYTUuNjggNS42OCAwIDAwLjQ2LTFIMTN6TTEzIDEyLjY1djFoNWE1LjYzIDUuNjMgMCAwMC0uMDktMXpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTkuOTMgMTIuNjZhNy44NCA3Ljg0IDAgMDAtLjUxLTIgOC40OCA4LjQ4IDAgMDAtLjUtMUE3LjggNy44IDAgMDAxNy42NiA4bC0uMzUtLjM2LS4zMS0uMjYtLjczLS43My0yLTItLjg1LS44NEwxMiAyLjM0IDYuMzQgOEE4IDggMCAwMDExIDIxLjU4aC4yMWE3IDcgMCAwMC43OSAwIDcuMTQgNy4xNCAwIDAwLjggMGguMmE3Ljk0IDcuOTQgMCAwMDYuOTMtOC45MnpNMTEgMTkuNThBNiA2IDAgMDE3Ljc2IDkuNDJMMTEgNi4xOHptMi0xMi45M3YtLjQ3bC40OC40NyAxIDFIMTN6bTAgM2gzLjQ1YTYuMjkgNi4yOSAwIDAxLjc0IDFIMTN6bTAgOS45M3YtLjkzaDIuMzRhNS44NyA1Ljg3IDAgMDEtMi4zNC45M3ptNC4yLTIuOTNIMTN2LTFoNC42NmE1LjY4IDUuNjggMCAwMS0uNDYgMXptLTQuMi0zdi0xaDQuOTFhNS42MyA1LjYzIDAgMDEuMDkgMXpcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG48L3N2Zz5cclxuXHJcbmA7XHJcbmV4cG9ydCBjb25zdCBEYXRhQmFycyA9IGBcclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgIDxwYXRoIGQ9XCJNMyA3aDEydjJIM3pNMyAxNWgxMnYySDN6TTMgMTloMTh2Mkgzek0zIDExaDE4djJIM3pNMyAzaDE4djJIM3pcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG48L3N2Zz5cclxuXHJcbmA7XHJcbmV4cG9ydCBjb25zdCBEdXBsaWNhdGVWYWx1ZXMgPSBgXHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICA8cGF0aCBkPVwiTTQuOTQgMTAuNTZhMSAxIDAgMDAtLjM4Ljc5Ljc5Ljc5IDAgMDAuMjUuNjMgMS4wNiAxLjA2IDAgMDAuNzQuMjQgMS45IDEuOSAwIDAwMS4wNi0uMyAxLjQ4IDEuNDggMCAwMC42My0uNjd2LTFINmExLjU4IDEuNTggMCAwMC0xLjA2LjMxek0xNi45NCAxNC42OWExIDEgMCAwMC0uMzguNzkuODIuODIgMCAwMC4yNS42MyAxLjExIDEuMTEgMCAwMC43NC4yMyAyIDIgMCAwMDEuMDYtLjI5IDEuNSAxLjUgMCAwMC42My0uNjh2LTFIMThhMS41NCAxLjU0IDAgMDAtMS4wNi4zMnpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNNC45NCAxMC41NmExIDEgMCAwMC0uMzguNzkuNzkuNzkgMCAwMC4yNS42MyAxLjA2IDEuMDYgMCAwMC43NC4yNCAxLjkgMS45IDAgMDAxLjA2LS4zIDEuNDggMS40OCAwIDAwLjYzLS42N3YtMUg2YTEuNTggMS41OCAwIDAwLTEuMDYuMzF6TTE2Ljk0IDE0LjY5YTEgMSAwIDAwLS4zOC43OS44Mi44MiAwIDAwLjI1LjYzIDEuMTEgMS4xMSAwIDAwLjc0LjIzIDIgMiAwIDAwMS4wNi0uMjkgMS41IDEuNSAwIDAwLjYzLS42OHYtMUgxOGExLjU0IDEuNTQgMCAwMC0xLjA2LjMyelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0yMC43NiAxNS44N3YtMy4wNmEyLjE3IDIuMTcgMCAwMC0uNzYtMS43NiAzIDMgMCAwMC0xLjk0LS42MSAzLjA2IDMuMDYgMCAwMC0yIC42MyAxLjcgMS43IDAgMDAtLjczIDEuNDVoMS40OWEuODMuODMgMCAwMS4zMS0uNjYgMS4yOSAxLjI5IDAgMDEuODQtLjI1IDEuMjYgMS4yNiAwIDAxLjkxLjMgMS4wOSAxLjA5IDAgMDEuMzIuODV2LjZIMThhMy44MSAzLjgxIDAgMDAtMi4yMi41NiAxLjc4IDEuNzggMCAwMC0uNzggMS41OSAyIDIgMCAwMC41OCAxLjQ5IDIuMzEgMi4zMSAwIDAwMS42NS41NSAyLjEyIDIuMTIgMCAwMDEuMTYtLjMzIDIuNzkgMi43OSAwIDAwLjgzLS44MSA0LjMzIDQuMzMgMCAwMC4wOC41YzAgLjE2LjA4LjMzLjEzLjUxSDIxYTQuMjkgNC4yOSAwIDAxLS4xOC0uNzcgNS40NiA1LjQ2IDAgMDEtLjA2LS43OHptLTEuNTItLjVhMS41IDEuNSAwIDAxLS42My42OCAyIDIgMCAwMS0xLjA2LjI5IDEuMTEgMS4xMSAwIDAxLS43NC0uMjMuODIuODIgMCAwMS0uMjUtLjYzIDEgMSAwIDAxLjM4LS43OSAxLjU0IDEuNTQgMCAwMTEuMDYtLjM0aDEuMjR6TTguNzYgMTEuNzVWOC42OUEyLjE2IDIuMTYgMCAwMDggNi45M2EyLjkzIDIuOTMgMCAwMC0xLjk0LS42MSAzLjA2IDMuMDYgMCAwMC0yIC42MyAxLjY5IDEuNjkgMCAwMC0uNzMgMS40NGgxLjVhLjgzLjgzIDAgMDEuMzEtLjY1QTEuMyAxLjMgMCAwMTYgNy41MmExLjIzIDEuMjMgMCAwMS45MS4zMSAxLjA3IDEuMDcgMCAwMS4zMi44NHYuNjFINmEzLjc0IDMuNzQgMCAwMC0yLjIyLjU2QTEuNzggMS43OCAwIDAwMyAxMS4zOWEyIDIgMCAwMC41OCAxLjUyIDIuMjcgMi4yNyAwIDAwMS42NS41NiAyLjEyIDIuMTIgMCAwMDEuMTYtLjMzIDIuNzkgMi43OSAwIDAwLjgzLS44MSA0LjE3IDQuMTcgMCAwMC4wOC40OSA0Ljc3IDQuNzcgMCAwMC4xMy41MUg5YTQgNCAwIDAxLS4xOC0uNzYgNS41NSA1LjU1IDAgMDEtLjA2LS44MnptLTEuNTItLjVhMS40OCAxLjQ4IDAgMDEtLjYzLjY3IDEuOSAxLjkgMCAwMS0xLjA2LjMgMS4wNiAxLjA2IDAgMDEtLjc0LS4yMi43OS43OSAwIDAxLS4yNS0uNjMgMSAxIDAgMDEuMzgtLjc5QTEuNTggMS41OCAwIDAxNiAxMC4yM2gxLjI0ek03IDE5aDJ2Mkg3ek03IDE1aDJ2Mkg3ek0zIDE1aDJ2Mkgzek0xNSA3aDJ2MmgtMnpNMTUgM2gydjJoLTJ6TTMgMTloMnYySDN6TTE5IDE5aDJ2MmgtMnpNMTkgN2gydjJoLTJ6TTE1IDE5aDJ2MmgtMnpNMTkgM2gydjJoLTJ6TTExIDExaDJ2MmgtMnpNMTEgMTloMnYyaC0yek0xMSAxNWgydjJoLTJ6TTExIDdoMnYyaC0yek0xMSAzaDJ2MmgtMnpNNyAzaDJ2Mkg3ek0zIDNoMnYySDN6XCIvPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuPC9zdmc+XHJcblxyXG5gO1xyXG5leHBvcnQgY29uc3QgRW1wdHkgPSBgXHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk01IDE3aDJ2Mkg1ek0xMyAxN2gydjJoLTJ6TTUgMTNoMnYySDV6TTE3IDE3aDJ2MmgtMnpNMTMgNWgydjJoLTJ6TTkgMTdoMnYySDl6TTE3IDloMnYyaC0yek0xNyAxM2gydjJoLTJ6TTE3IDVoMnYyaC0yek01IDloMnYySDV6TTUgNWgydjJINXpNOSA1aDJ2Mkg5elwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbjwvc3ZnPlxyXG5cclxuYDtcclxuZXhwb3J0IGNvbnN0IEVxdWFsID0gYFxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgPHBhdGggZD1cIk01IDEzLjVoMTR2Mkg1ek01IDguNWgxNHYySDV6XCIvPlxyXG48L3N2Zz5cclxuXHJcbmA7XHJcbmV4cG9ydCBjb25zdCBHcmVhdGVyVGhhbiA9IGBcclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgIDxwYXRoIGQ9XCJNNiA3LjExTDE1LjA5IDEyIDYgMTYuODlWMTlsMTItNi40NnYtMS4wOEw2IDV2Mi4xMXpcIi8+XHJcbjwvc3ZnPlxyXG5cclxuYDtcclxuZXhwb3J0IGNvbnN0IFRleHRDb250YWlucyA9IGBcclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgIDxwYXRoIGQ9XCJNMTAuNzkgMTIuNzdhMS4xNiAxLjE2IDAgMDAtLjQ0LjkuOTIuOTIgMCAwMC4zLjcyIDEuMTggMS4xOCAwIDAwLjg0LjI3IDIuMjcgMi4yNyAwIDAwMS4yMS0uMzQgMS42MSAxLjYxIDAgMDAuNzEtLjc3di0xLjE3SDEyYTEuNzYgMS43NiAwIDAwLTEuMjEuMzl6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTUgMTloMTRWNUg1em04LTkuMzZhMS40NSAxLjQ1IDAgMDAtMS0uMzUgMS41IDEuNSAwIDAwLTEgLjI5LjkzLjkzIDAgMDAtLjM1Ljc1SDlhMS45MyAxLjkzIDAgMDEuODMtMS42NSAzLjU0IDMuNTQgMCAwMTIuMy0uNzIgMy4zNCAzLjM0IDAgMDEyLjIyLjcgMi40NCAyLjQ0IDAgMDEuODQgMnYzLjVhNS41NyA1LjU3IDAgMDAuMDcuOTMgNC41MSA0LjUxIDAgMDAuMjEuODhoLTEuODNjLS4wNi0uMi0uMTItLjM5LS4xNi0uNThhMy43MiAzLjcyIDAgMDEtLjA4LS41NyAzLjA1IDMuMDUgMCAwMS0xIC45MyAyLjM5IDIuMzkgMCAwMS0xLjMyLjM3IDIuNjMgMi42MyAwIDAxLTEuODktLjYzIDIuMjkgMi4yOSAwIDAxLS42Ni0xLjc0IDIuMDcgMi4wNyAwIDAxLjktMS43OEE0LjM5IDQuMzkgMCAwMTEyIDExLjNoMS4zOHYtLjY5YTEuMyAxLjMgMCAwMC0uMzgtLjk3elwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0zIDN2MThoMThWM3ptMTYgMTZINVY1aDE0elwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTIgMTEuM2E0LjM5IDQuMzkgMCAwMC0yLjU0LjYzIDIuMDcgMi4wNyAwIDAwLS45IDEuNzggMi4yOSAyLjI5IDAgMDAuNjYgMS43NCAyLjYzIDIuNjMgMCAwMDEuODkuNjMgMi4zOSAyLjM5IDAgMDAxLjMyLS4zNyAzLjA1IDMuMDUgMCAwMDEtLjkzIDMuNzIgMy43MiAwIDAwLjA4LjU3YzAgLjE5LjEuMzguMTYuNThoMS43OWE0LjUxIDQuNTEgMCAwMS0uMjEtLjg4IDUuNTcgNS41NyAwIDAxLS4wNy0uOTN2LTMuNWEyLjQ0IDIuNDQgMCAwMC0uODQtMiAzLjM0IDMuMzQgMCAwMC0yLjIyLS43IDMuNTQgMy41NCAwIDAwLTIuMy43MkExLjkzIDEuOTMgMCAwMDkgMTAuMjloMS43MWEuOTMuOTMgMCAwMS4yOS0uNzEgMS41IDEuNSAwIDAxMS0uMjkgMS40NSAxLjQ1IDAgMDExIC4zNSAxLjMgMS4zIDAgMDEuMzcgMXYuNjl6bTEuNCAxLjA4djEuMTdhMS42MSAxLjYxIDAgMDEtLjcxLjc3IDIuMjcgMi4yNyAwIDAxLTEuMjEuMzQgMS4xOCAxLjE4IDAgMDEtLjg0LS4yNy45Mi45MiAwIDAxLS4zLS43MiAxLjE2IDEuMTYgMCAwMS40NC0uOSAxLjc2IDEuNzYgMCAwMTEuMjItLjM5elwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbjwvc3ZnPlxyXG5cclxuYDtcclxuZXhwb3J0IGNvbnN0IFRvcDEwID0gYFxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgPHBhdGggZD1cIk0xNy4zNCA3LjE0YS41LjUgMCAwMC0uMTMuMzN2LjMzYS40OC40OCAwIDAwLjEzLjMzLjQxLjQxIDAgMDAuMzEuMTQuMzcuMzcgMCAwMC40Mi0uMzd2LS40MWEuNDkuNDkgMCAwMC0uMDctLjM0LjQ1LjQ1IDAgMDAtLjYyIDB6TTEwLjg0IDhhLjU0LjU0IDAgMDAuNTEtLjMgMi4wNSAyLjA1IDAgMDAuMTctLjkyVjUuM2EyIDIgMCAwMC0uMTctLjk0LjYuNiAwIDAwLTEgMCAyLjEzIDIuMTMgMCAwMC0uMTcuODhWNi43YTIuMTQgMi4xNCAwIDAwLjE3IDEgLjU1LjU1IDAgMDAuNDkuM3pNMTQuODggNWMuMjggMCAuNDItLjE4LjQyLS41M3YtLjI2YS41My41MyAwIDAwLS4xMS0uMzQuNC40IDAgMDAtLjMyLS4xNC40Mi40MiAwIDAwLS4zMS4xMy41Mi41MiAwIDAwLS4xMi4zNnYuMjlhLjQ5LjQ5IDAgMDAuMTIuMzQuMzkuMzkgMCAwMC4zMi4xNXpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNOSAxOGgydjNoMnYtM2gybC0zLTMtMyAzek00IDExaDE2djJINHpNNi4zOCA4LjkyaDEuMzZWMy4wOGgtLjEybC0yLjU3Ljg5VjVsMS4zMy0uMzl2NC4zMXpNMTAuODQgOWExLjg1IDEuODUgMCAwMDEuNS0uNjQgMi44MiAyLjgyIDAgMDAuNTMtMS44MlY1LjQ3YTIuNzYgMi43NiAwIDAwLS41NC0xLjgyIDEuODMgMS44MyAwIDAwLTEuNS0uNjUgMS44MyAxLjgzIDAgMDAtMS41LjY1IDIuNzggMi43OCAwIDAwLS41MyAxLjgydjEuMDdhMi43OSAyLjc5IDAgMDAuNTMgMS44MSAxLjg2IDEuODYgMCAwMDEuNTEuNjV6bS0uNjktMy43OWEyLjEzIDIuMTMgMCAwMS4xNy0uODguNi42IDAgMDExIDAgMiAyIDAgMDEuMTcuOTR2MS40N2EyLjA1IDIuMDUgMCAwMS0uMTcuOTIuNTkuNTkgMCAwMS0xIDAgMi4xNCAyLjE0IDAgMDEtLjE3LTF6TTE0Ljg4IDUuNzFhMS4zMSAxLjMxIDAgMDAuOTQtLjMzIDEuMTEgMS4xMSAwIDAwLjM1LS44NnYtLjI5YTEuMTkgMS4xOSAwIDAwLS4zNS0uOSAxLjMyIDEuMzIgMCAwMC0xLS4zMyAxLjM0IDEuMzQgMCAwMC0uOTUuMzMgMS4xNyAxLjE3IDAgMDAtLjM1Ljg4di4yOGExLjE2IDEuMTYgMCAwMC4zNi45IDEuNCAxLjQgMCAwMDEgLjMyem0tLjQ0LTEuNDlhLjUyLjUyIDAgMDEuMTItLjM2LjQyLjQyIDAgMDEuMzEtLjEzLjQuNCAwIDAxLjMyLjE0LjUzLjUzIDAgMDEuMTEuMzR2LjI0YzAgLjM1LS4xNC41My0uNDIuNTNhLjM5LjM5IDAgMDEtLjMyLS4xMy40OS40OSAwIDAxLS4xMi0uMzR6TTE1LjEzIDguNDhsMi44NS00LjU2LS42Mi0uMzItMi44NSA0LjU3LjYyLjMxek0xNi43IDYuNjJhMS4xIDEuMSAwIDAwLS4zNS44N3YuMjlhMS4xMiAxLjEyIDAgMDAuMzUuODkgMS4zNiAxLjM2IDAgMDAuOTUuMzMgMS4zMiAxLjMyIDAgMDAxLS4zM0ExLjE1IDEuMTUgMCAwMDE5IDcuOHYtLjI4YTEuMTcgMS4xNyAwIDAwLS4zNi0uOTEgMS41NCAxLjU0IDAgMDAtMS44OSAwem0xLjM4Ljg3di40MWEuMzcuMzcgMCAwMS0uNDIuMzcuNDEuNDEgMCAwMS0uMzEtLjE0LjQ4LjQ4IDAgMDEtLjEzLS4zM3YtLjMzYS41LjUgMCAwMS4xMy0uMzMuNDUuNDUgMCAwMS42MiAwIC40OS40OSAwIDAxLjExLjM1elwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbjwvc3ZnPlxyXG5cclxuYDtcclxuZXhwb3J0IGNvbnN0IFVuaXF1ZVZhbHVlcyA9IGBcclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTguOTQgMTAuNTZhMSAxIDAgMDAtLjM4Ljc5Ljc5Ljc5IDAgMDAuMjUuNjMgMS4wNiAxLjA2IDAgMDAuNzQuMjQgMS45IDEuOSAwIDAwMS4wNi0uMyAxLjQ4IDEuNDggMCAwMC42My0uNjd2LTFIMTBhMS41OCAxLjU4IDAgMDAtMS4wNi4zMXpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNOC45NCAxMC41NmExIDEgMCAwMC0uMzguNzkuNzkuNzkgMCAwMC4yNS42MyAxLjA2IDEuMDYgMCAwMC43NC4yNCAxLjkgMS45IDAgMDAxLjA2LS4zIDEuNDggMS40OCAwIDAwLjYzLS42N3YtMUgxMGExLjU4IDEuNTggMCAwMC0xLjA2LjMxelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0xMi43NiAxMS43NVY4LjY5QTIuMTYgMi4xNiAwIDAwMTIgNi45M2EyLjkzIDIuOTMgMCAwMC0xLjk0LS42MSAzLjA2IDMuMDYgMCAwMC0yIC42MyAxLjY5IDEuNjkgMCAwMC0uNzMgMS40NGgxLjVhLjgzLjgzIDAgMDEuMzEtLjY1IDEuMyAxLjMgMCAwMS44Ni0uMjIgMS4yMyAxLjIzIDAgMDEuOTEuMzEgMS4wNyAxLjA3IDAgMDEuMzIuODR2LjYxSDEwYTMuNzQgMy43NCAwIDAwLTIuMjIuNTZBMS43OCAxLjc4IDAgMDA3IDExLjM5YTIgMiAwIDAwLjU4IDEuNTIgMi4yNyAyLjI3IDAgMDAxLjY1LjU2IDIuMTIgMi4xMiAwIDAwMS4xNi0uMzMgMi43OSAyLjc5IDAgMDAuODMtLjgxIDQuMTcgNC4xNyAwIDAwLjA4LjQ5IDQuNzcgNC43NyAwIDAwLjEzLjUxSDEzYTQgNCAwIDAxLS4xOC0uNzYgNS41NSA1LjU1IDAgMDEtLjA2LS44MnptLTEuNTItLjVhMS40OCAxLjQ4IDAgMDEtLjYzLjY3IDEuOSAxLjkgMCAwMS0xLjA2LjMgMS4wNiAxLjA2IDAgMDEtLjc0LS4yMi43OS43OSAwIDAxLS4yNS0uNjMgMSAxIDAgMDEuMzgtLjc5IDEuNTggMS41OCAwIDAxMS4wNi0uMzVoMS4yNHpNNyAxOWgydjJIN3pNNyAxNWgydjJIN3pNMyAxNWgydjJIM3pNMTUgN2gydjJoLTJ6TTE1IDNoMnYyaC0yek0zIDE5aDJ2Mkgzek0xOSAxOWgydjJoLTJ6TTE5IDdoMnYyaC0yek0xNSAxOWgydjJoLTJ6TTE5IDNoMnYyaC0yek0xNSAxMWgydjJoLTJ6TTE5IDExaDJ2MmgtMnpNMTUgMTVoMnYyaC0yek0xOSAxNWgydjJoLTJ6TTExIDE5aDJ2MmgtMnpNMTEgMTVoMnYyaC0yek0xMSAzaDJ2MmgtMnpNNyAzaDJ2Mkg3ek0zIDNoMnYySDN6TTMgN2gydjJIM3pNMyAxMWgydjJIM3pcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuPC9zdmc+XHJcblxyXG5gO1xyXG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Output, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as charts from '../../../images/charts';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { ResizeObserver } from '@juggle/resize-observer';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@infragistics/igniteui-angular";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "../../pipes/svg.pipe";
|
|
9
|
+
export class IgxChartMenuComponent {
|
|
10
|
+
get width() {
|
|
11
|
+
return this.fullScreen ? this._width : 0.7 * this._width;
|
|
12
|
+
}
|
|
13
|
+
set width(value) {
|
|
14
|
+
this._width = value;
|
|
15
|
+
}
|
|
16
|
+
get height() {
|
|
17
|
+
return this.fullScreen ? this._height : 0.7 * this._height;
|
|
18
|
+
}
|
|
19
|
+
set height(value) {
|
|
20
|
+
this._height = value;
|
|
21
|
+
}
|
|
22
|
+
constructor(element) {
|
|
23
|
+
this.element = element;
|
|
24
|
+
this.onClose = new EventEmitter();
|
|
25
|
+
this.chartDialogResizeNotify = new Subject();
|
|
26
|
+
this.allCharts = [];
|
|
27
|
+
this.fullScreen = false;
|
|
28
|
+
this.isConfigAreaExpanded = false;
|
|
29
|
+
this.mainChartTypes = ['Column', 'Area', 'Bar', 'Line', 'Scatter', 'Pie'];
|
|
30
|
+
this.images = charts;
|
|
31
|
+
}
|
|
32
|
+
ngAfterViewInit() {
|
|
33
|
+
this.contentObserver = new ResizeObserver((args) => this.chartDialogResizeNotify.next(args));
|
|
34
|
+
this.contentObserver.observe(this.element.nativeElement);
|
|
35
|
+
this.createChart(this.currentChartType);
|
|
36
|
+
}
|
|
37
|
+
toggleFullScreen() {
|
|
38
|
+
this.fullScreen = !this.fullScreen;
|
|
39
|
+
}
|
|
40
|
+
hasAvailableChart(chartType) {
|
|
41
|
+
return this.allCharts.some(c => c.includes(chartType));
|
|
42
|
+
}
|
|
43
|
+
createChart(chartType) {
|
|
44
|
+
this.currentChartType = chartType;
|
|
45
|
+
this.title = chartType.split(/(?=[A-Z])/).toString().replace(',', ' ');
|
|
46
|
+
this.chartArea.clear();
|
|
47
|
+
this.chartDirective.chartFactory(chartType, this.chartArea);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
IgxChartMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxChartMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
+
IgxChartMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: IgxChartMenuComponent, selector: "igx-chart-menu", outputs: { onClose: "onClose" }, host: { properties: { "style.width.px": "this.width", "style.height.px": "this.height" } }, viewQueries: [{ propertyName: "chartArea", first: true, predicate: ["chartArea"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"header\">\r\n <span class=\"header-text\">\r\n {{ title }} Chart\r\n </span>\r\n <span class=\"action-buttons-wrapper\">\r\n <button igxButton=\"icon\" (click)=\"toggleFullScreen()\">\r\n <igx-icon class=\"material\">fullscreen{{fullScreen ? '_exit' : ''}}</igx-icon>\r\n </button>\r\n <button igxButton=\"icon\" (click)=\"onClose.emit()\">\r\n <igx-icon class=\"material\">close</igx-icon>\r\n </button>\r\n </span>\r\n</div>\r\n<div class=\"selection-area ig-scrollbar\">\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"chart-area\" [ngClass]=\"{'expanded': isConfigAreaExpanded}\">\r\n <ng-template #chartArea ></ng-template>\r\n </div>\r\n <div>\r\n <button igxButton=\"icon\" igxRipple (click)=\"isConfigAreaExpanded = !isConfigAreaExpanded\">\r\n <igx-icon family=\"material\">chevron_{{ isConfigAreaExpanded ? 'left': 'right'}}</igx-icon>\r\n </button>\r\n </div>\r\n <div #configArea [ngClass]=\"{'chart-config-area': true, 'opened': !isConfigAreaExpanded, 'closed': isConfigAreaExpanded }\">\r\n <div class=\"config-area-header\">\r\n <span>Chart Types</span>\r\n </div>\r\n <igx-divider class=\"divider\"></igx-divider>\r\n <div class=\"wrapper\" *ngFor=\"let chartType of mainChartTypes\">\r\n <ng-container *ngIf=\"hasAvailableChart(chartType)\">\r\n <div>{{chartType | titlecase}} Chart</div>\r\n <div class=\"types-section\">\r\n <ng-container *ngFor=\"let chart of allCharts\">\r\n <span *ngIf=\"chart.startsWith(chartType)\" class=\"types-section-btn\" title=\"{{chart}}\"\r\n [ngClass]=\"{'selected': chart === currentChartType}\" (click)=\"createChart(chart)\">\r\n <div [innerHTML]=\"images[chart] | svg\">\r\n </div>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <igx-divider></igx-divider>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".ig-chart-legend-items-list{height:20%;display:inline-flex;flex-wrap:wrap;margin-bottom:1rem}igx-chart-menu{display:flex;flex-flow:column;overflow:hidden;background-color:#fff;transition:width .2s ease-in-out,height .3s ease-in-out}.header{height:10%;background-color:#e0e0e0;display:flex;font-size:1.8rem}.header .action-buttons-wrapper{margin-left:auto;margin-right:10px;align-self:center}.header .header-text{margin-right:auto;align-self:center;margin-left:3rem}.selection-area{width:100%;height:90%;display:inline-flex;flex-flow:row}.selection-area,.selection-area .ig-scrollbar{--size: var(--ig-scrollbar-size, 8px);--thumb-background: var(--ig-scrollbar-thumb-background, hsla(var(--ig-gray-400), var(--ig-gray-a)));--track-background: var(--ig-scrollbar-track-background, hsla(var(--ig-gray-100), var(--ig-gray-a)))}.selection-area .chart-area{margin-top:1rem;overflow-y:hidden;overflow-x:hidden;width:100%}.selection-area .chart-config-area{transition:all;transition-duration:.3s;transition-timing-function:ease-in-out}.selection-area .chart-config-area.opened{width:25%;overflow-y:auto;overflow-x:hidden}.selection-area .chart-config-area.closed{width:0;transform:translate(100%)}.selection-area .chart-config-area .config-area-header{margin-bottom:3px;font-size:1rem;font-weight:700;text-align:center}.selection-area .chart-config-area .types-section-btn{width:40%;margin-right:5px;cursor:pointer}.selection-area .chart-config-area .types-section-btn.selected{opacity:.5}.selection-area .wrapper{padding:3px}.selection-area .wrapper .types-section{display:flex;flex-wrap:wrap}.selection-area .wrapper .igx-divider{margin:5px!important;background:black!important}\n"], dependencies: [{ kind: "directive", type: i1.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: i1.IgxDividerDirective, selector: "igx-divider", inputs: ["id", "role", "type", "middle", "vertical", "inset"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: i1.IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i3.SvgPipe, name: "svg" }], encapsulation: i0.ViewEncapsulation.None });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxChartMenuComponent, decorators: [{
|
|
53
|
+
type: Component,
|
|
54
|
+
args: [{ selector: 'igx-chart-menu', encapsulation: ViewEncapsulation.None, template: "<div class=\"header\">\r\n <span class=\"header-text\">\r\n {{ title }} Chart\r\n </span>\r\n <span class=\"action-buttons-wrapper\">\r\n <button igxButton=\"icon\" (click)=\"toggleFullScreen()\">\r\n <igx-icon class=\"material\">fullscreen{{fullScreen ? '_exit' : ''}}</igx-icon>\r\n </button>\r\n <button igxButton=\"icon\" (click)=\"onClose.emit()\">\r\n <igx-icon class=\"material\">close</igx-icon>\r\n </button>\r\n </span>\r\n</div>\r\n<div class=\"selection-area ig-scrollbar\">\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"chart-area\" [ngClass]=\"{'expanded': isConfigAreaExpanded}\">\r\n <ng-template #chartArea ></ng-template>\r\n </div>\r\n <div>\r\n <button igxButton=\"icon\" igxRipple (click)=\"isConfigAreaExpanded = !isConfigAreaExpanded\">\r\n <igx-icon family=\"material\">chevron_{{ isConfigAreaExpanded ? 'left': 'right'}}</igx-icon>\r\n </button>\r\n </div>\r\n <div #configArea [ngClass]=\"{'chart-config-area': true, 'opened': !isConfigAreaExpanded, 'closed': isConfigAreaExpanded }\">\r\n <div class=\"config-area-header\">\r\n <span>Chart Types</span>\r\n </div>\r\n <igx-divider class=\"divider\"></igx-divider>\r\n <div class=\"wrapper\" *ngFor=\"let chartType of mainChartTypes\">\r\n <ng-container *ngIf=\"hasAvailableChart(chartType)\">\r\n <div>{{chartType | titlecase}} Chart</div>\r\n <div class=\"types-section\">\r\n <ng-container *ngFor=\"let chart of allCharts\">\r\n <span *ngIf=\"chart.startsWith(chartType)\" class=\"types-section-btn\" title=\"{{chart}}\"\r\n [ngClass]=\"{'selected': chart === currentChartType}\" (click)=\"createChart(chart)\">\r\n <div [innerHTML]=\"images[chart] | svg\">\r\n </div>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <igx-divider></igx-divider>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".ig-chart-legend-items-list{height:20%;display:inline-flex;flex-wrap:wrap;margin-bottom:1rem}igx-chart-menu{display:flex;flex-flow:column;overflow:hidden;background-color:#fff;transition:width .2s ease-in-out,height .3s ease-in-out}.header{height:10%;background-color:#e0e0e0;display:flex;font-size:1.8rem}.header .action-buttons-wrapper{margin-left:auto;margin-right:10px;align-self:center}.header .header-text{margin-right:auto;align-self:center;margin-left:3rem}.selection-area{width:100%;height:90%;display:inline-flex;flex-flow:row}.selection-area,.selection-area .ig-scrollbar{--size: var(--ig-scrollbar-size, 8px);--thumb-background: var(--ig-scrollbar-thumb-background, hsla(var(--ig-gray-400), var(--ig-gray-a)));--track-background: var(--ig-scrollbar-track-background, hsla(var(--ig-gray-100), var(--ig-gray-a)))}.selection-area .chart-area{margin-top:1rem;overflow-y:hidden;overflow-x:hidden;width:100%}.selection-area .chart-config-area{transition:all;transition-duration:.3s;transition-timing-function:ease-in-out}.selection-area .chart-config-area.opened{width:25%;overflow-y:auto;overflow-x:hidden}.selection-area .chart-config-area.closed{width:0;transform:translate(100%)}.selection-area .chart-config-area .config-area-header{margin-bottom:3px;font-size:1rem;font-weight:700;text-align:center}.selection-area .chart-config-area .types-section-btn{width:40%;margin-right:5px;cursor:pointer}.selection-area .chart-config-area .types-section-btn.selected{opacity:.5}.selection-area .wrapper{padding:3px}.selection-area .wrapper .types-section{display:flex;flex-wrap:wrap}.selection-area .wrapper .igx-divider{margin:5px!important;background:black!important}\n"] }]
|
|
55
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { chartArea: [{
|
|
56
|
+
type: ViewChild,
|
|
57
|
+
args: ['chartArea', { read: ViewContainerRef }]
|
|
58
|
+
}], onClose: [{
|
|
59
|
+
type: Output
|
|
60
|
+
}], width: [{
|
|
61
|
+
type: HostBinding,
|
|
62
|
+
args: ['style.width.px']
|
|
63
|
+
}], height: [{
|
|
64
|
+
type: HostBinding,
|
|
65
|
+
args: ['style.height.px']
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXItZXh0cmFzL3NyYy9saWIvY29udGV4dC1tZW51L2NoYXJ0LWRpYWxvZy9jaGFydC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci1leHRyYXMvc3JjL2xpYi9jb250ZXh0LW1lbnUvY2hhcnQtZGlhbG9nL2NoYXJ0LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUN4RCxNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBUXpELE1BQU0sT0FBTyxxQkFBcUI7SUFPOUIsSUFDVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFDVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBVyxNQUFNLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBZUQsWUFBb0IsT0FBd0I7UUFBeEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUEvQnJDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBa0JsQyw0QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTXhDLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixtQkFBYyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUt4RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRU0sZUFBZTtRQUVsQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksY0FBYyxDQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFNBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sV0FBVyxDQUFDLFNBQVM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7a0hBN0RRLHFCQUFxQjtzR0FBckIscUJBQXFCLHNRQUVFLGdCQUFnQiw2QkNkcEQsd3BFQTZDQTsyRkRqQ2EscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNJLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO2lHQUlzQixTQUFTO3NCQUFuRSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFHM0MsT0FBTztzQkFEYixNQUFNO2dCQUlJLEtBQUs7c0JBRGYsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBU2xCLE1BQU07c0JBRGhCLFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLFxyXG4gICAgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgY2hhcnRzIGZyb20gJy4uLy4uLy4uL2ltYWdlcy9jaGFydHMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2lneC1jaGFydC1tZW51JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGFydC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhcnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZ3hDaGFydE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdjaGFydEFyZWEnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHVibGljIGNoYXJ0QXJlYTogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aC5weCcpXHJcbiAgICBwdWJsaWMgZ2V0IHdpZHRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxTY3JlZW4gPyB0aGlzLl93aWR0aCA6IDAuNyAqIHRoaXMuX3dpZHRoO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCB3aWR0aCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKVxyXG4gICAgcHVibGljIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVsbFNjcmVlbiA/IHRoaXMuX2hlaWdodCA6IDAuNyAqIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgaGVpZ2h0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYXJ0RGlhbG9nUmVzaXplTm90aWZ5ID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHByaXZhdGUgY29udGVudE9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuICAgIHB1YmxpYyBpbWFnZXM7XHJcbiAgICBwdWJsaWMgY2hhcnREaXJlY3RpdmU7XHJcbiAgICBwdWJsaWMgY3VycmVudENoYXJ0VHlwZTtcclxuICAgIHB1YmxpYyB0aXRsZTtcclxuICAgIHB1YmxpYyBhbGxDaGFydHMgPSBbXTtcclxuICAgIHB1YmxpYyBmdWxsU2NyZWVuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNDb25maWdBcmVhRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtYWluQ2hhcnRUeXBlcyA9IFsnQ29sdW1uJywgJ0FyZWEnLCAnQmFyJywgJ0xpbmUnLCAnU2NhdHRlcicsICdQaWUnXTtcclxuICAgIHByaXZhdGUgX3dpZHRoO1xyXG4gICAgcHJpdmF0ZSBfaGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZXMgPSBjaGFydHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZW50T2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIgKCAoYXJncykgPT4gdGhpcy5jaGFydERpYWxvZ1Jlc2l6ZU5vdGlmeS5uZXh0KGFyZ3MpKTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCh0aGlzLmN1cnJlbnRDaGFydFR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVGdWxsU2NyZWVuKCkge1xyXG4gICAgICAgIHRoaXMuZnVsbFNjcmVlbiA9ICF0aGlzLmZ1bGxTY3JlZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc0F2YWlsYWJsZUNoYXJ0KGNoYXJ0VHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFsbENoYXJ0cy5zb21lKGMgPT4gYy5pbmNsdWRlcyhjaGFydFR5cGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQ2hhcnQoY2hhcnRUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnRUeXBlID0gY2hhcnRUeXBlO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBjaGFydFR5cGUuc3BsaXQoLyg/PVtBLVpdKS8pLnRvU3RyaW5nKCkucmVwbGFjZSgnLCcsICcgJyk7XHJcbiAgICAgICAgdGhpcy5jaGFydEFyZWEuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmNoYXJ0RGlyZWN0aXZlLmNoYXJ0RmFjdG9yeShjaGFydFR5cGUsIHRoaXMuY2hhcnRBcmVhKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10ZXh0XCI+XHJcbiAgICAgICAge3sgdGl0bGUgfX0gQ2hhcnRcclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMtd3JhcHBlclwiPlxyXG4gICAgICAgIDxidXR0b24gaWd4QnV0dG9uPVwiaWNvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5cclxuICAgICAgICAgICAgPGlneC1pY29uIGNsYXNzPVwibWF0ZXJpYWxcIj5mdWxsc2NyZWVue3tmdWxsU2NyZWVuID8gJ19leGl0JyA6ICcnfX08L2lneC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gaWd4QnV0dG9uPVwiaWNvblwiIChjbGljayk9XCJvbkNsb3NlLmVtaXQoKVwiPlxyXG4gICAgICAgICAgICA8aWd4LWljb24gY2xhc3M9XCJtYXRlcmlhbFwiPmNsb3NlPC9pZ3gtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tYXJlYSBpZy1zY3JvbGxiYXJcIj5cclxuICAgIDxpZ2MtdHJpYWwtd2F0ZXJtYXJrPjwvaWdjLXRyaWFsLXdhdGVybWFyaz5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1hcmVhXCIgW25nQ2xhc3NdPVwieydleHBhbmRlZCc6IGlzQ29uZmlnQXJlYUV4cGFuZGVkfVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hhcnRBcmVhID48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxidXR0b24gaWd4QnV0dG9uPVwiaWNvblwiIGlneFJpcHBsZSAoY2xpY2spPVwiaXNDb25maWdBcmVhRXhwYW5kZWQgPSAhaXNDb25maWdBcmVhRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cIm1hdGVyaWFsXCI+Y2hldnJvbl97eyBpc0NvbmZpZ0FyZWFFeHBhbmRlZCA/ICdsZWZ0JzogJ3JpZ2h0J319PC9pZ3gtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAjY29uZmlnQXJlYSBbbmdDbGFzc109XCJ7J2NoYXJ0LWNvbmZpZy1hcmVhJzogdHJ1ZSwgJ29wZW5lZCc6ICFpc0NvbmZpZ0FyZWFFeHBhbmRlZCwgJ2Nsb3NlZCc6IGlzQ29uZmlnQXJlYUV4cGFuZGVkIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWFyZWEtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPkNoYXJ0IFR5cGVzPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxpZ3gtZGl2aWRlciBjbGFzcz1cImRpdmlkZXJcIj48L2lneC1kaXZpZGVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCIgKm5nRm9yPVwibGV0IGNoYXJ0VHlwZSBvZiBtYWluQ2hhcnRUeXBlc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQXZhaWxhYmxlQ2hhcnQoY2hhcnRUeXBlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj57e2NoYXJ0VHlwZSB8IHRpdGxlY2FzZX19IENoYXJ0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZXMtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoYXJ0IG9mIGFsbENoYXJ0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2hhcnQuc3RhcnRzV2l0aChjaGFydFR5cGUpXCIgIGNsYXNzPVwidHlwZXMtc2VjdGlvbi1idG5cIiB0aXRsZT1cInt7Y2hhcnR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogY2hhcnQgPT09IGN1cnJlbnRDaGFydFR5cGV9XCIgKGNsaWNrKT1cImNyZWF0ZUNoYXJ0KGNoYXJ0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBbaW5uZXJIVE1MXT1cImltYWdlc1tjaGFydF0gfCBzdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aWd4LWRpdmlkZXI+PC9pZ3gtZGl2aWRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Component, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { AutoPositionStrategy, HorizontalAlignment, IgxToggleDirective, VerticalAlignment, IgxTabsComponent, CloseScrollStrategy } from '@infragistics/igniteui-angular';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { IgxChartMenuComponent } from './chart-dialog/chart-dialog.component';
|
|
6
|
+
import * as charts from '../../images/charts';
|
|
7
|
+
import * as conditions from '../../images/conditions';
|
|
8
|
+
import { CHART_TYPE } from '../directives/chart-integration/chart-types';
|
|
9
|
+
import 'igniteui-trial-watermark';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@infragistics/igniteui-angular";
|
|
12
|
+
import * as i2 from "@angular/common";
|
|
13
|
+
import * as i3 from "../pipes/svg.pipe";
|
|
14
|
+
export class IgxContextMenuComponent {
|
|
15
|
+
constructor(overlayService) {
|
|
16
|
+
this.overlayService = overlayService;
|
|
17
|
+
this.chartTypes = [];
|
|
18
|
+
this.textFormatters = [];
|
|
19
|
+
this.destroy$ = new Subject();
|
|
20
|
+
this._chartDialogOS = { closeOnOutsideClick: false };
|
|
21
|
+
this._tabsMenuOverlaySettings = {
|
|
22
|
+
closeOnOutsideClick: false,
|
|
23
|
+
modal: false,
|
|
24
|
+
outlet: null,
|
|
25
|
+
scrollStrategy: new CloseScrollStrategy(),
|
|
26
|
+
positionStrategy: new AutoPositionStrategy({
|
|
27
|
+
horizontalDirection: HorizontalAlignment.Center,
|
|
28
|
+
horizontalStartPoint: HorizontalAlignment.Center,
|
|
29
|
+
verticalStartPoint: VerticalAlignment.Bottom,
|
|
30
|
+
verticalDirection: VerticalAlignment.Bottom,
|
|
31
|
+
openAnimation: null,
|
|
32
|
+
closeAnimation: null
|
|
33
|
+
})
|
|
34
|
+
};
|
|
35
|
+
this._chartPreviewDialogOverlaySettings = {
|
|
36
|
+
closeOnOutsideClick: false,
|
|
37
|
+
modal: false,
|
|
38
|
+
outlet: null,
|
|
39
|
+
scrollStrategy: new CloseScrollStrategy(),
|
|
40
|
+
positionStrategy: new AutoPositionStrategy({
|
|
41
|
+
horizontalDirection: HorizontalAlignment.Center,
|
|
42
|
+
horizontalStartPoint: HorizontalAlignment.Center,
|
|
43
|
+
verticalStartPoint: VerticalAlignment.Top,
|
|
44
|
+
verticalDirection: VerticalAlignment.Top,
|
|
45
|
+
openAnimation: null,
|
|
46
|
+
closeAnimation: null
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
this.chartImages = charts;
|
|
50
|
+
this.conditionImages = conditions;
|
|
51
|
+
}
|
|
52
|
+
ngAfterViewInit() {
|
|
53
|
+
this.chartTypes = this.contextDirective.charts;
|
|
54
|
+
this.textFormatters = this.contextDirective.formatters;
|
|
55
|
+
if (this.contextDirective.chartsDirective) {
|
|
56
|
+
this.contextDirective.chartsDirective.onChartTypesDetermined.pipe(takeUntil(this.destroy$))
|
|
57
|
+
.subscribe((args) => this.chartTypes = args.chartsForCreation);
|
|
58
|
+
}
|
|
59
|
+
if (this.contextDirective.textFormatter) {
|
|
60
|
+
this.contextDirective.textFormatter.onFormattersReady.pipe(takeUntil(this.destroy$))
|
|
61
|
+
.subscribe(names => this.textFormatters = names);
|
|
62
|
+
}
|
|
63
|
+
this.contextDirective.onButtonClose.pipe(takeUntil(this.destroy$))
|
|
64
|
+
.subscribe(() => { if (this.tabsMenu && !this.tabsMenu.collapsed) {
|
|
65
|
+
this.tabsMenu.close();
|
|
66
|
+
} });
|
|
67
|
+
this.contextDirective.gridResizeNotify.pipe(takeUntil(this.destroy$))
|
|
68
|
+
.subscribe(() => {
|
|
69
|
+
if (!this.tabsMenu.collapsed) {
|
|
70
|
+
this.tabsMenu.close();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.tabsMenu.opening.pipe(takeUntil(this.destroy$))
|
|
74
|
+
.subscribe(() => {
|
|
75
|
+
if (this.tabs.selectedItem.disabled) {
|
|
76
|
+
debugger;
|
|
77
|
+
// const i = this.tabs.items.find(tab => !tab.disabled)?.index || 0;
|
|
78
|
+
// this.tabs.selectTab(this.tabs.tabs.toArray()[i], true);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
this.overlayService.opening.pipe(takeUntil(this.destroy$))
|
|
82
|
+
.subscribe((args) => {
|
|
83
|
+
if (args.componentRef) {
|
|
84
|
+
const instance = args.componentRef.instance;
|
|
85
|
+
instance.width = this.contextDirective.grid.nativeElement.clientWidth;
|
|
86
|
+
instance.height = this.contextDirective.grid.nativeElement.clientHeight;
|
|
87
|
+
instance.currentChartType = this.currentChartType;
|
|
88
|
+
instance.allCharts = this.chartTypes;
|
|
89
|
+
instance.chartDirective = this.contextDirective.chartsDirective;
|
|
90
|
+
instance.onClose?.subscribe(() => {
|
|
91
|
+
this.closeDialog();
|
|
92
|
+
});
|
|
93
|
+
instance.chartDialogResizeNotify?.subscribe(resizedContentArgs => {
|
|
94
|
+
// This is a temporary fix, which should be removed right after
|
|
95
|
+
// the overlay service is capable of notifying the overlay content elements
|
|
96
|
+
// that their children has been resized.
|
|
97
|
+
if (this.overlayService._overlayElement.children[1]) {
|
|
98
|
+
// tslint:disable-next-line: max-line-length
|
|
99
|
+
this.overlayService._overlayElement.children[1].children[0].style.width = resizedContentArgs[0].contentRect.width + 'px';
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.overlayService.closing.pipe(takeUntil(this.destroy$))
|
|
105
|
+
.subscribe((args) => {
|
|
106
|
+
if (args.componentRef && args.componentRef.instance instanceof IgxChartMenuComponent) {
|
|
107
|
+
if (this._dialogId) {
|
|
108
|
+
this.tabsMenu.open(this._tabsMenuOverlaySettings);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
ngOnDestroy() {
|
|
114
|
+
this.destroy$.next(true);
|
|
115
|
+
this.destroy$.complete();
|
|
116
|
+
}
|
|
117
|
+
toggleTabMenu() {
|
|
118
|
+
this.currentChartType = this.currentChartType ? this.currentChartType : CHART_TYPE.COLUMN_GROUPED;
|
|
119
|
+
this._tabsMenuOverlaySettings.target = this.button.nativeElement;
|
|
120
|
+
this.tabsMenu.collapsed ? this.tabsMenu.open(this._tabsMenuOverlaySettings) : this.tabsMenu.close();
|
|
121
|
+
}
|
|
122
|
+
formatCells(condition) {
|
|
123
|
+
this.currentFormatter = condition;
|
|
124
|
+
this.contextDirective.textFormatter.formatCells(condition);
|
|
125
|
+
}
|
|
126
|
+
clearFormat() {
|
|
127
|
+
this.contextDirective.textFormatter.clearFormatting();
|
|
128
|
+
this.currentFormatter = undefined;
|
|
129
|
+
}
|
|
130
|
+
previewChart(currentChartType) {
|
|
131
|
+
this.currentChartType = currentChartType;
|
|
132
|
+
this.chartPreview.clear();
|
|
133
|
+
this.contextDirective.chartsDirective.chartFactory(currentChartType, this.chartPreview);
|
|
134
|
+
this._chartPreviewDialogOverlaySettings.target = this.tabsMenu.element;
|
|
135
|
+
this.chartPreviewDialog.open(this._chartPreviewDialogOverlaySettings);
|
|
136
|
+
}
|
|
137
|
+
hidePreview() {
|
|
138
|
+
this.chartPreviewDialog.close();
|
|
139
|
+
}
|
|
140
|
+
openDialog(type) {
|
|
141
|
+
this.currentChartType = type ? type : this.currentChartType ? this.currentChartType : CHART_TYPE.COLUMN_GROUPED;
|
|
142
|
+
this._dialogId = this._dialogId ? this._dialogId :
|
|
143
|
+
this.overlayService.attach(IgxChartMenuComponent, this._chartDialogOS);
|
|
144
|
+
this.tabsMenu.close();
|
|
145
|
+
this.overlayService.show(this._dialogId);
|
|
146
|
+
}
|
|
147
|
+
closeDialog() {
|
|
148
|
+
const info = this.overlayService.getOverlayById(this._dialogId);
|
|
149
|
+
if (info) {
|
|
150
|
+
this.overlayService.hide(this._dialogId);
|
|
151
|
+
this.overlayService.detach(this._dialogId);
|
|
152
|
+
this._dialogId = undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
IgxContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxContextMenuComponent, deps: [{ token: i1.IgxOverlayService }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
+
IgxContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: IgxContextMenuComponent, selector: "igx-context-menu", viewQueries: [{ propertyName: "button", first: true, predicate: ["analyticsBtn"], descendants: true }, { propertyName: "tabsMenu", first: true, predicate: ["tabsMenu"], descendants: true, read: IgxToggleDirective }, { propertyName: "chartPreview", first: true, predicate: ["chartPreview"], descendants: true, read: ViewContainerRef }, { propertyName: "chartPreviewDialog", first: true, predicate: ["chartPreviewDialog"], descendants: true, read: IgxToggleDirective }, { propertyName: "tabs", first: true, predicate: IgxTabsComponent, descendants: true }], ngImport: i0, template: "<span #analyticsBtn class=\"analytics-btn\">\r\n <button #btn igxButton=\"icon\" (click)=\"toggleTabMenu()\">\r\n <igx-icon #icon class=\"icon\" family=\"material\">insert_chart_outlined</igx-icon>\r\n </button>\r\n</span>\r\n<div #tabsMenu igxToggle class=\"toggle-content ig-scrollbar\">\r\n <!--NOTE: This component has been updated by Infragistics migration: v12.0.0\r\nPlease check your template whether all bindings/event handlers are correct.-->\r\n <igx-tabs tabsType=\"fixed\" [selectedIndex]=\"!this.textFormatters.length && chartTypes.length ? 1 : 0\">\r\n <igx-tab-item [disabled]=\"!textFormatters.length\">\r\n <igx-tab-header>\r\n <span igxTabHeaderLabel>Conditional Formatting</span>\r\n </igx-tab-header>\r\n <igx-tab-content>\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"tabs\">\r\n <span class=\"tab-option\">\r\n <span *ngFor=\"let condition of textFormatters\" class=\"action btn condition\"\r\n [ngClass]=\"{'selected--condition': condition === currentFormatter}\"\r\n (click)=\"formatCells(condition)\">\r\n <div class=\"imgSize\" [innerHTML]=\"conditionImages[condition.replace(' ', '')] | svg\">\r\n </div>\r\n <span class=\"name\">{{condition.replace('10', '10%')}}</span>\r\n </span>\r\n </span>\r\n <span class=\"clear action\"\r\n [ngClass]=\"{'disableButton': contextDirective.textFormatter ? !contextDirective.textFormatter.formatter : true }\"\r\n (click)=\"clearFormat()\">\r\n <div class=\"imgSize\" [innerHTML]=\"conditionImages['Clear'] | svg\">\r\n </div>\r\n <span class=\"btn name\">Clear All</span>\r\n </span>\r\n </div>\r\n </igx-tab-content>\r\n </igx-tab-item>\r\n <igx-tab-item [disabled]=\"!chartTypes.length\">\r\n <igx-tab-header>\r\n <span igxTabHeaderLabel>Create Chart</span>\r\n </igx-tab-header>\r\n <igx-tab-content>\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"tabs\">\r\n <span class=\"tab-option\">\r\n <span *ngFor=\"let chart of chartTypes | slice:0:4\" class=\"action btn chart\"\r\n [ngClass]=\"{'selected': chart === currentChartType}\" (mouseenter)=\"previewChart(chart)\"\r\n (mouseleave)=\"hidePreview()\" (click)=\"openDialog(chart)\">\r\n <span [innerHTML]=\"chartImages[chart] | svg\" class=\"imgSize\">\r\n </span>\r\n <span class=\"name\">{{chart}}</span>\r\n </span>\r\n </span>\r\n <span class=\"more-action chart\" [ngClass]=\"{'disableButton': !chartTypes.length}\"\r\n (click)=\"openDialog()\">\r\n <button class=\"more-btn more-icon\" igxButton=\"icon\" igxButtonBackground=\"#EBEBEB\"\r\n igxButtonColor=\"black\">\r\n <igx-icon class=\"icon\" family=\"material\">more_horiz</igx-icon>\r\n </button>\r\n <span class=\"name btn\">More...</span>\r\n </span>\r\n </div>\r\n </igx-tab-content>\r\n </igx-tab-item>\r\n </igx-tabs>\r\n</div>\r\n<div igxToggle #chartPreviewDialog class=\"chart-preview\">\r\n <div class=\"chart-preview-title\">\r\n <h5>Preview Chart</h5>\r\n </div>\r\n <div class=\"chart-preview-area\">\r\n <ng-template #chartPreview></ng-template>\r\n </div>\r\n</div>", styles: [".analytics-btn,.analytics-btn [igxButton=flat],.analytics-btn .igx-button--flat{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-400), .12));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.analytics-btn,.analytics-btn [igxButton=outlined],.analytics-btn .igx-button--outlined{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--hover-border-color: var(--igx-button-hover-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--focus-border-color: var(--igx-button-focus-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--focus-visible-border-color: var(--igx-button-focus-visible-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--active-border-color: var(--igx-button-active-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--disabled-border-color: var(--igx-button-disabled-border-color, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-400), .12));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.analytics-btn,.analytics-btn [igxButton=raised],.analytics-btn .igx-button--raised{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-2));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-4));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-8));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-8));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-300), var(--ig-secondary-a)));--active-foreground: var(--igx-button-active-foreground, var(--ig-secondary-300-contrast));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-2));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-4));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-8));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-8))}.analytics-btn,.analytics-btn [igxButton=fab],.analytics-btn .igx-button--fab{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-6));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-12));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-12));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-12));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-300), var(--ig-secondary-a)));--active-foreground: var(--igx-button-active-foreground, var(--ig-secondary-300-contrast));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-6));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-12));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-12));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-12))}.analytics-btn,.analytics-btn [igxButton=icon],.analytics-btn .igx-button--icon{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--focus-visible-border-color: var(--igx-button-focus-visible-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--active-border-color: var(--igx-button-active-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-gray-200), var(--ig-gray-a)));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-gray-900), var(--ig-gray-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.disableButton{opacity:.4;pointer-events:none}.clear,.more-action{display:flex;flex-flow:column;justify-content:center;border-left:1px solid #bdbdbd}.clear .btn,.clear .more-btn,.more-action .btn,.more-action .more-btn{width:68px;margin:0 0 7px;padding:0}.clear .more-btn,.more-action .more-btn{width:36px;height:36px;align-self:center;border-radius:20px}.clear .name,.more-action .name{font-size:.9rem;font-weight:400;text-align:center}.icon{pointer-events:none}.btn{display:inline-flex;flex-flow:column;align-items:center}.btn.condition{padding-right:16px}.btn.chart{padding-right:24px}.btn img,.btn span{pointer-events:none}.chart-preview{width:350px;height:300px;background-color:#fff;overflow:hidden}.chart-preview .chart-preview-title{margin:1rem;justify-content:center}.chart-preview .chart-preview-area{height:270px}::ng-deep .toggle-content{width:354px;max-width:358px;height:148px;background-color:#fff}::ng-deep .toggle-content,::ng-deep .toggle-content .ig-scrollbar{--size: var(--ig-scrollbar-size, 8px);--thumb-background: var(--ig-scrollbar-thumb-background, hsla(var(--ig-gray-400), var(--ig-gray-a)));--track-background: var(--ig-scrollbar-track-background, hsla(var(--ig-gray-100), var(--ig-gray-a)))}::ng-deep .toggle-content .tabs{display:flex!important;border:.2px solid;border-color:#d3d3d3}::ng-deep .toggle-content .tab-option{padding:.9rem;height:100px;width:358px;display:inline-flex;overflow-x:auto;overflow-y:hidden;white-space:nowrap;align-content:center}::ng-deep .toggle-content .tab-option .chartImgButton{width:48px;height:48px}::ng-deep .toggle-content .tab-option .imgSize,::ng-deep .toggle-content .clear.action .imgSize{width:36px;height:36px;align-self:center}::ng-deep .toggle-content .action{cursor:pointer;opacity:1}::ng-deep .toggle-content .action.selected{opacity:.62}::ng-deep .toggle-content .action.selected--condition{pointer-events:none;opacity:.62}\n"], dependencies: [{ kind: "directive", type: i1.IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i1.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: i1.IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "component", type: i1.IgxTabsComponent, selector: "igx-tabs", inputs: ["tabAlignment"] }, { kind: "component", type: i1.IgxTabItemComponent, selector: "igx-tab-item" }, { kind: "component", type: i1.IgxTabHeaderComponent, selector: "igx-tab-header" }, { kind: "component", type: i1.IgxTabContentComponent, selector: "igx-tab-content" }, { kind: "directive", type: i1.IgxTabHeaderLabelDirective, selector: "igx-tab-header-label,[igxTabHeaderLabel]" }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.SvgPipe, name: "svg" }] });
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: IgxContextMenuComponent, decorators: [{
|
|
159
|
+
type: Component,
|
|
160
|
+
args: [{ selector: 'igx-context-menu', template: "<span #analyticsBtn class=\"analytics-btn\">\r\n <button #btn igxButton=\"icon\" (click)=\"toggleTabMenu()\">\r\n <igx-icon #icon class=\"icon\" family=\"material\">insert_chart_outlined</igx-icon>\r\n </button>\r\n</span>\r\n<div #tabsMenu igxToggle class=\"toggle-content ig-scrollbar\">\r\n <!--NOTE: This component has been updated by Infragistics migration: v12.0.0\r\nPlease check your template whether all bindings/event handlers are correct.-->\r\n <igx-tabs tabsType=\"fixed\" [selectedIndex]=\"!this.textFormatters.length && chartTypes.length ? 1 : 0\">\r\n <igx-tab-item [disabled]=\"!textFormatters.length\">\r\n <igx-tab-header>\r\n <span igxTabHeaderLabel>Conditional Formatting</span>\r\n </igx-tab-header>\r\n <igx-tab-content>\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"tabs\">\r\n <span class=\"tab-option\">\r\n <span *ngFor=\"let condition of textFormatters\" class=\"action btn condition\"\r\n [ngClass]=\"{'selected--condition': condition === currentFormatter}\"\r\n (click)=\"formatCells(condition)\">\r\n <div class=\"imgSize\" [innerHTML]=\"conditionImages[condition.replace(' ', '')] | svg\">\r\n </div>\r\n <span class=\"name\">{{condition.replace('10', '10%')}}</span>\r\n </span>\r\n </span>\r\n <span class=\"clear action\"\r\n [ngClass]=\"{'disableButton': contextDirective.textFormatter ? !contextDirective.textFormatter.formatter : true }\"\r\n (click)=\"clearFormat()\">\r\n <div class=\"imgSize\" [innerHTML]=\"conditionImages['Clear'] | svg\">\r\n </div>\r\n <span class=\"btn name\">Clear All</span>\r\n </span>\r\n </div>\r\n </igx-tab-content>\r\n </igx-tab-item>\r\n <igx-tab-item [disabled]=\"!chartTypes.length\">\r\n <igx-tab-header>\r\n <span igxTabHeaderLabel>Create Chart</span>\r\n </igx-tab-header>\r\n <igx-tab-content>\r\n <igc-trial-watermark></igc-trial-watermark>\r\n <div class=\"tabs\">\r\n <span class=\"tab-option\">\r\n <span *ngFor=\"let chart of chartTypes | slice:0:4\" class=\"action btn chart\"\r\n [ngClass]=\"{'selected': chart === currentChartType}\" (mouseenter)=\"previewChart(chart)\"\r\n (mouseleave)=\"hidePreview()\" (click)=\"openDialog(chart)\">\r\n <span [innerHTML]=\"chartImages[chart] | svg\" class=\"imgSize\">\r\n </span>\r\n <span class=\"name\">{{chart}}</span>\r\n </span>\r\n </span>\r\n <span class=\"more-action chart\" [ngClass]=\"{'disableButton': !chartTypes.length}\"\r\n (click)=\"openDialog()\">\r\n <button class=\"more-btn more-icon\" igxButton=\"icon\" igxButtonBackground=\"#EBEBEB\"\r\n igxButtonColor=\"black\">\r\n <igx-icon class=\"icon\" family=\"material\">more_horiz</igx-icon>\r\n </button>\r\n <span class=\"name btn\">More...</span>\r\n </span>\r\n </div>\r\n </igx-tab-content>\r\n </igx-tab-item>\r\n </igx-tabs>\r\n</div>\r\n<div igxToggle #chartPreviewDialog class=\"chart-preview\">\r\n <div class=\"chart-preview-title\">\r\n <h5>Preview Chart</h5>\r\n </div>\r\n <div class=\"chart-preview-area\">\r\n <ng-template #chartPreview></ng-template>\r\n </div>\r\n</div>", styles: [".analytics-btn,.analytics-btn [igxButton=flat],.analytics-btn .igx-button--flat{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-400), .12));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.analytics-btn,.analytics-btn [igxButton=outlined],.analytics-btn .igx-button--outlined{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--hover-border-color: var(--igx-button-hover-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--focus-border-color: var(--igx-button-focus-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--focus-visible-border-color: var(--igx-button-focus-visible-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--active-border-color: var(--igx-button-active-border-color, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--disabled-border-color: var(--igx-button-disabled-border-color, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-400), .12));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-secondary-500), var(--ig-secondary-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.analytics-btn,.analytics-btn [igxButton=raised],.analytics-btn .igx-button--raised{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-2));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-4));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-8));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-8));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-300), var(--ig-secondary-a)));--active-foreground: var(--igx-button-active-foreground, var(--ig-secondary-300-contrast));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-2));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-4));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-8));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-8))}.analytics-btn,.analytics-btn [igxButton=fab],.analytics-btn .igx-button--fab{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, transparent);--focus-visible-border-color: var(--igx-button-focus-visible-border-color, transparent);--active-border-color: var(--igx-button-active-border-color, transparent);--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, hsla(var(--ig-gray-300), var(--ig-gray-a)));--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-6));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-12));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-12));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-12));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-secondary-300), var(--ig-secondary-a)));--active-foreground: var(--igx-button-active-foreground, var(--ig-secondary-300-contrast));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-6));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-12));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-12));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-12))}.analytics-btn,.analytics-btn [igxButton=icon],.analytics-btn .igx-button--icon{--shadow-color: var(--igx-button-shadow-color, transparent);--border-color: var(--igx-button-border-color, transparent);--hover-border-color: var(--igx-button-hover-border-color, transparent);--focus-border-color: var(--igx-button-focus-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--focus-visible-border-color: var(--igx-button-focus-visible-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--active-border-color: var(--igx-button-active-border-color, hsla(var(--ig-gray-400), var(--ig-gray-a)));--disabled-border-color: var(--igx-button-disabled-border-color, transparent);--disabled-background: var(--igx-button-disabled-background, transparent);--disabled-foreground: var(--igx-button-disabled-foreground, hsla(var(--ig-gray-500), var(--ig-gray-a)));--resting-elevation: var(--igx-button-resting-elevation, var(--ig-elevation-0));--hover-elevation: var(--igx-button-hover-elevation, var(--ig-elevation-0));--focus-elevation: var(--igx-button-focus-elevation, var(--ig-elevation-0));--active-elevation: var(--igx-button-active-elevation, var(--ig-elevation-0));--background: var(--igx-button-background, #335e3b);--foreground: var(--igx-button-foreground, #fff);--hover-background: var(--igx-button-hover-background, #459a55);--hover-foreground: var(--igx-button-hover-foreground, black);--focus-background: var(--igx-button-focus-background, #396a42);--focus-foreground: var(--igx-button-focus-foreground, white);--focus-visible-background: var(--igx-button-focus-visible-background, #396a42);--focus-visible-foreground: var(--igx-button-focus-visible-foreground, white);--active-background: var(--igx-button-active-background, hsla(var(--ig-gray-200), var(--ig-gray-a)));--active-foreground: var(--igx-button-active-foreground, hsla(var(--ig-gray-900), var(--ig-gray-a)));--border-radius: var(--igx-button-border-radius, 0);--resting-shadow: var(--igx-button-resting-shadow, var(--ig-elevation-0));--hover-shadow: var(--igx-button-hover-shadow, var(--ig-elevation-0));--focus-shadow: var(--igx-button-focus-shadow, var(--ig-elevation-0));--active-shadow: var(--igx-button-active-shadow, var(--ig-elevation-0))}.disableButton{opacity:.4;pointer-events:none}.clear,.more-action{display:flex;flex-flow:column;justify-content:center;border-left:1px solid #bdbdbd}.clear .btn,.clear .more-btn,.more-action .btn,.more-action .more-btn{width:68px;margin:0 0 7px;padding:0}.clear .more-btn,.more-action .more-btn{width:36px;height:36px;align-self:center;border-radius:20px}.clear .name,.more-action .name{font-size:.9rem;font-weight:400;text-align:center}.icon{pointer-events:none}.btn{display:inline-flex;flex-flow:column;align-items:center}.btn.condition{padding-right:16px}.btn.chart{padding-right:24px}.btn img,.btn span{pointer-events:none}.chart-preview{width:350px;height:300px;background-color:#fff;overflow:hidden}.chart-preview .chart-preview-title{margin:1rem;justify-content:center}.chart-preview .chart-preview-area{height:270px}::ng-deep .toggle-content{width:354px;max-width:358px;height:148px;background-color:#fff}::ng-deep .toggle-content,::ng-deep .toggle-content .ig-scrollbar{--size: var(--ig-scrollbar-size, 8px);--thumb-background: var(--ig-scrollbar-thumb-background, hsla(var(--ig-gray-400), var(--ig-gray-a)));--track-background: var(--ig-scrollbar-track-background, hsla(var(--ig-gray-100), var(--ig-gray-a)))}::ng-deep .toggle-content .tabs{display:flex!important;border:.2px solid;border-color:#d3d3d3}::ng-deep .toggle-content .tab-option{padding:.9rem;height:100px;width:358px;display:inline-flex;overflow-x:auto;overflow-y:hidden;white-space:nowrap;align-content:center}::ng-deep .toggle-content .tab-option .chartImgButton{width:48px;height:48px}::ng-deep .toggle-content .tab-option .imgSize,::ng-deep .toggle-content .clear.action .imgSize{width:36px;height:36px;align-self:center}::ng-deep .toggle-content .action{cursor:pointer;opacity:1}::ng-deep .toggle-content .action.selected{opacity:.62}::ng-deep .toggle-content .action.selected--condition{pointer-events:none;opacity:.62}\n"] }]
|
|
161
|
+
}], ctorParameters: function () { return [{ type: i1.IgxOverlayService }]; }, propDecorators: { button: [{
|
|
162
|
+
type: ViewChild,
|
|
163
|
+
args: ['analyticsBtn']
|
|
164
|
+
}], tabsMenu: [{
|
|
165
|
+
type: ViewChild,
|
|
166
|
+
args: ['tabsMenu', { read: IgxToggleDirective }]
|
|
167
|
+
}], chartPreview: [{
|
|
168
|
+
type: ViewChild,
|
|
169
|
+
args: ['chartPreview', { read: ViewContainerRef }]
|
|
170
|
+
}], chartPreviewDialog: [{
|
|
171
|
+
type: ViewChild,
|
|
172
|
+
args: ['chartPreviewDialog', { read: IgxToggleDirective }]
|
|
173
|
+
}], tabs: [{
|
|
174
|
+
type: ViewChild,
|
|
175
|
+
args: [IgxTabsComponent]
|
|
176
|
+
}] } });
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXItZXh0cmFzL3NyYy9saWIvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyLWV4dHJhcy9zcmMvbGliL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUUsbUJBQW1CLEVBRW5ELGtCQUFrQixFQUE4QixpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBbUIsbUJBQW1CLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7QUFDM00sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0sTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssVUFBVSxNQUFNLHlCQUF5QixDQUFDO0FBRXRELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RSxPQUFPLDBCQUEwQixDQUFDOzs7OztBQU9sQyxNQUFNLE9BQU8sdUJBQXVCO0lBK0NoQyxZQUFvQixjQUFpQztRQUFqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUF0QzlDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFHbkIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFPLENB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QUNJLGtCQUFrQjt3R0FNTSxNQUFNO3NCQUF2QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ21DLFFBQVE7c0JBQW5FLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUNXLFlBQVk7c0JBQXpFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNpQixrQkFBa0I7c0JBQXZGLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUk7c0JBQXZDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LCBBdXRvUG9zaXRpb25TdHJhdGVneSwgSG9yaXpvbnRhbEFsaWdubWVudCxcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICBJZ3hPdmVybGF5U2VydmljZSwgSWd4VG9nZ2xlRGlyZWN0aXZlLCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncywgVmVydGljYWxBbGlnbm1lbnQsIElneFRhYnNDb21wb25lbnQsIE92ZXJsYXlTZXR0aW5ncywgQ2xvc2VTY3JvbGxTdHJhdGVneSwgT3ZlcmxheUV2ZW50QXJncyB9IGZyb20gJ0BpbmZyYWdpc3RpY3MvaWduaXRldWktYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJZ3hDaGFydE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2NoYXJ0LWRpYWxvZy9jaGFydC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0ICogYXMgY2hhcnRzIGZyb20gJy4uLy4uL2ltYWdlcy9jaGFydHMnO1xyXG5pbXBvcnQgKiBhcyBjb25kaXRpb25zIGZyb20gJy4uLy4uL2ltYWdlcy9jb25kaXRpb25zJztcclxuaW1wb3J0IHsgSWd4Q29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuL2lneC1jb250ZXh0LW1lbnUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ0hBUlRfVFlQRSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2hhcnQtaW50ZWdyYXRpb24vY2hhcnQtdHlwZXMnO1xyXG5pbXBvcnQgJ2lnbml0ZXVpLXRyaWFsLXdhdGVybWFyayc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbnRleHQtbWVudScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbnRleHQtbWVudS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZ3hDb250ZXh0TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYW5hbHl0aWNzQnRuJykgcHVibGljIGJ1dHRvbjogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ3RhYnNNZW51JywgeyByZWFkOiBJZ3hUb2dnbGVEaXJlY3RpdmUgfSkgcHVibGljIHRhYnNNZW51OiBJZ3hUb2dnbGVEaXJlY3RpdmU7XHJcbiAgICBAVmlld0NoaWxkKCdjaGFydFByZXZpZXcnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHVibGljIGNoYXJ0UHJldmlldzogVmlld0NvbnRhaW5lclJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NoYXJ0UHJldmlld0RpYWxvZycsIHsgcmVhZDogSWd4VG9nZ2xlRGlyZWN0aXZlIH0pIHB1YmxpYyBjaGFydFByZXZpZXdEaWFsb2c6IElneFRvZ2dsZURpcmVjdGl2ZTtcclxuICAgIEBWaWV3Q2hpbGQoSWd4VGFic0NvbXBvbmVudCkgcHVibGljIHRhYnM6IElneFRhYnNDb21wb25lbnQ7XHJcblxyXG4gICAgcHVibGljIGNvbnRleHREaXJlY3RpdmU6IElneENvbnRleHRNZW51RGlyZWN0aXZlO1xyXG4gICAgcHVibGljIGNoYXJ0VHlwZXMgPSBbXTtcclxuICAgIHB1YmxpYyB0ZXh0Rm9ybWF0dGVycyA9IFtdO1xyXG4gICAgcHVibGljIGN1cnJlbnRDaGFydFR5cGU7XHJcbiAgICBwdWJsaWMgY3VycmVudEZvcm1hdHRlcjtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9kaWFsb2dJZDtcclxuICAgIHByaXZhdGUgX2NoYXJ0RGlhbG9nT1MgPSB7IGNsb3NlT25PdXRzaWRlQ2xpY2s6IGZhbHNlIH07XHJcblxyXG4gICAgcHJpdmF0ZSBfdGFic01lbnVPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcclxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiBmYWxzZSxcclxuICAgICAgICBtb2RhbDogZmFsc2UsXHJcbiAgICAgICAgb3V0bGV0OiBudWxsLFxyXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQ2xvc2VTY3JvbGxTdHJhdGVneSgpLFxyXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh7XHJcbiAgICAgICAgICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXIsXHJcbiAgICAgICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbERpcmVjdGlvbjogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxyXG4gICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogbnVsbFxyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBfY2hhcnRQcmV2aWV3RGlhbG9nT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogZmFsc2UsXHJcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxyXG4gICAgICAgIG91dGxldDogbnVsbCxcclxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IENsb3NlU2Nyb2xsU3RyYXRlZ3koKSxcclxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xyXG4gICAgICAgICAgICBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcixcclxuICAgICAgICAgICAgaG9yaXpvbnRhbFN0YXJ0UG9pbnQ6IEhvcml6b250YWxBbGlnbm1lbnQuQ2VudGVyLFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbFN0YXJ0UG9pbnQ6IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcclxuICAgICAgICAgICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LlRvcCxcclxuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IG51bGxcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHB1YmxpYyBjaGFydEltYWdlcztcclxuICAgIHB1YmxpYyBjb25kaXRpb25JbWFnZXM7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY2hhcnRJbWFnZXMgPSBjaGFydHM7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25JbWFnZXMgPSBjb25kaXRpb25zO1xyXG4gICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuY2hhcnRUeXBlcyA9IHRoaXMuY29udGV4dERpcmVjdGl2ZS5jaGFydHM7XHJcbiAgICAgICAgdGhpcy50ZXh0Rm9ybWF0dGVycyA9IHRoaXMuY29udGV4dERpcmVjdGl2ZS5mb3JtYXR0ZXJzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0RGlyZWN0aXZlLmNoYXJ0c0RpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHREaXJlY3RpdmUuY2hhcnRzRGlyZWN0aXZlLm9uQ2hhcnRUeXBlc0RldGVybWluZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PiB0aGlzLmNoYXJ0VHlwZXMgPSBhcmdzLmNoYXJ0c0ZvckNyZWF0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHREaXJlY3RpdmUudGV4dEZvcm1hdHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHREaXJlY3RpdmUudGV4dEZvcm1hdHRlci5vbkZvcm1hdHRlcnNSZWFkeS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUobmFtZXMgPT4gdGhpcy50ZXh0Rm9ybWF0dGVycyA9IG5hbWVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dERpcmVjdGl2ZS5vbkJ1dHRvbkNsb3NlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHsgaWYgKHRoaXMudGFic01lbnUgJiYgIXRoaXMudGFic01lbnUuY29sbGFwc2VkKSB7IHRoaXMudGFic01lbnUuY2xvc2UoKTsgfSB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0RGlyZWN0aXZlLmdyaWRSZXNpemVOb3RpZnkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWJzTWVudS5jb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJzTWVudS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50YWJzTWVudS5vcGVuaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICBpZiAodGhpcy50YWJzLnNlbGVjdGVkSXRlbS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGkgPSB0aGlzLnRhYnMuaXRlbXMuZmluZCh0YWIgPT4gIXRhYi5kaXNhYmxlZCk/LmluZGV4IHx8IDA7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnRhYnMuc2VsZWN0VGFiKHRoaXMudGFicy50YWJzLnRvQXJyYXkoKVtpXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLm9wZW5pbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFyZ3M6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IChhcmdzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBJZ3hDaGFydE1lbnVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLndpZHRoID0gdGhpcy5jb250ZXh0RGlyZWN0aXZlLmdyaWQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5oZWlnaHQgPSB0aGlzLmNvbnRleHREaXJlY3RpdmUuZ3JpZC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jdXJyZW50Q2hhcnRUeXBlID0gdGhpcy5jdXJyZW50Q2hhcnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmFsbENoYXJ0cyA9IHRoaXMuY2hhcnRUeXBlcztcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jaGFydERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dERpcmVjdGl2ZS5jaGFydHNEaXJlY3RpdmU7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uub25DbG9zZT8uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY2hhcnREaWFsb2dSZXNpemVOb3RpZnk/LnN1YnNjcmliZShyZXNpemVkQ29udGVudEFyZ3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCwgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWQgcmlnaHQgYWZ0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG92ZXJsYXkgc2VydmljZSBpcyBjYXBhYmxlIG9mIG5vdGlmeWluZyB0aGUgb3ZlcmxheSBjb250ZW50IGVsZW1lbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlaXIgY2hpbGRyZW4gaGFzIGJlZW4gcmVzaXplZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5vdmVybGF5U2VydmljZSBhcyBhbnkpLl9vdmVybGF5RWxlbWVudC5jaGlsZHJlblsxXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMub3ZlcmxheVNlcnZpY2UgYXMgYW55KS5fb3ZlcmxheUVsZW1lbnQuY2hpbGRyZW5bMV0uY2hpbGRyZW5bMF0uc3R5bGUud2lkdGggPSByZXNpemVkQ29udGVudEFyZ3NbMF0uY29udGVudFJlY3Qud2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuY2xvc2luZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChhcmdzOiBPdmVybGF5RXZlbnRBcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhcmdzLmNvbXBvbmVudFJlZiAmJiBhcmdzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBpbnN0YW5jZW9mIElneENoYXJ0TWVudUNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RpYWxvZ0lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJzTWVudS5vcGVuKHRoaXMuX3RhYnNNZW51T3ZlcmxheVNldHRpbmdzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZVRhYk1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnRUeXBlID0gdGhpcy5jdXJyZW50Q2hhcnRUeXBlID8gdGhpcy5jdXJyZW50Q2hhcnRUeXBlIDogQ0hBUlRfVFlQRS5DT0xVTU5fR1JPVVBFRDtcclxuICAgICAgICB0aGlzLl90YWJzTWVudU92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMudGFic01lbnUuY29sbGFwc2VkID8gdGhpcy50YWJzTWVudS5vcGVuKHRoaXMuX3RhYnNNZW51T3ZlcmxheVNldHRpbmdzKSA6IHRoaXMudGFic01lbnUuY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0Q2VsbHMoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybWF0dGVyID0gY29uZGl0aW9uO1xyXG4gICAgICAgIHRoaXMuY29udGV4dERpcmVjdGl2ZS50ZXh0Rm9ybWF0dGVyLmZvcm1hdENlbGxzKGNvbmRpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFyRm9ybWF0KCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dERpcmVjdGl2ZS50ZXh0Rm9ybWF0dGVyLmNsZWFyRm9ybWF0dGluZygpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1hdHRlciA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJldmlld0NoYXJ0KGN1cnJlbnRDaGFydFR5cGUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFydFR5cGUgPSBjdXJyZW50Q2hhcnRUeXBlO1xyXG4gICAgICAgIHRoaXMuY2hhcnRQcmV2aWV3LmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0RGlyZWN0aXZlLmNoYXJ0c0RpcmVjdGl2ZS5jaGFydEZhY3RvcnkoY3VycmVudENoYXJ0VHlwZSwgdGhpcy5jaGFydFByZXZpZXcpO1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0UHJldmlld0RpYWxvZ092ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLnRhYnNNZW51LmVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jaGFydFByZXZpZXdEaWFsb2cub3Blbih0aGlzLl9jaGFydFByZXZpZXdEaWFsb2dPdmVybGF5U2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWRlUHJldmlldygpIHtcclxuICAgICAgICB0aGlzLmNoYXJ0UHJldmlld0RpYWxvZy5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcGVuRGlhbG9nKHR5cGU/OiBDSEFSVF9UWVBFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnRUeXBlID0gdHlwZSA/IHR5cGUgOiB0aGlzLmN1cnJlbnRDaGFydFR5cGUgPyB0aGlzLmN1cnJlbnRDaGFydFR5cGUgOiBDSEFSVF9UWVBFLkNPTFVNTl9HUk9VUEVEO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ0lkID0gdGhpcy5fZGlhbG9nSWQgPyB0aGlzLl9kaWFsb2dJZCA6XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKElneENoYXJ0TWVudUNvbXBvbmVudCwgdGhpcy5fY2hhcnREaWFsb2dPUyk7XHJcbiAgICAgICAgdGhpcy50YWJzTWVudS5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2Uuc2hvdyh0aGlzLl9kaWFsb2dJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlRGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmdldE92ZXJsYXlCeUlkKHRoaXMuX2RpYWxvZ0lkKTtcclxuICAgICAgICBpZiAoaW5mbykge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fZGlhbG9nSWQpO1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9kaWFsb2dJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ0lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8c3BhbiAjYW5hbHl0aWNzQnRuIGNsYXNzPVwiYW5hbHl0aWNzLWJ0blwiPlxyXG4gICAgPGJ1dHRvbiAjYnRuIGlneEJ1dHRvbj1cImljb25cIiAoY2xpY2spPVwidG9nZ2xlVGFiTWVudSgpXCI+XHJcbiAgICAgICAgPGlneC1pY29uICNpY29uIGNsYXNzPVwiaWNvblwiIGZhbWlseT1cIm1hdGVyaWFsXCI+aW5zZXJ0X2NoYXJ0X291dGxpbmVkPC9pZ3gtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG48L3NwYW4+XHJcbjxkaXYgI3RhYnNNZW51IGlneFRvZ2dsZSBjbGFzcz1cInRvZ2dsZS1jb250ZW50IGlnLXNjcm9sbGJhclwiPlxyXG4gICAgPCEtLU5PVEU6IFRoaXMgY29tcG9uZW50IGhhcyBiZWVuIHVwZGF0ZWQgYnkgSW5mcmFnaXN0aWNzIG1pZ3JhdGlvbjogdjEyLjAuMFxyXG5QbGVhc2UgY2hlY2sgeW91ciB0ZW1wbGF0ZSB3aGV0aGVyIGFsbCBiaW5kaW5ncy9ldmVudCBoYW5kbGVycyBhcmUgY29ycmVjdC4tLT5cclxuICAgIDxpZ3gtdGFicyB0YWJzVHlwZT1cImZpeGVkXCIgW3NlbGVjdGVkSW5kZXhdPVwiIXRoaXMudGV4dEZvcm1hdHRlcnMubGVuZ3RoICYmIGNoYXJ0VHlwZXMubGVuZ3RoID8gMSA6IDBcIj5cclxuICAgICAgICA8aWd4LXRhYi1pdGVtIFtkaXNhYmxlZF09XCIhdGV4dEZvcm1hdHRlcnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxpZ3gtdGFiLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGlneFRhYkhlYWRlckxhYmVsPkNvbmRpdGlvbmFsIEZvcm1hdHRpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaWd4LXRhYi1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpZ3gtdGFiLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8aWdjLXRyaWFsLXdhdGVybWFyaz48L2lnYy10cmlhbC13YXRlcm1hcms+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFic1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFiLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIHRleHRGb3JtYXR0ZXJzXCIgY2xhc3M9XCJhY3Rpb24gYnRuIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLS1jb25kaXRpb24nOiBjb25kaXRpb24gPT09IGN1cnJlbnRGb3JtYXR0ZXJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXRDZWxscyhjb25kaXRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nU2l6ZVwiIFtpbm5lckhUTUxdPVwiY29uZGl0aW9uSW1hZ2VzW2NvbmRpdGlvbi5yZXBsYWNlKCcgJywgJycpXSB8IHN2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57e2NvbmRpdGlvbi5yZXBsYWNlKCcxMCcsICcxMCUnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xlYXIgYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlQnV0dG9uJzogY29udGV4dERpcmVjdGl2ZS50ZXh0Rm9ybWF0dGVyID8gIWNvbnRleHREaXJlY3RpdmUudGV4dEZvcm1hdHRlci5mb3JtYXR0ZXIgOiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGb3JtYXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nU2l6ZVwiIFtpbm5lckhUTUxdPVwiY29uZGl0aW9uSW1hZ2VzWydDbGVhciddIHwgc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBuYW1lXCI+Q2xlYXIgQWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2lneC10YWItY29udGVudD5cclxuICAgICAgICA8L2lneC10YWItaXRlbT5cclxuICAgICAgICA8aWd4LXRhYi1pdGVtIFtkaXNhYmxlZF09XCIhY2hhcnRUeXBlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGlneC10YWItaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gaWd4VGFiSGVhZGVyTGFiZWw+Q3JlYXRlIENoYXJ0PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2lneC10YWItaGVhZGVyPlxyXG4gICAgICAgICAgICA8aWd4LXRhYi1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGlnYy10cmlhbC13YXRlcm1hcms+PC9pZ2MtdHJpYWwtd2F0ZXJtYXJrPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYi1vcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGNoYXJ0IG9mIGNoYXJ0VHlwZXMgfCBzbGljZTowOjRcIiBjbGFzcz1cImFjdGlvbiBidG4gY2hhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IGNoYXJ0ID09PSBjdXJyZW50Q2hhcnRUeXBlfVwiIChtb3VzZWVudGVyKT1cInByZXZpZXdDaGFydChjaGFydClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZVByZXZpZXcoKVwiIChjbGljayk9XCJvcGVuRGlhbG9nKGNoYXJ0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJjaGFydEltYWdlc1tjaGFydF0gfCBzdmdcIiBjbGFzcz1cImltZ1NpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZVwiPnt7Y2hhcnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vcmUtYWN0aW9uIGNoYXJ0XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlQnV0dG9uJzogIWNoYXJ0VHlwZXMubGVuZ3RofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1vcmUtYnRuIG1vcmUtaWNvblwiIGlneEJ1dHRvbj1cImljb25cIiBpZ3hCdXR0b25CYWNrZ3JvdW5kPVwiI0VCRUJFQlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ3hCdXR0b25Db2xvcj1cImJsYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gY2xhc3M9XCJpY29uXCIgZmFtaWx5PVwibWF0ZXJpYWxcIj5tb3JlX2hvcml6PC9pZ3gtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZSBidG5cIj5Nb3JlLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2lneC10YWItY29udGVudD5cclxuICAgICAgICA8L2lneC10YWItaXRlbT5cclxuICAgIDwvaWd4LXRhYnM+XHJcbjwvZGl2PlxyXG48ZGl2IGlneFRvZ2dsZSAjY2hhcnRQcmV2aWV3RGlhbG9nIGNsYXNzPVwiY2hhcnQtcHJldmlld1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LXByZXZpZXctdGl0bGVcIj5cclxuICAgICAgICA8aDU+UHJldmlldyBDaGFydDwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1wcmV2aWV3LWFyZWFcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2NoYXJ0UHJldmlldz48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|