@ptsecurity/mosaic 15.3.2 → 15.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/_theming.scss +675 -42
  2. package/_visual.scss +132 -42
  3. package/button/button.component.d.ts +1 -0
  4. package/button-toggle/_button-toggle-theme.scss +92 -0
  5. package/button-toggle/button-toggle.component.d.ts +6 -2
  6. package/button-toggle/button-toggle.module.d.ts +2 -1
  7. package/button-toggle/button-toggle.scss +109 -81
  8. package/core/styles/_mosaic-theme.scss +6 -0
  9. package/core/styles/theming/_components-theming.scss +92 -0
  10. package/core/utils/data-size/config.d.ts +20 -0
  11. package/core/utils/data-size/data-size.pipe.d.ts +13 -0
  12. package/core/utils/data-size/index.d.ts +3 -0
  13. package/core/utils/data-size/size.d.ts +16 -0
  14. package/core/utils/public-api.d.ts +1 -0
  15. package/ellipsis-center/ellipsis-center.directive.d.ts +27 -0
  16. package/ellipsis-center/index.d.ts +1 -0
  17. package/ellipsis-center/public-api.d.ts +1 -0
  18. package/esm2020/button/button.component.mjs +9 -7
  19. package/esm2020/button-toggle/button-toggle.component.mjs +28 -9
  20. package/esm2020/button-toggle/button-toggle.module.mjs +5 -4
  21. package/esm2020/core/utils/data-size/config.mjs +22 -0
  22. package/esm2020/core/utils/data-size/data-size.pipe.mjs +32 -0
  23. package/esm2020/core/utils/data-size/index.mjs +4 -0
  24. package/esm2020/core/utils/data-size/size.mjs +50 -0
  25. package/esm2020/core/utils/public-api.mjs +2 -1
  26. package/esm2020/core/version.mjs +2 -2
  27. package/esm2020/ellipsis-center/ellipsis-center.directive.mjs +106 -0
  28. package/esm2020/ellipsis-center/index.mjs +2 -0
  29. package/esm2020/ellipsis-center/ptsecurity-mosaic-ellipsis-center.mjs +5 -0
  30. package/esm2020/ellipsis-center/public-api.mjs +2 -0
  31. package/esm2020/file-upload/file-drop.mjs +43 -0
  32. package/esm2020/file-upload/file-upload.mjs +4 -0
  33. package/esm2020/file-upload/file-upload.module.mjs +66 -0
  34. package/esm2020/file-upload/index.mjs +2 -0
  35. package/esm2020/file-upload/multiple-file-upload.component.mjs +161 -0
  36. package/esm2020/file-upload/ptsecurity-mosaic-file-upload.mjs +5 -0
  37. package/esm2020/file-upload/public-api.mjs +6 -0
  38. package/esm2020/file-upload/single-file-upload.component.mjs +130 -0
  39. package/esm2020/select/select.component.mjs +5 -5
  40. package/esm2020/timezone/timezone-select.component.mjs +2 -2
  41. package/esm2020/tree-select/tree-select.component.mjs +8 -5
  42. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +31 -11
  43. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  44. package/fesm2015/ptsecurity-mosaic-button.mjs +9 -7
  45. package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
  46. package/fesm2015/ptsecurity-mosaic-core.mjs +101 -2
  47. package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
  48. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs +113 -0
  49. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs.map +1 -0
  50. package/fesm2015/ptsecurity-mosaic-file-upload.mjs +392 -0
  51. package/fesm2015/ptsecurity-mosaic-file-upload.mjs.map +1 -0
  52. package/fesm2015/ptsecurity-mosaic-select.mjs +4 -4
  53. package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
  54. package/fesm2015/ptsecurity-mosaic-timezone.mjs +2 -2
  55. package/fesm2015/ptsecurity-mosaic-timezone.mjs.map +1 -1
  56. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +7 -4
  57. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  58. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs +31 -11
  59. package/fesm2020/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  60. package/fesm2020/ptsecurity-mosaic-button.mjs +9 -7
  61. package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
  62. package/fesm2020/ptsecurity-mosaic-core.mjs +101 -2
  63. package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
  64. package/fesm2020/ptsecurity-mosaic-ellipsis-center.mjs +111 -0
  65. package/fesm2020/ptsecurity-mosaic-ellipsis-center.mjs.map +1 -0
  66. package/fesm2020/ptsecurity-mosaic-file-upload.mjs +388 -0
  67. package/fesm2020/ptsecurity-mosaic-file-upload.mjs.map +1 -0
  68. package/fesm2020/ptsecurity-mosaic-select.mjs +4 -4
  69. package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
  70. package/fesm2020/ptsecurity-mosaic-timezone.mjs +2 -2
  71. package/fesm2020/ptsecurity-mosaic-timezone.mjs.map +1 -1
  72. package/fesm2020/ptsecurity-mosaic-tree-select.mjs +7 -4
  73. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
  74. package/file-upload/README.md +0 -0
  75. package/file-upload/_file-upload-theme.scss +174 -0
  76. package/file-upload/file-drop.d.ts +11 -0
  77. package/file-upload/file-upload.d.ts +22 -0
  78. package/file-upload/file-upload.module.d.ts +18 -0
  79. package/file-upload/file-upload.scss +46 -0
  80. package/file-upload/index.d.ts +1 -0
  81. package/file-upload/multiple-file-upload.component.d.ts +51 -0
  82. package/file-upload/multiple-file-upload.component.scss +148 -0
  83. package/file-upload/public-api.d.ts +5 -0
  84. package/file-upload/single-file-upload.component.d.ts +34 -0
  85. package/file-upload/single-file-upload.component.scss +60 -0
  86. package/package.json +18 -2
  87. package/prebuilt-themes/dark-theme.css +1 -1
  88. package/prebuilt-themes/default-theme.css +1 -1
  89. package/select/_select-theme.scss +6 -0
  90. package/select/select.component.d.ts +1 -1
  91. package/select/select.scss +13 -0
  92. package/tree-select/_tree-select-theme.scss +6 -0
  93. package/tree-select/tree-select.component.d.ts +2 -2
  94. package/tree-select/tree-select.scss +13 -0
@@ -9,47 +9,89 @@
9
9
  $tokens: meta.module-variables(tokens) !default;
10
10
 
11
11
  .mc-button-toggle-group {
12
- display: flex;
12
+ box-sizing: border-box;
13
+ display: inline-flex;
13
14
  flex-direction: row;
15
+ align-items: center;
16
+ gap: map.get($tokens, size-3xs);
17
+
18
+ border-width: var(
19
+ --mc-button-toggle-group-size-border-width,
20
+ map.get($tokens, button-toggle-group-size-border-width)
21
+ );
22
+ border-radius: var(
23
+ --mc-button-toggle-group-size-border-radius,
24
+ map.get($tokens, button-toggle-group-size-border-radius)
25
+ );
26
+ border-style: solid;
27
+ padding: var(
28
+ --mc-button-toggle-group-size-padding,
29
+ map.get($tokens, button-toggle-group-size-padding)
30
+ );
14
31
 
15
32
  .mc-button-toggle {
16
- &:first-of-type:not(:last-of-type) {
17
- > .mc-button,
18
- > .mc-icon-button {
19
- @include common.border-right-radius(
20
- var(
21
- --mc-button-toggle-size-border-siblings-radius,
22
- map.get($tokens, button-toggle-size-border-siblings-radius)
23
- )
24
- );
25
- @include common.border-left-radius(
26
- var(--mc-button-toggle-size-border-radius, map.get($tokens, button-toggle-size-border-radius))
27
- );
33
+ display: flex;
34
+ overflow: hidden;
35
+ justify-content: flex-start;
36
+
37
+ border-radius: var(
38
+ --mc-button-toggle-size-border-radius,
39
+ map.get($tokens, button-toggle-size-border-radius)
40
+ );
41
+
42
+ > .mc-button,
43
+ > .mc-icon-button {
44
+ border: none;
45
+ border-width: var(
46
+ --mc-button-toggle-size-border-width,
47
+ map.get($tokens, button-toggle-size-border-width)
48
+ );
49
+ border-radius: var(
50
+ --mc-button-toggle-size-border-radius,
51
+ map.get($tokens, button-toggle-size-border-radius)
52
+ );
53
+ min-width: var(
54
+ --mc-button-toggle-size-min-width,
55
+ map.get($tokens, button-toggle-size-min-width)
56
+ );
57
+ padding-left: var(
58
+ --mc-button-toggle-size-horizontal-padding,
59
+ map.get($tokens, button-toggle-size-horizontal-padding)
60
+ );
61
+ padding-right: var(
62
+ --mc-button-toggle-size-horizontal-padding,
63
+ map.get($tokens, button-toggle-size-horizontal-padding)
64
+ );
65
+
66
+ & .mc-button-wrapper {
67
+ width: 100%;
28
68
  }
29
- }
30
69
 
31
- &:last-of-type:not(:first-of-type) {
32
- > .mc-button,
33
- > .mc-icon-button {
34
- @include common.border-left-radius(
35
- var(
36
- --mc-button-toggle-size-border-siblings-radius,
37
- map.get($tokens, button-toggle-size-border-siblings-radius)
38
- )
39
- );
40
- @include common.border-right-radius(
41
- var(--mc-button-toggle-size-border-radius, map.get($tokens, button-toggle-size-border-radius))
42
- );
70
+ .mc-button-toggle-wrapper {
71
+ text-overflow: ellipsis;
72
+ overflow: hidden;
73
+ white-space: nowrap;
74
+ display: inline-block;
75
+ width: 100%;
76
+
77
+ .mc-icon {
78
+ line-height: 20px;
79
+ vertical-align: baseline;
80
+ }
43
81
  }
44
82
  }
45
83
 
46
- &:not(:first-of-type):not(:last-of-type) {
84
+ &.mc-button-toggle-icon-text {
47
85
  > .mc-button,
48
86
  > .mc-icon-button {
49
- border-radius: var(
50
- --mc-button-toggle-size-border-siblings-radius,
51
- map.get($tokens, button-toggle-size-border-siblings-radius)
52
- )
87
+ padding-left: var(
88
+ --mc-button-toggle-size-left-icon-padding,
89
+ map.get($tokens, button-toggle-size-left-icon-padding)
90
+ );
91
+
92
+ & .mc-icon {
93
+ margin-right: map.get($tokens, size-xxs);
94
+ }
53
95
  }
54
96
  }
55
97
 
@@ -59,10 +101,29 @@ $tokens: meta.module-variables(tokens) !default;
59
101
  }
60
102
 
61
103
  &:not(.mc-button-toggle_vertical) {
62
- .mc-button-toggle:not([disabled]) + .mc-button-toggle:not([disabled]) {
63
- margin-left:calc(
64
- -1 * var(--mc-button-toggle-size-border-size, #{map.get($tokens, button-toggle-size-border-size)})
65
- );
104
+ height: 32px;
105
+
106
+ .mc-button-toggle {
107
+ > .mc-button,
108
+ > .mc-icon-button {
109
+ height: 28px;
110
+ min-height: 28px;
111
+ }
112
+
113
+ &.mc-button-toggle-icon {
114
+ width: var(
115
+ --mc-icon-button-toggle-size-width,
116
+ map.get($tokens, icon-button-toggle-size-width)
117
+ );
118
+
119
+ > .mc-button,
120
+ > .mc-icon-button {
121
+ width: var(
122
+ --mc-icon-button-toggle-size-width,
123
+ map.get($tokens, icon-button-toggle-size-width)
124
+ );
125
+ }
126
+ }
66
127
  }
67
128
  }
68
129
  }
@@ -76,58 +137,25 @@ $tokens: meta.module-variables(tokens) !default;
76
137
  border-right: none;
77
138
  }
78
139
 
79
- .mc-button-toggle:not([disabled]) + .mc-button-toggle:not([disabled]) {
80
- margin-top: calc(
81
- -1 * var(--mc-button-toggle-size-border-size, #{map.get($tokens, button-toggle-size-border-size)})
82
- );
83
- }
84
-
85
140
  .mc-button-toggle {
86
- .mc-button,
87
- .mc-icon-button {
88
- width: 100%;
89
- }
90
-
91
- &:first-child:not(:last-child) {
92
- > .mc-button,
93
- > .mc-icon-button {
94
- @include common.border-bottom-radius(
95
- var(
96
- --mc-button-toggle-size-border-siblings-radius,
97
- map.get($tokens, button-toggle-size-border-siblings-radius)
98
- )
99
- );
100
- @include common.border-top-radius(
101
- var(--mc-button-toggle-size-border-radius, map.get($tokens, button-toggle-size-border-radius)));
102
- }
103
- }
141
+ width: 100%;
104
142
 
105
- &:last-child:not(:first-child) {
106
- > .mc-button,
107
- > .mc-icon-button {
108
- @include common.border-top-radius(
109
- var(
110
- --mc-button-toggle-size-border-siblings-radius,
111
- map.get($tokens, button-toggle-size-border-siblings-radius)
112
- )
113
- );
114
-
115
- @include common.border-bottom-radius(
116
- var(--mc-button-toggle-size-border-radius, map.get($tokens, button-toggle-size-border-radius)));
117
- }
118
- }
143
+ > .mc-button,
144
+ > .mc-icon-button {
145
+ width: 100%;
146
+ border-width: var(
147
+ --mc-button-toggle-size-border-width,
148
+ map.get($tokens, button-toggle-size-border-width)
149
+ );
119
150
 
120
- &:not(:first-child):not(:last-child) {
121
- > .mc-button,
122
- > .mc-icon-button {
123
- border-radius: var(
124
- --mc-button-toggle-size-border-siblings-radius,
125
- map.get($tokens, button-toggle-size-border-siblings-radius)
126
- )
127
- }
151
+ border-radius: var(
152
+ --mc-button-toggle-size-border-radius,
153
+ map.get($tokens, button-toggle-size-border-radius)
154
+ );
128
155
  }
129
156
  }
130
157
  }
158
+
131
159
  /* stylelint-enable no-descending-specificity */
132
160
 
133
161
  .mc-button-toggle-standalone {
@@ -8,6 +8,7 @@
8
8
  @use '../selection/pseudo-checkbox/pseudo-checkbox-theme' as *;
9
9
  @use '../../autocomplete/autocomplete-theme' as *;
10
10
  @use '../../button/button-theme' as *;
11
+ @use '../../button-toggle/button-toggle-theme' as *;
11
12
  @use '../../card/card-theme' as *;
12
13
  @use '../../checkbox/checkbox-theme' as *;
13
14
  @use '../../code-block/code-block-theme' as *;
@@ -46,6 +47,7 @@
46
47
  @use '../option/option-action-theme' as *;
47
48
  @use '../highlight/highlight-theme' as *;
48
49
  @use '../../dl/dl-theme' as *;
50
+ @use '../../file-upload/file-upload-theme' as *;
49
51
 
50
52
 
51
53
  @mixin mosaic-theme($theme) {
@@ -55,6 +57,7 @@
55
57
  @include mc-autocomplete-theme($theme);
56
58
  @include mc-badge-theme($theme);
57
59
  @include mc-button-theme($theme);
60
+ @include mc-button-toggle-theme($theme);
58
61
  @include mc-card-theme($theme);
59
62
  @include mc-checkbox-theme($theme);
60
63
  @include mc-code-block-theme($theme);
@@ -95,6 +98,7 @@
95
98
  @include mc-tree-select-theme($theme);
96
99
  @include mc-tree-theme($theme);
97
100
  @include mc-table-theme($theme);
101
+ @include mc-file-upload-theme($theme);
98
102
  }
99
103
 
100
104
 
@@ -113,6 +117,7 @@
113
117
  @include mc-alert-typography($config);
114
118
  @include mc-badge-typography($config);
115
119
  @include mc-button-typography($config);
120
+ @include mc-button-toggle-typography($config);
116
121
  @include mc-checkbox-typography($config);
117
122
  @include mc-code-block-typography($config);
118
123
  @include mc-datepicker-typography($config);
@@ -142,6 +147,7 @@
142
147
  @include mc-tree-select-typography($config);
143
148
  @include mc-tree-typography($config);
144
149
  @include mc-table-typography($config);
150
+ @include mc-file-upload-typography($config);
145
151
 
146
152
  @include mc-markdown-typography($md-config);
147
153
  }
@@ -148,6 +148,39 @@
148
148
  )
149
149
  );
150
150
 
151
+ $button-toggle: (
152
+ button-toggle-group: (
153
+ background: map-get($tokens, 'button-toggle-group-#{$scheme}-background'),
154
+ border: map-get($tokens, 'button-toggle-group-#{$scheme}-border'),
155
+ states: (
156
+ disabled: (
157
+ opacity: map-get($tokens, 'button-toggle-group-#{$scheme}-states-disabled-opacity')
158
+ )
159
+ ),
160
+ ),
161
+ button-toggle: (
162
+ color: map-get($tokens, 'button-toggle-#{$scheme}-color'),
163
+ icon: map-get($tokens, 'button-toggle-#{$scheme}-icon'),
164
+ states: (
165
+ disabled: (
166
+ opacity: map-get($tokens, 'button-toggle-#{$scheme}-states-disabled-opacity')
167
+ ),
168
+ hover: (
169
+ background: map-get($tokens, 'button-toggle-#{$scheme}-states-hover-background'),
170
+ icon: map-get($tokens, 'button-toggle-#{$scheme}-states-hover-icon')
171
+ ),
172
+ active: (
173
+ background: map-get($tokens, 'button-toggle-#{$scheme}-states-active-background'),
174
+ icon: map-get($tokens, 'button-toggle-#{$scheme}-states-active-icon')
175
+ ),
176
+ pressed: (
177
+ background: map-get($tokens, 'button-toggle-#{$scheme}-states-pressed-background'),
178
+ icon: map-get($tokens, 'button-toggle-#{$scheme}-states-pressed-icon')
179
+ )
180
+ )
181
+ )
182
+ );
183
+
151
184
  $card: (
152
185
  error: (
153
186
  vertical-line: map-get($tokens, 'card-#{$scheme}-error-vertical-line'),
@@ -353,6 +386,57 @@
353
386
  dd: map-get($tokens, 'description-list-#{$scheme}-dd')
354
387
  );
355
388
 
389
+ $file-upload: (
390
+ single: (
391
+ default: (
392
+ background: map-get($tokens, 'file-upload-#{$scheme}-single-default-background'),
393
+ border: map-get($tokens, 'file-upload-#{$scheme}-single-default-border'),
394
+ ),
395
+ states: (
396
+ error: (
397
+ background: map-get($tokens, 'file-upload-#{$scheme}-single-states-error-background'),
398
+ border: map-get($tokens, 'file-upload-#{$scheme}-single-states-error-border')
399
+ ),
400
+ progress: (
401
+ background: map-get($tokens, 'file-upload-#{$scheme}-single-states-progress-background'),
402
+ border: map-get($tokens, 'file-upload-#{$scheme}-single-states-progress-border')
403
+ ),
404
+ drag-n-drop: (
405
+ background: map-get($tokens, 'file-upload-#{$scheme}-single-states-drag-n-drop-background'),
406
+ border: map-get($tokens, 'file-upload-#{$scheme}-single-states-drag-n-drop-border')
407
+ ),
408
+ disabled: (
409
+ background: map-get($tokens, 'file-upload-#{$scheme}-single-states-disable-background'),
410
+ border: map-get($tokens, 'file-upload-#{$scheme}-single-states-disable-border')
411
+ )
412
+ )
413
+ ),
414
+ multiple: (
415
+ default: (
416
+ background: map-get($tokens, 'file-upload-#{$scheme}-multiple-default-background'),
417
+ border: map-get($tokens, 'file-upload-#{$scheme}-multiple-default-border'),
418
+ ),
419
+ states: (
420
+ error: (
421
+ background: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-error-background'),
422
+ border: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-error-border')
423
+ ),
424
+ progress: (
425
+ background: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-progress-background'),
426
+ border: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-progress-border')
427
+ ),
428
+ drag-n-drop: (
429
+ background: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-drag-n-drop-background'),
430
+ border: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-drag-n-drop-border')
431
+ ),
432
+ disabled: (
433
+ background: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-disable-background'),
434
+ border: map-get($tokens, 'file-upload-#{$scheme}-multiple-states-disable-border')
435
+ )
436
+ )
437
+ )
438
+ );
439
+
356
440
  $form-field: (
357
441
  border: map-get($tokens, 'form-field-#{$scheme}-border'),
358
442
  background: map-get($tokens, 'form-field-#{$scheme}-background'),
@@ -437,6 +521,11 @@
437
521
  state-focused-outline: map-get($tokens, 'link-#{$scheme}-state-focused-outline')
438
522
  );
439
523
 
524
+ $list: (
525
+ footer-background: map-get($tokens, 'list-#{$scheme}-footer-background'),
526
+ footer-divider: map-get($tokens, 'list-#{$scheme}-footer-divider'),
527
+ );
528
+
440
529
  $loader-overlay: (
441
530
  background: map-get($tokens, 'loader-overlay-#{$scheme}-background'),
442
531
 
@@ -694,18 +783,21 @@
694
783
  popup: $popup,
695
784
  badge: $badge,
696
785
  button: $button,
786
+ button-toggle: $button-toggle,
697
787
  card: $card,
698
788
  checkbox: $checkbox,
699
789
  code-block: $code-block,
700
790
  datepicker: $datepicker,
701
791
  divider: $divider,
702
792
  dl: $dl,
793
+ file-upload: $file-upload,
703
794
  form-field: $form-field,
704
795
  form-field-password-hint: $form-field-password-hint,
705
796
  form-field-hint: $form-field-hint,
706
797
  forms: $forms,
707
798
  icon: $icon,
708
799
  link: $link,
800
+ list: $list,
709
801
  loader-overlay: $loader-overlay,
710
802
  modal: $modal,
711
803
  markdown: $markdown,
@@ -0,0 +1,20 @@
1
+ export declare enum MeasurementSystem {
2
+ SI = "SI",
3
+ IEC = "IEC"
4
+ }
5
+ export declare const sizeUnitsConfig: {
6
+ defaultUnitSystem: MeasurementSystem;
7
+ defaultPrecision: number;
8
+ unitSystems: {
9
+ SI: {
10
+ abbreviations: string[];
11
+ base: number;
12
+ power: number;
13
+ };
14
+ IEC: {
15
+ abbreviations: string[];
16
+ base: number;
17
+ power: number;
18
+ };
19
+ };
20
+ };
@@ -0,0 +1,13 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { MeasurementSystem } from './config';
3
+ import * as i0 from "@angular/core";
4
+ export declare class McDataSizePipe implements PipeTransform {
5
+ transform(source: number, precision?: number, measurementSystem?: MeasurementSystem): string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<McDataSizePipe, never>;
7
+ static ɵpipe: i0.ɵɵPipeDeclaration<McDataSizePipe, "mcDataSize", false>;
8
+ }
9
+ export declare class McDataSizeModule {
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<McDataSizeModule, never>;
11
+ static ɵmod: i0.ɵɵNgModuleDeclaration<McDataSizeModule, [typeof McDataSizePipe], never, [typeof McDataSizePipe]>;
12
+ static ɵinj: i0.ɵɵInjectorDeclaration<McDataSizeModule>;
13
+ }
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './size';
3
+ export * from './data-size.pipe';
@@ -0,0 +1,16 @@
1
+ import { MeasurementSystem } from './config';
2
+ export declare const formatDataSize: (value: number, systemCode?: MeasurementSystem, precision?: number) => {
3
+ value: string;
4
+ unit: string;
5
+ };
6
+ /**
7
+ * Переводит байты в Кб, Мб, Гб
8
+ *
9
+ * @param value количество байт
10
+ * @param systemCode система измерения
11
+ * @param threshold нижний порог подсчета
12
+ */
13
+ export declare const getHumanizedBytes: (value: number, systemCode?: MeasurementSystem, threshold?: number) => {
14
+ result: number;
15
+ unit: string;
16
+ };
@@ -1 +1,2 @@
1
1
  export * from './utils';
2
+ export * from './data-size';
@@ -0,0 +1,27 @@
1
+ import { Directionality } from '@angular/cdk/bidi';
2
+ import { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';
3
+ import { ElementRef, OnInit, OnDestroy, NgZone, ViewContainerRef, Renderer2, AfterViewInit } from '@angular/core';
4
+ import { McTooltipTrigger } from '@ptsecurity/mosaic/tooltip';
5
+ import { Subject } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ export declare class McEllipsisCenterDirective extends McTooltipTrigger implements OnInit, AfterViewInit, OnDestroy {
8
+ private renderer;
9
+ set mcEllipsisCenter(value: string);
10
+ minVisibleLength: number;
11
+ readonly resizeStream: Subject<Event>;
12
+ private _mcEllipsisCenter;
13
+ private resizeSubscription;
14
+ private readonly debounceInterval;
15
+ constructor(overlay: Overlay, elementRef: ElementRef<HTMLElement>, ngZone: NgZone, scrollDispatcher: ScrollDispatcher, hostView: ViewContainerRef, scrollStrategy: any, direction: Directionality, renderer: Renderer2);
16
+ ngOnInit(): void;
17
+ ngAfterViewInit(): void;
18
+ ngOnDestroy(): void;
19
+ private refresh;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<McEllipsisCenterDirective, [null, null, null, null, null, null, { optional: true; }, null]>;
21
+ static ɵdir: i0.ɵɵDirectiveDeclaration<McEllipsisCenterDirective, "[mcEllipsisCenter]", never, { "mcEllipsisCenter": "mcEllipsisCenter"; "minVisibleLength": "minVisibleLength"; }, {}, never, never, false, never>;
22
+ }
23
+ export declare class McEllipsisCenterModule {
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<McEllipsisCenterModule, never>;
25
+ static ɵmod: i0.ɵɵNgModuleDeclaration<McEllipsisCenterModule, [typeof McEllipsisCenterDirective], never, [typeof McEllipsisCenterDirective]>;
26
+ static ɵinj: i0.ɵɵInjectorDeclaration<McEllipsisCenterModule>;
27
+ }
@@ -0,0 +1 @@
1
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './ellipsis-center.directive';
@@ -1,6 +1,6 @@
1
1
  import { FocusMonitor } from '@angular/cdk/a11y';
2
2
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, ViewEncapsulation, Renderer2, QueryList, ContentChildren, SkipSelf, Input } from '@angular/core';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, ViewEncapsulation, Renderer2, QueryList, ContentChildren, SkipSelf, Input, forwardRef } from '@angular/core';
4
4
  import { mixinColor, mixinTabIndex } from '@ptsecurity/mosaic/core';
5
5
  import { McIcon } from '@ptsecurity/mosaic/icon';
6
6
  import * as i0 from "@angular/core";
@@ -10,6 +10,10 @@ export const leftIconClassName = 'mc-icon_left';
10
10
  export const rightIconClassName = 'mc-icon_right';
11
11
  export const buttonLeftIconClassName = 'mc-icon-button_left';
12
12
  export const buttonRightIconClassName = 'mc-icon-button_right';
13
+ export const getNodesWithoutComments = (nodes) => {
14
+ const COMMENT_NODE = 8;
15
+ return Array.from(nodes).filter((node) => node.nodeType !== COMMENT_NODE);
16
+ };
13
17
  export class McButtonCssStyler {
14
18
  constructor(elementRef, renderer, cdr) {
15
19
  this.renderer = renderer;
@@ -24,9 +28,7 @@ export class McButtonCssStyler {
24
28
  this.renderer.removeClass(this.nativeElement, buttonLeftIconClassName);
25
29
  this.renderer.removeClass(this.nativeElement, buttonRightIconClassName);
26
30
  const twoIcons = 2;
27
- const COMMENT_NODE = 8;
28
- const filteredNodesWithoutComments = Array.from(this.nativeElement.querySelector('.mc-button-wrapper').childNodes)
29
- .filter((node) => node.nodeType !== COMMENT_NODE);
31
+ const filteredNodesWithoutComments = getNodesWithoutComments(this.nativeElement.querySelector('.mc-button-wrapper').childNodes);
30
32
  const currentIsIconButtonValue = !!this.icons.length &&
31
33
  this.icons.length === filteredNodesWithoutComments.length && this.icons.length <= twoIcons;
32
34
  if (currentIsIconButtonValue !== this.isIconButton) {
@@ -52,7 +54,7 @@ export class McButtonCssStyler {
52
54
  }
53
55
  }
54
56
  /** @nocollapse */ McButtonCssStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: McButtonCssStyler, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
55
- /** @nocollapse */ McButtonCssStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: McButtonCssStyler, selector: "[mc-button]", host: { properties: { "class.mc-button": "!isIconButton", "class.mc-icon-button": "isIconButton" } }, queries: [{ propertyName: "icons", predicate: McIcon, descendants: true }], ngImport: i0 });
57
+ /** @nocollapse */ McButtonCssStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: McButtonCssStyler, selector: "[mc-button]", host: { properties: { "class.mc-button": "!isIconButton", "class.mc-icon-button": "isIconButton" } }, queries: [{ propertyName: "icons", predicate: i0.forwardRef(function () { return McIcon; }) }], ngImport: i0 });
56
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: McButtonCssStyler, decorators: [{
57
59
  type: Directive,
58
60
  args: [{
@@ -66,7 +68,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
66
68
  type: SkipSelf
67
69
  }] }]; }, propDecorators: { icons: [{
68
70
  type: ContentChildren,
69
- args: [McIcon, { descendants: true }]
71
+ args: [(forwardRef(() => McIcon))]
70
72
  }] } });
71
73
  /** @docs-private */
72
74
  export class McButtonBase {
@@ -143,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
143
145
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: McButtonCssStyler }]; }, propDecorators: { disabled: [{
144
146
  type: Input
145
147
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFFVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBRWYsUUFBUSxFQUNSLEtBQUssRUFDUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLGFBQWEsRUFLaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFHakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxxQkFBcUIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxzQkFBc0IsQ0FBQztBQVMvRCxNQUFNLE9BQU8saUJBQWlCO0lBTzFCLFlBQVksVUFBc0IsRUFBVSxRQUFtQixFQUFzQixHQUFzQjtRQUEvRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQXNCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRjNHLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFD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RixpQkFBaUIsRUFBRSxrQkFBa0I7d0JBQ3JDLGlCQUFpQixFQUFFLFVBQVU7d0JBRTdCLFNBQVMsRUFBRSxpQkFBaUI7d0JBQzVCLFFBQVEsRUFBRSxVQUFVO3FCQUN2Qjt5SkFNRyxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIFJlbmRlcmVyMixcbiAgICBRdWVyeUxpc3QsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgU2tpcFNlbGYsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIG1peGluQ29sb3IsXG4gICAgbWl4aW5UYWJJbmRleCxcbiAgICBDYW5Db2xvcixcbiAgICBDYW5EaXNhYmxlLFxuICAgIENhbkNvbG9yQ3RvcixcbiAgICBIYXNUYWJJbmRleEN0b3Jcbn0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2NvcmUnO1xuaW1wb3J0IHsgTWNJY29uIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2ljb24nO1xuXG5cbmV4cG9ydCBjb25zdCBsZWZ0SWNvbkNsYXNzTmFtZSA9ICdtYy1pY29uX2xlZnQnO1xuZXhwb3J0IGNvbnN0IHJpZ2h0SWNvbkNsYXNzTmFtZSA9ICdtYy1pY29uX3JpZ2h0JztcblxuZXhwb3J0IGNvbnN0IGJ1dHRvbkxlZnRJY29uQ2xhc3NOYW1lID0gJ21jLWljb24tYnV0dG9uX2xlZnQnO1xuZXhwb3J0IGNvbnN0IGJ1dHRvblJpZ2h0SWNvbkNsYXNzTmFtZSA9ICdtYy1pY29uLWJ1dHRvbl9yaWdodCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21jLWJ1dHRvbl0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5tYy1idXR0b25dJzogJyFpc0ljb25CdXR0b24nLFxuICAgICAgICAnW2NsYXNzLm1jLWljb24tYnV0dG9uXSc6ICdpc0ljb25CdXR0b24nXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNY0J1dHRvbkNzc1N0eWxlciBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTWNJY29uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGljb25zOiBRdWVyeUxpc3Q8TWNJY29uPjtcblxuICAgIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgaXNJY29uQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIEBTa2lwU2VsZigpIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTW9kaWZpZXJGb3JJY29ucygpO1xuICAgIH1cblxuICAgIHVwZGF0ZUNsYXNzTW9kaWZpZXJGb3JJY29ucygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGJ1dHRvbkxlZnRJY29uQ2xhc3NOYW1lKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGJ1dHRvblJpZ2h0SWNvbkNsYXNzTmFtZSk7XG5cbiAgICAgICAgY29uc3QgdHdvSWNvbnMgPSAyO1xuICAgICAgICBjb25zdCBDT01NRU5UX05PREUgPSA4O1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzV2l0aG91dENvbW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWMtYnV0dG9uLXdyYXBwZXInKSEuY2hpbGROb2RlcyBhcyBOb2RlTGlzdFxuICAgICAgICApXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlKSA9PiBub2RlLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpO1xuICAgICAgICBjb25zdCBjdXJyZW50SXNJY29uQnV0dG9uVmFsdWUgPSAhIXRoaXMuaWNvbnMubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLmljb25zLmxlbmd0aCA9PT0gZmlsdGVyZWROb2Rlc1dpdGhvdXRDb21tZW50cy5sZW5ndGggJiYgdGhpcy5pY29ucy5sZW5ndGggPD0gdHdvSWNvbnM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJc0ljb25CdXR0b25WYWx1ZSAhPT0gdGhpcy5pc0ljb25CdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuaXNJY29uQnV0dG9uID0gY3VycmVudElzSWNvbkJ1dHRvblZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaWNvbnMubGVuZ3RoICYmIGZpbHRlcmVkTm9kZXNXaXRob3V0Q29tbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5pY29ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0SG9zdEVsZW1lbnQoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaWNvbkhvc3RFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCBsZWZ0SWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCByaWdodEljb25DbGFzc05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGljb25JbmRleCA9IGZpbHRlcmVkTm9kZXNXaXRob3V0Q29tbWVudHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUgPT09IGljb25Ib3N0RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpY29uSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCBsZWZ0SWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYnV0dG9uTGVmdEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGljb25JbmRleCA9PT0gZmlsdGVyZWROb2Rlc1dpdGhvdXRDb21tZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGljb25Ib3N0RWxlbWVudCwgcmlnaHRJY29uQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBidXR0b25SaWdodEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjbGFzcyBNY0J1dHRvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE1jQnV0dG9uTWl4aW5CYXNlOiBIYXNUYWJJbmRleEN0b3IgJiBDYW5Db2xvckN0b3IgJlxuICAgIHR5cGVvZiBNY0J1dHRvbkJhc2UgPSBtaXhpblRhYkluZGV4KG1peGluQ29sb3IoTWNCdXR0b25CYXNlKSk7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbbWMtYnV0dG9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGlucHV0czogWydjb2xvcicsICd0YWJJbmRleCddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1thdHRyLnRhYkluZGV4XSc6ICd0YWJJbmRleCcsXG5cbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE1jQnV0dG9uIGV4dGVuZHMgTWNCdXR0b25NaXhpbkJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENhbkRpc2FibGUsIENhbkNvbG9yIHtcbiAgICBoYXNGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnN0b3BGb2N1c01vbml0b3IoKSA6IHRoaXMucnVuRm9jdXNNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsIHByaXZhdGUgc3R5bGVyOiBNY0J1dHRvbkNzc1N0eWxlcikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLnJ1bkZvY3VzTW9uaXRvcigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN0b3BGb2N1c01vbml0b3IoKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKCRldmVudCkge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25CbHVyKCkge1xuICAgICAgICB0aGlzLmhhc0ZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9jdXNWaWFLZXlib2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5nZXRIb3N0RWxlbWVudCgpLCAna2V5Ym9hcmQnKTtcbiAgICB9XG5cbiAgICBoYWx0RGlzYWJsZWRFdmVudHMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2plY3RDb250ZW50Q2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5zdHlsZXIudXBkYXRlQ2xhc3NNb2RpZmllckZvckljb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5Gb2N1c01vbml0b3IoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcEZvY3VzTW9uaXRvcigpIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cIm1jLWJ1dHRvbi13cmFwcGVyXCIgKGNka09ic2VydmVDb250ZW50KT1cInByb2plY3RDb250ZW50Q2hhbmdlZCgpXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibWMtYnV0dG9uLW92ZXJsYXlcIiAoY2xpY2spPVwiaGFsdERpc2FibGVkRXZlbnRzKCRldmVudClcIj48L2Rpdj5cbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9idXR0b24vYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFFVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFNBQVMsRUFDVCxlQUFlLEVBRWYsUUFBUSxFQUNSLEtBQUssRUFBRSxVQUFVLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUtoQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUdqRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBRWxELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLHFCQUFxQixDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLHNCQUFzQixDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBZSxFQUFVLEVBQUU7SUFDL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElB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QUlBOzJGRDZIYSxRQUFRO2tCQWZwQixTQUFTOytCQUNJLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxVQUM3QixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFDdkI7d0JBQ0YsaUJBQWlCLEVBQUUsa0JBQWtCO3dCQUNyQyxpQkFBaUIsRUFBRSxVQUFVO3dCQUU3QixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixRQUFRLEVBQUUsVUFBVTtxQkFDdkI7eUpBTUcsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBSZW5kZXJlcjIsXG4gICAgUXVlcnlMaXN0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIFNraXBTZWxmLFxuICAgIElucHV0LCBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBtaXhpbkNvbG9yLFxuICAgIG1peGluVGFiSW5kZXgsXG4gICAgQ2FuQ29sb3IsXG4gICAgQ2FuRGlzYWJsZSxcbiAgICBDYW5Db2xvckN0b3IsXG4gICAgSGFzVGFiSW5kZXhDdG9yXG59IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcbmltcG9ydCB7IE1jSWNvbiB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9pY29uJztcblxuXG5leHBvcnQgY29uc3QgbGVmdEljb25DbGFzc05hbWUgPSAnbWMtaWNvbl9sZWZ0JztcbmV4cG9ydCBjb25zdCByaWdodEljb25DbGFzc05hbWUgPSAnbWMtaWNvbl9yaWdodCc7XG5cbmV4cG9ydCBjb25zdCBidXR0b25MZWZ0SWNvbkNsYXNzTmFtZSA9ICdtYy1pY29uLWJ1dHRvbl9sZWZ0JztcbmV4cG9ydCBjb25zdCBidXR0b25SaWdodEljb25DbGFzc05hbWUgPSAnbWMtaWNvbi1idXR0b25fcmlnaHQnO1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZXNXaXRob3V0Q29tbWVudHMgPSAobm9kZXM6IE5vZGVMaXN0KTogTm9kZVtdID0+IHtcbiAgICBjb25zdCBDT01NRU5UX05PREUgPSA4O1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKTtcbn07XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21jLWJ1dHRvbl0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5tYy1idXR0b25dJzogJyFpc0ljb25CdXR0b24nLFxuICAgICAgICAnW2NsYXNzLm1jLWljb24tYnV0dG9uXSc6ICdpc0ljb25CdXR0b24nXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNY0J1dHRvbkNzc1N0eWxlciBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIEBDb250ZW50Q2hpbGRyZW4oKGZvcndhcmRSZWYoKCkgPT4gTWNJY29uKSkpIGljb25zOiBRdWVyeUxpc3Q8TWNJY29uPjtcblxuICAgIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgaXNJY29uQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIEBTa2lwU2VsZigpIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzTW9kaWZpZXJGb3JJY29ucygpO1xuICAgIH1cblxuICAgIHVwZGF0ZUNsYXNzTW9kaWZpZXJGb3JJY29ucygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGJ1dHRvbkxlZnRJY29uQ2xhc3NOYW1lKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGJ1dHRvblJpZ2h0SWNvbkNsYXNzTmFtZSk7XG5cbiAgICAgICAgY29uc3QgdHdvSWNvbnMgPSAyO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzV2l0aG91dENvbW1lbnRzID0gZ2V0Tm9kZXNXaXRob3V0Q29tbWVudHMoXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1jLWJ1dHRvbi13cmFwcGVyJykhLmNoaWxkTm9kZXMgYXMgTm9kZUxpc3RcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50SXNJY29uQnV0dG9uVmFsdWUgPSAhIXRoaXMuaWNvbnMubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLmljb25zLmxlbmd0aCA9PT0gZmlsdGVyZWROb2Rlc1dpdGhvdXRDb21tZW50cy5sZW5ndGggJiYgdGhpcy5pY29ucy5sZW5ndGggPD0gdHdvSWNvbnM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJc0ljb25CdXR0b25WYWx1ZSAhPT0gdGhpcy5pc0ljb25CdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuaXNJY29uQnV0dG9uID0gY3VycmVudElzSWNvbkJ1dHRvblZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaWNvbnMubGVuZ3RoICYmIGZpbHRlcmVkTm9kZXNXaXRob3V0Q29tbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5pY29ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0SG9zdEVsZW1lbnQoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaWNvbkhvc3RFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCBsZWZ0SWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCByaWdodEljb25DbGFzc05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGljb25JbmRleCA9IGZpbHRlcmVkTm9kZXNXaXRob3V0Q29tbWVudHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUgPT09IGljb25Ib3N0RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpY29uSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaWNvbkhvc3RFbGVtZW50LCBsZWZ0SWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYnV0dG9uTGVmdEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGljb25JbmRleCA9PT0gZmlsdGVyZWROb2Rlc1dpdGhvdXRDb21tZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGljb25Ib3N0RWxlbWVudCwgcmlnaHRJY29uQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBidXR0b25SaWdodEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjbGFzcyBNY0J1dHRvbkJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IE1jQnV0dG9uTWl4aW5CYXNlOiBIYXNUYWJJbmRleEN0b3IgJiBDYW5Db2xvckN0b3IgJlxuICAgIHR5cGVvZiBNY0J1dHRvbkJhc2UgPSBtaXhpblRhYkluZGV4KG1peGluQ29sb3IoTWNCdXR0b25CYXNlKSk7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbbWMtYnV0dG9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGlucHV0czogWydjb2xvcicsICd0YWJJbmRleCddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1thdHRyLnRhYkluZGV4XSc6ICd0YWJJbmRleCcsXG5cbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE1jQnV0dG9uIGV4dGVuZHMgTWNCdXR0b25NaXhpbkJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENhbkRpc2FibGUsIENhbkNvbG9yIHtcbiAgICBoYXNGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnN0b3BGb2N1c01vbml0b3IoKSA6IHRoaXMucnVuRm9jdXNNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsIHByaXZhdGUgc3R5bGVyOiBNY0J1dHRvbkNzc1N0eWxlcikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLnJ1bkZvY3VzTW9uaXRvcigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN0b3BGb2N1c01vbml0b3IoKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKCRldmVudCkge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25CbHVyKCkge1xuICAgICAgICB0aGlzLmhhc0ZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9jdXNWaWFLZXlib2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5nZXRIb3N0RWxlbWVudCgpLCAna2V5Ym9hcmQnKTtcbiAgICB9XG5cbiAgICBoYWx0RGlzYWJsZWRFdmVudHMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2plY3RDb250ZW50Q2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5zdHlsZXIudXBkYXRlQ2xhc3NNb2RpZmllckZvckljb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBydW5Gb2N1c01vbml0b3IoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RvcEZvY3VzTW9uaXRvcigpIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cIm1jLWJ1dHRvbi13cmFwcGVyXCIgKGNka09ic2VydmVDb250ZW50KT1cInByb2plY3RDb250ZW50Q2hhbmdlZCgpXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibWMtYnV0dG9uLW92ZXJsYXlcIiAoY2xpY2spPVwiaGFsdERpc2FibGVkRXZlbnRzKCRldmVudClcIj48L2Rpdj5cbiJdfQ==