@angular/material 15.0.0-next.3 → 15.0.0-next.5

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 (101) hide show
  1. package/button/_button-theme-private.scss +5 -2
  2. package/button/index.d.ts +5 -1
  3. package/button/testing/index.d.ts +8 -0
  4. package/chips/index.d.ts +13 -1
  5. package/core/_core.scss +1 -2
  6. package/core/mdc-helpers/_mdc-helpers.scss +8 -6
  7. package/core/typography/_all-typography.scss +73 -81
  8. package/datepicker/index.d.ts +10 -2
  9. package/esm2020/button/button-base.mjs +17 -3
  10. package/esm2020/button/button.mjs +4 -4
  11. package/esm2020/button/testing/button-harness-filters.mjs +1 -1
  12. package/esm2020/button/testing/button-harness.mjs +28 -2
  13. package/esm2020/checkbox/checkbox.mjs +2 -2
  14. package/esm2020/chips/chip-option.mjs +17 -7
  15. package/esm2020/core/version.mjs +1 -1
  16. package/esm2020/datepicker/datepicker-intl.mjs +11 -3
  17. package/esm2020/icon/icon.mjs +3 -2
  18. package/esm2020/legacy-button/testing/button-harness.mjs +27 -2
  19. package/esm2020/legacy-button/testing/public-api.mjs +1 -1
  20. package/esm2020/list/action-list.mjs +2 -2
  21. package/esm2020/list/list-base.mjs +5 -2
  22. package/esm2020/list/list-option.mjs +2 -2
  23. package/esm2020/list/list.mjs +12 -4
  24. package/esm2020/list/nav-list.mjs +2 -2
  25. package/esm2020/list/selection-list.mjs +36 -6
  26. package/esm2020/slider/slider.mjs +3 -3
  27. package/esm2020/table/table.mjs +2 -2
  28. package/esm2020/tooltip/tooltip.mjs +25 -14
  29. package/fesm2015/button/testing.mjs +29 -1
  30. package/fesm2015/button/testing.mjs.map +1 -1
  31. package/fesm2015/button.mjs +27 -6
  32. package/fesm2015/button.mjs.map +1 -1
  33. package/fesm2015/checkbox.mjs +2 -2
  34. package/fesm2015/checkbox.mjs.map +1 -1
  35. package/fesm2015/chips.mjs +16 -6
  36. package/fesm2015/chips.mjs.map +1 -1
  37. package/fesm2015/core.mjs +1 -1
  38. package/fesm2015/core.mjs.map +1 -1
  39. package/fesm2015/datepicker.mjs +10 -2
  40. package/fesm2015/datepicker.mjs.map +1 -1
  41. package/fesm2015/icon.mjs +2 -1
  42. package/fesm2015/icon.mjs.map +1 -1
  43. package/fesm2015/legacy-button/testing.mjs +28 -1
  44. package/fesm2015/legacy-button/testing.mjs.map +1 -1
  45. package/fesm2015/list.mjs +57 -15
  46. package/fesm2015/list.mjs.map +1 -1
  47. package/fesm2015/slider.mjs +2 -2
  48. package/fesm2015/slider.mjs.map +1 -1
  49. package/fesm2015/table.mjs +2 -2
  50. package/fesm2015/table.mjs.map +1 -1
  51. package/fesm2015/tooltip.mjs +24 -13
  52. package/fesm2015/tooltip.mjs.map +1 -1
  53. package/fesm2020/button/testing.mjs +27 -1
  54. package/fesm2020/button/testing.mjs.map +1 -1
  55. package/fesm2020/button.mjs +20 -6
  56. package/fesm2020/button.mjs.map +1 -1
  57. package/fesm2020/checkbox.mjs +2 -2
  58. package/fesm2020/checkbox.mjs.map +1 -1
  59. package/fesm2020/chips.mjs +16 -6
  60. package/fesm2020/chips.mjs.map +1 -1
  61. package/fesm2020/core.mjs +1 -1
  62. package/fesm2020/core.mjs.map +1 -1
  63. package/fesm2020/datepicker.mjs +10 -2
  64. package/fesm2020/datepicker.mjs.map +1 -1
  65. package/fesm2020/icon.mjs +2 -1
  66. package/fesm2020/icon.mjs.map +1 -1
  67. package/fesm2020/legacy-button/testing.mjs +26 -1
  68. package/fesm2020/legacy-button/testing.mjs.map +1 -1
  69. package/fesm2020/list.mjs +56 -15
  70. package/fesm2020/list.mjs.map +1 -1
  71. package/fesm2020/slider.mjs +2 -2
  72. package/fesm2020/slider.mjs.map +1 -1
  73. package/fesm2020/table.mjs +2 -2
  74. package/fesm2020/table.mjs.map +1 -1
  75. package/fesm2020/tooltip.mjs +24 -13
  76. package/fesm2020/tooltip.mjs.map +1 -1
  77. package/legacy-button/testing/index.d.ts +5 -0
  78. package/legacy-core/_core.scss +1 -2
  79. package/legacy-prebuilt-themes/legacy-deeppurple-amber.css +1 -1
  80. package/legacy-prebuilt-themes/legacy-indigo-pink.css +1 -1
  81. package/legacy-prebuilt-themes/legacy-pink-bluegrey.css +1 -1
  82. package/legacy-prebuilt-themes/legacy-purple-green.css +1 -1
  83. package/list/_list-item-hcm-indicator.scss +30 -0
  84. package/list/index.d.ts +30 -3
  85. package/package.json +49 -49
  86. package/prebuilt-themes/deeppurple-amber.css +1 -1
  87. package/prebuilt-themes/indigo-pink.css +1 -1
  88. package/prebuilt-themes/pink-bluegrey.css +1 -1
  89. package/prebuilt-themes/purple-green.css +1 -1
  90. package/schematics/ng-add/index.js +1 -1
  91. package/schematics/ng-add/index.mjs +1 -1
  92. package/schematics/ng-generate/mdc-migration/index_bundled.js +706 -410
  93. package/schematics/ng-generate/mdc-migration/index_bundled.js.map +3 -3
  94. package/schematics/ng-generate/mdc-migration/mdc_migration_bundle_metadata.json +1 -1
  95. package/schematics/ng-generate/mdc-migration/schema.json +2 -5
  96. package/schematics/ng-update/index_bundled.js +6 -1
  97. package/schematics/ng-update/index_bundled.js.map +2 -2
  98. package/schematics/ng-update/ng_update_index_metadata.json +1 -1
  99. package/slide-toggle/_slide-toggle-theme.scss +19 -19
  100. package/slider/_slider-theme.scss +50 -73
  101. package/tooltip/index.d.ts +2 -2
@@ -18,8 +18,11 @@
18
18
  opacity: map.get($opacities, hover);
19
19
  }
20
20
 
21
- &:focus .mat-mdc-button-persistent-ripple::before {
22
- opacity: map.get($opacities, focus);
21
+ &.cdk-program-focused,
22
+ &.cdk-keyboard-focused {
23
+ .mat-mdc-button-persistent-ripple::before {
24
+ opacity: map.get($opacities, focus);
25
+ }
23
26
  }
24
27
 
25
28
  &:active .mat-mdc-button-persistent-ripple::before {
package/button/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { _AbstractConstructor } from '@angular/material/core';
2
+ import { AfterViewInit } from '@angular/core';
2
3
  import { BooleanInput } from '@angular/cdk/coercion';
3
4
  import { CanColor } from '@angular/material/core';
4
5
  import { CanDisable } from '@angular/material/core';
@@ -93,15 +94,18 @@ export declare class MatButton extends MatButtonBase {
93
94
  }
94
95
 
95
96
  /** Base class for all buttons. */
96
- declare class MatButtonBase extends _MatButtonMixin implements CanDisable, CanColor, CanDisableRipple {
97
+ declare class MatButtonBase extends _MatButtonMixin implements CanDisable, CanColor, CanDisableRipple, AfterViewInit, OnDestroy {
97
98
  _platform: Platform;
98
99
  _ngZone: NgZone;
99
100
  _animationMode?: string | undefined;
101
+ private readonly _focusMonitor;
100
102
  /** Whether this button is a FAB. Used to apply the correct class on the ripple. */
101
103
  _isFab: boolean;
102
104
  /** Reference to the MatRipple instance of the button. */
103
105
  ripple: MatRipple;
104
106
  constructor(elementRef: ElementRef, _platform: Platform, _ngZone: NgZone, _animationMode?: string | undefined);
107
+ ngAfterViewInit(): void;
108
+ ngOnDestroy(): void;
105
109
  /** Focuses the button. */
106
110
  focus(_origin?: FocusOrigin, options?: FocusOptions): void;
107
111
  /** Gets whether the button has one of the given attributes. */
@@ -7,8 +7,13 @@ import { HarnessPredicate } from '@angular/cdk/testing';
7
7
  export declare interface ButtonHarnessFilters extends BaseHarnessFilters {
8
8
  /** Only find instances whose text matches the given value. */
9
9
  text?: string | RegExp;
10
+ /** Only find instances with a variant. */
11
+ variant?: ButtonVariant;
10
12
  }
11
13
 
14
+ /** Possible button appearances. */
15
+ export declare type ButtonVariant = 'basic' | 'raised' | 'flat' | 'icon' | 'stroked' | 'fab' | 'mini-fab';
16
+
12
17
  /** Harness for interacting with a MDC-based mat-button in tests. */
13
18
  export declare class MatButtonHarness extends ContentContainerComponentHarness {
14
19
  static hostSelector: string;
@@ -17,6 +22,7 @@ export declare class MatButtonHarness extends ContentContainerComponentHarness {
17
22
  * @param options Options for narrowing the search:
18
23
  * - `selector` finds a button whose host element matches the given selector.
19
24
  * - `text` finds a button with specific text content.
25
+ * - `variant` finds buttons matching a specific variant.
20
26
  * @return a `HarnessPredicate` configured with the given options.
21
27
  */
22
28
  static with<T extends MatButtonHarness>(this: ComponentHarnessConstructor<T>, options?: ButtonHarnessFilters): HarnessPredicate<T>;
@@ -40,6 +46,8 @@ export declare class MatButtonHarness extends ContentContainerComponentHarness {
40
46
  blur(): Promise<void>;
41
47
  /** Whether the button is focused. */
42
48
  isFocused(): Promise<boolean>;
49
+ /** Gets the variant of the button. */
50
+ getVariant(): Promise<ButtonVariant>;
43
51
  }
44
52
 
45
53
  export { }
package/chips/index.d.ts CHANGED
@@ -739,7 +739,19 @@ export declare class MatChipOption extends MatChip implements OnInit {
739
739
  get selected(): boolean;
740
740
  set selected(value: BooleanInput);
741
741
  private _selected;
742
- /** The ARIA selected applied to the chip. */
742
+ /**
743
+ * The ARIA selected applied to the chip. Conforms to WAI ARIA best practices for listbox
744
+ * interaction patterns.
745
+ *
746
+ * From [WAI ARIA Listbox authoring practices guide](
747
+ * https://www.w3.org/WAI/ARIA/apg/patterns/listbox/):
748
+ * "If any options are selected, each selected option has either aria-selected or aria-checked
749
+ * set to true. All options that are selectable but not selected have either aria-selected or
750
+ * aria-checked set to false."
751
+ *
752
+ * Set `aria-selected="false"` on not-selected listbox options that are selectable to fix
753
+ * VoiceOver reading every option as "selected" (#25736).
754
+ */
743
755
  get ariaSelected(): string | null;
744
756
  /** The unstyled chip selector for this component. */
745
757
  protected basicChipAttrName: string;
package/core/_core.scss CHANGED
@@ -5,8 +5,7 @@
5
5
  @use './focus-indicators/private';
6
6
 
7
7
  // Mixin that renders all of the core styles that are not theme-dependent.
8
- // TODO: Remove the mixin's parameters after all internal clients migrated
9
- @mixin core($typography-config: null, $exclude-typography: false) {
8
+ @mixin core() {
10
9
  @include ripple.ripple();
11
10
  @include cdk.a11y-visually-hidden();
12
11
  @include cdk.overlay();
@@ -84,15 +84,17 @@ $mat-typography-mdc-level-mappings: (
84
84
  }
85
85
 
86
86
  // Converts an MDC typography level config to an Angular Material one.
87
- @function typography-config-level-from-mdc($mdc-level) {
87
+ @function typography-config-level-from-mdc($mdc-level, $overrides: ()) {
88
88
  $mdc-level-config: map.get(mdc-typography.$styles, $mdc-level);
89
89
 
90
90
  @return typography.define-typography-level(
91
- map.get($mdc-level-config, font-size),
92
- map.get($mdc-level-config, line-height),
93
- map.get($mdc-level-config, font-weight),
94
- map.get($mdc-level-config, font-family),
95
- map.get($mdc-level-config, letter-spacing));
91
+ $font-size: map.get($overrides, font-size) or map.get($mdc-level-config, font-size),
92
+ $font-family: map.get($overrides, font-family) or map.get($mdc-level-config, font-family),
93
+ $line-height: map.get($overrides, line-height) or map.get($mdc-level-config, line-height),
94
+ $font-weight: map.get($overrides, font-weight) or map.get($mdc-level-config, font-weight),
95
+ $letter-spacing:
96
+ map.get($overrides, letter-spacing) or map.get($mdc-level-config, letter-spacing)
97
+ );
96
98
  }
97
99
 
98
100
  // Configures MDC's global variables to reflect the given theme, applies the given styles,
@@ -1,7 +1,6 @@
1
1
  @use 'sass:map';
2
2
  @use 'sass:math';
3
3
  @use 'sass:meta';
4
- @use '@material/typography' as mdc-typography;
5
4
  @use './typography';
6
5
  @use '../../autocomplete/autocomplete-theme';
7
6
  @use '../../badge/badge-theme';
@@ -88,49 +87,52 @@
88
87
  @function define-typography-config(
89
88
  // TODO(mmalerba): rename this function to define-typography-config,
90
89
  // and create a predefined px based config for people that need it.
91
- $font-family: mdc-typography.$font-family,
92
- $headline-1: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline1)),
93
- $headline-2: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline2)),
94
- $headline-3: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline3)),
95
- $headline-4: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline4)),
96
- $headline-5: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline5)),
97
- $headline-6: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(headline6)),
98
- $subtitle-1: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(subtitle1)),
99
- $subtitle-2: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(subtitle2)),
100
- $body-1: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(body1)),
101
- $body-2: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(body2)),
102
- $caption: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(caption)),
103
- $button: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(button)),
104
- $overline: _rem-to-px(mdc-helpers.typography-config-level-from-mdc(overline)),
90
+ $font-family: null,
91
+ $headline-1: null,
92
+ $headline-2: null,
93
+ $headline-3: null,
94
+ $headline-4: null,
95
+ $headline-5: null,
96
+ $headline-6: null,
97
+ $subtitle-1: null,
98
+ $subtitle-2: null,
99
+ $body-1: null,
100
+ $body-2: null,
101
+ $caption: null,
102
+ $button: null,
103
+ $overline: null,
105
104
  ) {
106
105
  // Declare an initial map with all of the levels.
107
- $config: (
108
- headline-1: $headline-1,
109
- headline-2: $headline-2,
110
- headline-3: $headline-3,
111
- headline-4: $headline-4,
112
- headline-5: $headline-5,
113
- headline-6: $headline-6,
114
- subtitle-1: $subtitle-1,
115
- subtitle-2: $subtitle-2,
116
- body-1: $body-1,
117
- body-2: $body-2,
118
- caption: $caption,
119
- button: $button,
120
- overline: $overline,
121
- );
106
+ $overrides: if($font-family, (font-family: $font-family), ());
122
107
 
123
- // Loop through the levels and set the `font-family` of the ones that don't have one to the base.
124
- // Note that Sass can't modify maps in place, which means that we need to merge and re-assign.
125
- @each $key, $level in $config {
126
- @if map.get($level, font-family) == null {
127
- $new-level: map.merge($level, (font-family: $font-family));
128
- $config: map.merge($config, ($key: $new-level));
129
- }
130
- }
131
-
132
- // Add the base font family to the config.
133
- @return map.merge($config, (font-family: $font-family));
108
+ @return (
109
+ headline-1: $headline-1 or _rem-to-px(
110
+ mdc-helpers.typography-config-level-from-mdc(headline1, $overrides)),
111
+ headline-2: $headline-2 or _rem-to-px(
112
+ mdc-helpers.typography-config-level-from-mdc(headline2, $overrides)),
113
+ headline-3: $headline-3 or _rem-to-px(
114
+ mdc-helpers.typography-config-level-from-mdc(headline3, $overrides)),
115
+ headline-4: $headline-4 or _rem-to-px(
116
+ mdc-helpers.typography-config-level-from-mdc(headline4, $overrides)),
117
+ headline-5: $headline-5 or _rem-to-px(
118
+ mdc-helpers.typography-config-level-from-mdc(headline5, $overrides)),
119
+ headline-6: $headline-6 or _rem-to-px(
120
+ mdc-helpers.typography-config-level-from-mdc(headline6, $overrides)),
121
+ subtitle-1: $subtitle-1 or _rem-to-px(
122
+ mdc-helpers.typography-config-level-from-mdc(subtitle1, $overrides)),
123
+ subtitle-2: $subtitle-2 or _rem-to-px(
124
+ mdc-helpers.typography-config-level-from-mdc(subtitle2, $overrides)),
125
+ body-1: $body-1 or _rem-to-px(
126
+ mdc-helpers.typography-config-level-from-mdc(body1, $overrides)),
127
+ body-2: $body-2 or _rem-to-px(
128
+ mdc-helpers.typography-config-level-from-mdc(body2, $overrides)),
129
+ caption: $caption or _rem-to-px(
130
+ mdc-helpers.typography-config-level-from-mdc(caption, $overrides)),
131
+ button: $button or _rem-to-px(
132
+ mdc-helpers.typography-config-level-from-mdc(button, $overrides)),
133
+ overline: $overline or _rem-to-px(
134
+ mdc-helpers.typography-config-level-from-mdc(overline, $overrides)),
135
+ );
134
136
  }
135
137
 
136
138
  /// Generates an Angular Material typography config based on values from the official Material
@@ -158,49 +160,39 @@
158
160
  @function define-rem-typography-config(
159
161
  // TODO(mmalerba): rename this function to define-typography-config,
160
162
  // and create a predefined px based config for people that need it.
161
- $font-family: mdc-typography.$font-family,
162
- $headline-1: mdc-helpers.typography-config-level-from-mdc(headline1),
163
- $headline-2: mdc-helpers.typography-config-level-from-mdc(headline2),
164
- $headline-3: mdc-helpers.typography-config-level-from-mdc(headline3),
165
- $headline-4: mdc-helpers.typography-config-level-from-mdc(headline4),
166
- $headline-5: mdc-helpers.typography-config-level-from-mdc(headline5),
167
- $headline-6: mdc-helpers.typography-config-level-from-mdc(headline6),
168
- $subtitle-1: mdc-helpers.typography-config-level-from-mdc(subtitle1),
169
- $subtitle-2: mdc-helpers.typography-config-level-from-mdc(subtitle2),
170
- $body-1: mdc-helpers.typography-config-level-from-mdc(body1),
171
- $body-2: mdc-helpers.typography-config-level-from-mdc(body2),
172
- $caption: mdc-helpers.typography-config-level-from-mdc(caption),
173
- $button: mdc-helpers.typography-config-level-from-mdc(button),
174
- $overline: mdc-helpers.typography-config-level-from-mdc(overline),
163
+ $font-family: null,
164
+ $headline-1: null,
165
+ $headline-2: null,
166
+ $headline-3: null,
167
+ $headline-4: null,
168
+ $headline-5: null,
169
+ $headline-6: null,
170
+ $subtitle-1: null,
171
+ $subtitle-2: null,
172
+ $body-1: null,
173
+ $body-2: null,
174
+ $caption: null,
175
+ $button: null,
176
+ $overline: null,
175
177
  ) {
176
178
  // Declare an initial map with all of the levels.
177
- $config: (
178
- headline-1: $headline-1,
179
- headline-2: $headline-2,
180
- headline-3: $headline-3,
181
- headline-4: $headline-4,
182
- headline-5: $headline-5,
183
- headline-6: $headline-6,
184
- subtitle-1: $subtitle-1,
185
- subtitle-2: $subtitle-2,
186
- body-1: $body-1,
187
- body-2: $body-2,
188
- caption: $caption,
189
- button: $button,
190
- overline: $overline,
191
- );
179
+ $overrides: if($font-family, (font-family: $font-family), ());
192
180
 
193
- // Loop through the levels and set the `font-family` of the ones that don't have one to the base.
194
- // Note that Sass can't modify maps in place, which means that we need to merge and re-assign.
195
- @each $key, $level in $config {
196
- @if map.get($level, font-family) == null {
197
- $new-level: map.merge($level, (font-family: $font-family));
198
- $config: map.merge($config, ($key: $new-level));
199
- }
200
- }
201
-
202
- // Add the base font family to the config.
203
- @return map.merge($config, (font-family: $font-family));
181
+ @return (
182
+ headline-1: $headline-1 or mdc-helpers.typography-config-level-from-mdc(headline1, $overrides),
183
+ headline-2: $headline-2 or mdc-helpers.typography-config-level-from-mdc(headline2, $overrides),
184
+ headline-3: $headline-3 or mdc-helpers.typography-config-level-from-mdc(headline3, $overrides),
185
+ headline-4: $headline-4 or mdc-helpers.typography-config-level-from-mdc(headline4, $overrides),
186
+ headline-5: $headline-5 or mdc-helpers.typography-config-level-from-mdc(headline5, $overrides),
187
+ headline-6: $headline-6 or mdc-helpers.typography-config-level-from-mdc(headline6, $overrides),
188
+ subtitle-1: $subtitle-1 or mdc-helpers.typography-config-level-from-mdc(subtitle1, $overrides),
189
+ subtitle-2: $subtitle-2 or mdc-helpers.typography-config-level-from-mdc(subtitle2, $overrides),
190
+ body-1: $body-1 or mdc-helpers.typography-config-level-from-mdc(body1, $overrides),
191
+ body-2: $body-2 or mdc-helpers.typography-config-level-from-mdc(body2, $overrides),
192
+ caption: $caption or mdc-helpers.typography-config-level-from-mdc(caption, $overrides),
193
+ button: $button or mdc-helpers.typography-config-level-from-mdc(button, $overrides),
194
+ overline: $overline or mdc-helpers.typography-config-level-from-mdc(overline, $overrides),
195
+ );
204
196
  }
205
197
 
206
198
  @mixin private-all-unmigrated-component-typographies($config) {
@@ -1080,9 +1080,17 @@ export declare class MatDatepickerIntl {
1080
1080
  switchToMonthViewLabel: string;
1081
1081
  /** A label for the 'switch to year view' button (used by screen readers). */
1082
1082
  switchToMultiYearViewLabel: string;
1083
- /** A label for the first date of a range of dates (used by screen readers). */
1083
+ /**
1084
+ * A label for the first date of a range of dates (used by screen readers).
1085
+ * @deprecated Provide your own internationalization string.
1086
+ * @breaking-change 17.0.0
1087
+ */
1084
1088
  startDateLabel: string;
1085
- /** A label for the last date of a range of dates (used by screen readers). */
1089
+ /**
1090
+ * A label for the last date of a range of dates (used by screen readers).
1091
+ * @deprecated Provide your own internationalization string.
1092
+ * @breaking-change 17.0.0
1093
+ */
1086
1094
  endDateLabel: string;
1087
1095
  /** Formats a range of years (used for visuals). */
1088
1096
  formatYearRange(start: string, end: string): string;
@@ -5,8 +5,9 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
+ import { FocusMonitor } from '@angular/cdk/a11y';
8
9
  import { Platform } from '@angular/cdk/platform';
9
- import { Directive, ElementRef, NgZone, ViewChild } from '@angular/core';
10
+ import { Directive, ElementRef, inject, NgZone, ViewChild, } from '@angular/core';
10
11
  import { MatRipple, mixinColor, mixinDisabled, mixinDisableRipple, } from '@angular/material/core';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@angular/cdk/platform";
@@ -69,6 +70,7 @@ export class MatButtonBase extends _MatButtonMixin {
69
70
  this._platform = _platform;
70
71
  this._ngZone = _ngZone;
71
72
  this._animationMode = _animationMode;
73
+ this._focusMonitor = inject(FocusMonitor);
72
74
  /** Whether this button is a FAB. Used to apply the correct class on the ripple. */
73
75
  this._isFab = false;
74
76
  const classList = elementRef.nativeElement.classList;
@@ -82,9 +84,20 @@ export class MatButtonBase extends _MatButtonMixin {
82
84
  }
83
85
  }
84
86
  }
87
+ ngAfterViewInit() {
88
+ this._focusMonitor.monitor(this._elementRef, true);
89
+ }
90
+ ngOnDestroy() {
91
+ this._focusMonitor.stopMonitoring(this._elementRef);
92
+ }
85
93
  /** Focuses the button. */
86
94
  focus(_origin = 'program', options) {
87
- this._elementRef.nativeElement.focus(options);
95
+ if (_origin) {
96
+ this._focusMonitor.focusVia(this._elementRef.nativeElement, _origin, options);
97
+ }
98
+ else {
99
+ this._elementRef.nativeElement.focus(options);
100
+ }
88
101
  }
89
102
  /** Gets whether the button has one of the given attributes. */
90
103
  _hasHostAttributes(...attributes) {
@@ -141,6 +154,7 @@ export class MatAnchorBase extends MatButtonBase {
141
154
  });
142
155
  }
143
156
  ngOnDestroy() {
157
+ super.ngOnDestroy();
144
158
  this._elementRef.nativeElement.removeEventListener('click', this._haltDisabledEvents);
145
159
  }
146
160
  }
@@ -149,4 +163,4 @@ MatAnchorBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version:
149
163
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0-next.1", ngImport: i0, type: MatAnchorBase, decorators: [{
150
164
  type: Directive
151
165
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: i0.NgZone }, { type: undefined }]; } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYnV0dG9uL2J1dHRvbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQXFCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBSUwsU0FBUyxFQUNULFVBQVUsRUFDVixhQUFhLEVBQ2Isa0JBQWtCLEdBQ25CLE1BQU0sd0JBQXdCLENBQUM7OztBQUdoQyxvQ0FBb0M7QUFDcEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXhFLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsaUJBQWlCLEVBQUUsa0JBQWtCO0lBQ3JDLGlDQUFpQyxFQUFFLHFDQUFxQztJQUN4RSwwRkFBMEY7SUFDMUYsc0ZBQXNGO0lBQ3RGLGlDQUFpQztJQUNqQyxzQkFBc0IsRUFBRSxRQUFRO0lBQ2hDLHNGQUFzRjtJQUN0Rix3Q0FBd0M7SUFDeEMsNkJBQTZCLEVBQUUsTUFBTTtDQUN0QyxDQUFDO0FBRUYsb0ZBQW9GO0FBQ3BGLE1BQU0sNEJBQTRCLEdBQStDO0lBQy9FO1FBQ0UsUUFBUSxFQUFFLFlBQVk7UUFDdEIsVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO0tBQzdDO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsQ0FBQztLQUNsRjtJQUNEO1FBQ0UsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixVQUFVLEVBQUUsQ0FBQyxZ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QjtJQUM3QyxzQkFBc0IsRUFBRSxxQkFBcUI7SUFDN0MsMEZBQTBGO0lBQzFGLHNGQUFzRjtJQUN0RixpQ0FBaUM7SUFDakMsc0JBQXNCLEVBQUUsUUFBUTtJQUNoQyxzRkFBc0Y7SUFDdEYsd0NBQXdDO0lBQ3hDLDZCQUE2QixFQUFFLE1BQU07Q0FDdEMsQ0FBQztBQUVGOztHQUVHO0FBRUgsTUFBTSxPQUFPLGFBQWMsU0FBUSxhQUFhO0lBRzlDLFlBQVksVUFBc0IsRUFBRSxRQUFrQixFQUFFLE1BQWMsRUFBRSxhQUFzQjtRQUM1RixLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFhckQsd0JBQW1CLEdBQUcsQ0FBQyxLQUFZLEVBQVEsRUFBRTtZQUMzQyxnREFBZ0Q7WUFDaEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDO0lBbEJGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEYsQ0FBQzs7aUhBZlUsYUFBYTtxR0FBYixhQUFhO2tHQUFiLGFBQWE7a0JBRHpCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2FuQ29sb3IsXG4gIENhbkRpc2FibGUsXG4gIENhbkRpc2FibGVSaXBwbGUsXG4gIE1hdFJpcHBsZSxcbiAgbWl4aW5Db2xvcixcbiAgbWl4aW5EaXNhYmxlZCxcbiAgbWl4aW5EaXNhYmxlUmlwcGxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7Rm9jdXNPcmlnaW59IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuLyoqIElucHV0cyBjb21tb24gdG8gYWxsIGJ1dHRvbnMuICovXG5leHBvcnQgY29uc3QgTUFUX0JVVFRPTl9JTlBVVFMgPSBbJ2Rpc2FibGVkJywgJ2Rpc2FibGVSaXBwbGUnLCAnY29sb3InXTtcblxuLyoqIFNoYXJlZCBob3N0IGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBidXR0b25zICovXG5leHBvcnQgY29uc3QgTUFUX0JVVFRPTl9IT1NUID0ge1xuICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAnW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSc6ICdfYW5pbWF0aW9uTW9kZSA9PT0gXCJOb29wQW5pbWF0aW9uc1wiJyxcbiAgLy8gTURDIGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0aGUgcHJpbWFyeSB0aGVtZSBjb2xvciB0byB0aGUgYnV0dG9uLCBidXQgd2Ugd2FudCB0byBzdXBwb3J0XG4gIC8vIGFuIHVudGhlbWVkIHZlcnNpb24uIElmIGNvbG9yIGlzIHVuZGVmaW5lZCwgYXBwbHkgYSBDU1MgY2xhc3MgdGhhdCBtYWtlcyBpdCBlYXN5IHRvXG4gIC8vIHNlbGVjdCBhbmQgc3R5bGUgdGhpcyBcInRoZW1lXCIuXG4gICdbY2xhc3MubWF0LXVudGhlbWVkXSc6ICchY29sb3InLFxuICAvLyBBZGQgYSBjbGFzcyB0aGF0IGFwcGxpZXMgdG8gYWxsIGJ1dHRvbnMuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRhcmdldCBpZiBzb21lYm9keVxuICAvLyB3YW50cyB0byB0YXJnZXQgYWxsIE1hdGVyaWFsIGJ1dHRvbnMuXG4gICdbY2xhc3MubWF0LW1kYy1idXR0b24tYmFzZV0nOiAndHJ1ZScsXG59O1xuXG4vKiogTGlzdCBvZiBjbGFzc2VzIHRvIGFkZCB0byBidXR0b25zIGluc3RhbmNlcyBiYXNlZCBvbiBob3N0IGF0dHJpYnV0ZSBzZWxlY3Rvci4gKi9cbmNvbnN0IEhPU1RfU0VMRUNUT1JfTURDX0NMQVNTX1BBSVI6IHtzZWxlY3Rvcjogc3RyaW5nOyBtZGNDbGFzc2VzOiBzdHJpbmdbXX1bXSA9IFtcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21hdC1tZGMtYnV0dG9uJ10sXG4gIH0sXG4gIHtcbiAgICBzZWxlY3RvcjogJ21hdC1mbGF0LWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21kYy1idXR0b24tLXVuZWxldmF0ZWQnLCAnbWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiddLFxuICB9LFxuICB7XG4gICAgc2VsZWN0b3I6ICdtYXQtcmFpc2VkLWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21kYy1idXR0b24tLXJhaXNlZCcsICdtYXQtbWRjLXJhaXNlZC1idXR0b24nXSxcbiAgfSxcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LXN0cm9rZWQtYnV0dG9uJyxcbiAgICBtZGNDbGFzc2VzOiBbJ21kYy1idXR0b24nLCAnbWRjLWJ1dHRvbi0tb3V0bGluZWQnLCAnbWF0LW1kYy1vdXRsaW5lZC1idXR0b24nXSxcbiAgfSxcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LWZhYicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtZmFiJywgJ21hdC1tZGMtZmFiJ10sXG4gIH0sXG4gIHtcbiAgICBzZWxlY3RvcjogJ21hdC1taW5pLWZhYicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtZmFiJywgJ21kYy1mYWItLW1pbmknLCAnbWF0LW1kYy1taW5pLWZhYiddLFxuICB9LFxuICB7XG4gICAgc2VsZWN0b3I6ICdtYXQtaWNvbi1idXR0b24nLFxuICAgIG1kY0NsYXNzZXM6IFsnbWRjLWljb24tYnV0dG9uJywgJ21hdC1tZGMtaWNvbi1idXR0b24nXSxcbiAgfSxcbl07XG5cbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gTWF0QnV0dG9uLlxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBfTWF0QnV0dG9uTWl4aW4gPSBtaXhpbkNvbG9yKFxuICBtaXhpbkRpc2FibGVkKFxuICAgIG1peGluRGlzYWJsZVJpcHBsZShcbiAgICAgIGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IocHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuICAgICAgfSxcbiAgICApLFxuICApLFxuKTtcblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFsbCBidXR0b25zLiAgKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE1hdEJ1dHRvbkJhc2VcbiAgZXh0ZW5kcyBfTWF0QnV0dG9uTWl4aW5cbiAgaW1wbGVtZW50cyBDYW5EaXNhYmxlLCBDYW5Db2xvciwgQ2FuRGlzYWJsZVJpcHBsZVxue1xuICAvKiogV2hldGhlciB0aGlzIGJ1dHRvbiBpcyBhIEZBQi4gVXNlZCB0byBhcHBseSB0aGUgY29ycmVjdCBjbGFzcyBvbiB0aGUgcmlwcGxlLiAqL1xuICBfaXNGYWIgPSBmYWxzZTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBNYXRSaXBwbGUgaW5zdGFuY2Ugb2YgdGhlIGJ1dHRvbi4gKi9cbiAgQFZpZXdDaGlsZChNYXRSaXBwbGUpIHJpcHBsZTogTWF0UmlwcGxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHVibGljIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgX2FuaW1hdGlvbk1vZGU/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgY29uc3QgY2xhc3NMaXN0ID0gKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0O1xuXG4gICAgLy8gRm9yIGVhY2ggb2YgdGhlIHZhcmlhbnQgc2VsZWN0b3JzIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgYnV0dG9uJ3MgaG9zdFxuICAgIC8vIGF0dHJpYnV0ZXMsIGFkZCB0aGUgY29ycmVjdCBjb3JyZXNwb25kaW5nIE1EQyBjbGFzc2VzLlxuICAgIGZvciAoY29uc3QgcGFpciBvZiBIT1NUX1NFTEVDVE9SX01EQ19DTEFTU19QQUlSKSB7XG4gICAgICBpZiAodGhpcy5faGFzSG9zdEF0dHJpYnV0ZXMocGFpci5zZWxlY3RvcikpIHtcbiAgICAgICAgcGFpci5tZGNDbGFzc2VzLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgYnV0dG9uLiAqL1xuICBmb2N1cyhfb3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJywgb3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHdoZXRoZXIgdGhlIGJ1dHRvbiBoYXMgb25lIG9mIHRoZSBnaXZlbiBhdHRyaWJ1dGVzLiAqL1xuICBwcml2YXRlIF9oYXNIb3N0QXR0cmlidXRlcyguLi5hdHRyaWJ1dGVzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLnNvbWUoYXR0cmlidXRlID0+IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSk7XG4gIH1cblxuICBfaXNSaXBwbGVEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlIHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cbn1cblxuLyoqIFNoYXJlZCBpbnB1dHMgYnkgYnV0dG9ucyB1c2luZyB0aGUgYDxhPmAgdGFnICovXG5leHBvcnQgY29uc3QgTUFUX0FOQ0hPUl9JTlBVVFMgPSBbJ2Rpc2FibGVkJywgJ2Rpc2FibGVSaXBwbGUnLCAnY29sb3InLCAndGFiSW5kZXgnXTtcblxuLyoqIFNoYXJlZCBob3N0IGNvbmZpZ3VyYXRpb24gZm9yIGJ1dHRvbnMgdXNpbmcgdGhlIGA8YT5gIHRhZy4gKi9cbmV4cG9ydCBjb25zdCBNQVRfQU5DSE9SX0hPU1QgPSB7XG4gICdbYXR0ci5kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbnVsbCcsXG4gICdbY2xhc3MuX21hdC1hbmltYXRpb24tbm9vcGFibGVdJzogJ19hbmltYXRpb25Nb2RlID09PSBcIk5vb3BBbmltYXRpb25zXCInLFxuXG4gIC8vIE5vdGUgdGhhdCB3ZSBpZ25vcmUgdGhlIHVzZXItc3BlY2lmaWVkIHRhYmluZGV4IHdoZW4gaXQncyBkaXNhYmxlZCBmb3JcbiAgLy8gY29uc2lzdGVuY3kgd2l0aCB0aGUgYG1hdC1idXR0b25gIGFwcGxpZWQgb24gbmF0aXZlIGJ1dHRvbnMgd2hlcmUgZXZlblxuICAvLyB0aG91Z2ggdGhleSBoYXZlIGFuIGluZGV4LCB0aGV5J3JlIG5vdCB0YWJiYWJsZS5cbiAgJ1thdHRyLnRhYmluZGV4XSc6ICdkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgnLFxuICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQudG9TdHJpbmcoKScsXG4gIC8vIE1EQyBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgdGhlIHByaW1hcnkgdGhlbWUgY29sb3IgdG8gdGhlIGJ1dHRvbiwgYnV0IHdlIHdhbnQgdG8gc3VwcG9ydFxuICAvLyBhbiB1bnRoZW1lZCB2ZXJzaW9uLiBJZiBjb2xvciBpcyB1bmRlZmluZWQsIGFwcGx5IGEgQ1NTIGNsYXNzIHRoYXQgbWFrZXMgaXQgZWFzeSB0b1xuICAvLyBzZWxlY3QgYW5kIHN0eWxlIHRoaXMgXCJ0aGVtZVwiLlxuICAnW2NsYXNzLm1hdC11bnRoZW1lZF0nOiAnIWNvbG9yJyxcbiAgLy8gQWRkIGEgY2xhc3MgdGhhdCBhcHBsaWVzIHRvIGFsbCBidXR0b25zLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB0YXJnZXQgaWYgc29tZWJvZHlcbiAgLy8gd2FudHMgdG8gdGFyZ2V0IGFsbCBNYXRlcmlhbCBidXR0b25zLlxuICAnW2NsYXNzLm1hdC1tZGMtYnV0dG9uLWJhc2VdJzogJ3RydWUnLFxufTtcblxuLyoqXG4gKiBBbmNob3IgYnV0dG9uIGJhc2UuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE1hdEFuY2hvckJhc2UgZXh0ZW5kcyBNYXRCdXR0b25CYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICB0YWJJbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHBsYXRmb3JtOiBQbGF0Zm9ybSwgbmdab25lOiBOZ1pvbmUsIGFuaW1hdGlvbk1vZGU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBwbGF0Zm9ybSwgbmdab25lLCBhbmltYXRpb25Nb2RlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHMpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKTtcbiAgfVxuXG4gIF9oYWx0RGlzYWJsZWRFdmVudHMgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgLy8gQSBkaXNhYmxlZCBidXR0b24gc2hvdWxkbid0IGFwcGx5IGFueSBhY3Rpb25zXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYnV0dG9uL2J1dHRvbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsYUFBYSxFQUNiLGtCQUFrQixHQUNuQixNQUFNLHdCQUF3QixDQUFDOzs7QUFFaEMsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUV4RSxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLGlCQUFpQixFQUFFLGtCQUFrQjtJQUNyQyxpQ0FBaUMsRUFBRSxxQ0FBcUM7SUFDeEUsMEZBQTBGO0lBQzFGLHNGQUFzRjtJQUN0RixpQ0FBaUM7SUFDakMsc0JBQXNCLEVBQUUsUUFBUTtJQUNoQyxzRkFBc0Y7SUFDdEYsd0NBQXdDO0lBQ3hDLDZCQUE2QixFQUFFLE1BQU07Q0FDdEMsQ0FBQztBQUVGLG9GQUFvRjtBQUNwRixNQUFNLDRCQUE0QixHQUErQztJQUMvRTtRQUNFLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztLQUM3QztJQUNEO1FBQ0UsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLENBQUM7S0FD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LENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEYsQ0FBQzs7aUhBaEJVLGFBQWE7cUdBQWIsYUFBYTtrR0FBYixhQUFhO2tCQUR6QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Rm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2FuQ29sb3IsXG4gIENhbkRpc2FibGUsXG4gIENhbkRpc2FibGVSaXBwbGUsXG4gIE1hdFJpcHBsZSxcbiAgbWl4aW5Db2xvcixcbiAgbWl4aW5EaXNhYmxlZCxcbiAgbWl4aW5EaXNhYmxlUmlwcGxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuLyoqIElucHV0cyBjb21tb24gdG8gYWxsIGJ1dHRvbnMuICovXG5leHBvcnQgY29uc3QgTUFUX0JVVFRPTl9JTlBVVFMgPSBbJ2Rpc2FibGVkJywgJ2Rpc2FibGVSaXBwbGUnLCAnY29sb3InXTtcblxuLyoqIFNoYXJlZCBob3N0IGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBidXR0b25zICovXG5leHBvcnQgY29uc3QgTUFUX0JVVFRPTl9IT1NUID0ge1xuICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAnW2NsYXNzLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlXSc6ICdfYW5pbWF0aW9uTW9kZSA9PT0gXCJOb29wQW5pbWF0aW9uc1wiJyxcbiAgLy8gTURDIGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0aGUgcHJpbWFyeSB0aGVtZSBjb2xvciB0byB0aGUgYnV0dG9uLCBidXQgd2Ugd2FudCB0byBzdXBwb3J0XG4gIC8vIGFuIHVudGhlbWVkIHZlcnNpb24uIElmIGNvbG9yIGlzIHVuZGVmaW5lZCwgYXBwbHkgYSBDU1MgY2xhc3MgdGhhdCBtYWtlcyBpdCBlYXN5IHRvXG4gIC8vIHNlbGVjdCBhbmQgc3R5bGUgdGhpcyBcInRoZW1lXCIuXG4gICdbY2xhc3MubWF0LXVudGhlbWVkXSc6ICchY29sb3InLFxuICAvLyBBZGQgYSBjbGFzcyB0aGF0IGFwcGxpZXMgdG8gYWxsIGJ1dHRvbnMuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRhcmdldCBpZiBzb21lYm9keVxuICAvLyB3YW50cyB0byB0YXJnZXQgYWxsIE1hdGVyaWFsIGJ1dHRvbnMuXG4gICdbY2xhc3MubWF0LW1kYy1idXR0b24tYmFzZV0nOiAndHJ1ZScsXG59O1xuXG4vKiogTGlzdCBvZiBjbGFzc2VzIHRvIGFkZCB0byBidXR0b25zIGluc3RhbmNlcyBiYXNlZCBvbiBob3N0IGF0dHJpYnV0ZSBzZWxlY3Rvci4gKi9cbmNvbnN0IEhPU1RfU0VMRUNUT1JfTURDX0NMQVNTX1BBSVI6IHtzZWxlY3Rvcjogc3RyaW5nOyBtZGNDbGFzc2VzOiBzdHJpbmdbXX1bXSA9IFtcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21hdC1tZGMtYnV0dG9uJ10sXG4gIH0sXG4gIHtcbiAgICBzZWxlY3RvcjogJ21hdC1mbGF0LWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21kYy1idXR0b24tLXVuZWxldmF0ZWQnLCAnbWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiddLFxuICB9LFxuICB7XG4gICAgc2VsZWN0b3I6ICdtYXQtcmFpc2VkLWJ1dHRvbicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtYnV0dG9uJywgJ21kYy1idXR0b24tLXJhaXNlZCcsICdtYXQtbWRjLXJhaXNlZC1idXR0b24nXSxcbiAgfSxcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LXN0cm9rZWQtYnV0dG9uJyxcbiAgICBtZGNDbGFzc2VzOiBbJ21kYy1idXR0b24nLCAnbWRjLWJ1dHRvbi0tb3V0bGluZWQnLCAnbWF0LW1kYy1vdXRsaW5lZC1idXR0b24nXSxcbiAgfSxcbiAge1xuICAgIHNlbGVjdG9yOiAnbWF0LWZhYicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtZmFiJywgJ21hdC1tZGMtZmFiJ10sXG4gIH0sXG4gIHtcbiAgICBzZWxlY3RvcjogJ21hdC1taW5pLWZhYicsXG4gICAgbWRjQ2xhc3NlczogWydtZGMtZmFiJywgJ21kYy1mYWItLW1pbmknLCAnbWF0LW1kYy1taW5pLWZhYiddLFxuICB9LFxuICB7XG4gICAgc2VsZWN0b3I6ICdtYXQtaWNvbi1idXR0b24nLFxuICAgIG1kY0NsYXNzZXM6IFsnbWRjLWljb24tYnV0dG9uJywgJ21hdC1tZGMtaWNvbi1idXR0b24nXSxcbiAgfSxcbl07XG5cbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gTWF0QnV0dG9uLlxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBfTWF0QnV0dG9uTWl4aW4gPSBtaXhpbkNvbG9yKFxuICBtaXhpbkRpc2FibGVkKFxuICAgIG1peGluRGlzYWJsZVJpcHBsZShcbiAgICAgIGNsYXNzIHtcbiAgICAgICAgY29uc3RydWN0b3IocHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuICAgICAgfSxcbiAgICApLFxuICApLFxuKTtcblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFsbCBidXR0b25zLiAgKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE1hdEJ1dHRvbkJhc2VcbiAgZXh0ZW5kcyBfTWF0QnV0dG9uTWl4aW5cbiAgaW1wbGVtZW50cyBDYW5EaXNhYmxlLCBDYW5Db2xvciwgQ2FuRGlzYWJsZVJpcHBsZSwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzTW9uaXRvciA9IGluamVjdChGb2N1c01vbml0b3IpO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgYnV0dG9uIGlzIGEgRkFCLiBVc2VkIHRvIGFwcGx5IHRoZSBjb3JyZWN0IGNsYXNzIG9uIHRoZSByaXBwbGUuICovXG4gIF9pc0ZhYiA9IGZhbHNlO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1hdFJpcHBsZSBpbnN0YW5jZSBvZiB0aGUgYnV0dG9uLiAqL1xuICBAVmlld0NoaWxkKE1hdFJpcHBsZSkgcmlwcGxlOiBNYXRSaXBwbGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwdWJsaWMgX25nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBfYW5pbWF0aW9uTW9kZT86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG5cbiAgICBjb25zdCBjbGFzc0xpc3QgPSAoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3Q7XG5cbiAgICAvLyBGb3IgZWFjaCBvZiB0aGUgdmFyaWFudCBzZWxlY3RvcnMgdGhhdCBpcyBwcmVzZW50IGluIHRoZSBidXR0b24ncyBob3N0XG4gICAgLy8gYXR0cmlidXRlcywgYWRkIHRoZSBjb3JyZWN0IGNvcnJlc3BvbmRpbmcgTURDIGNsYXNzZXMuXG4gICAgZm9yIChjb25zdCBwYWlyIG9mIEhPU1RfU0VMRUNUT1JfTURDX0NMQVNTX1BBSVIpIHtcbiAgICAgIGlmICh0aGlzLl9oYXNIb3N0QXR0cmlidXRlcyhwYWlyLnNlbGVjdG9yKSkge1xuICAgICAgICBwYWlyLm1kY0NsYXNzZXMuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKTtcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIHRoZSBidXR0b24uICovXG4gIGZvY3VzKF9vcmlnaW46IEZvY3VzT3JpZ2luID0gJ3Byb2dyYW0nLCBvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKF9vcmlnaW4pIHtcbiAgICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIF9vcmlnaW4sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgd2hldGhlciB0aGUgYnV0dG9uIGhhcyBvbmUgb2YgdGhlIGdpdmVuIGF0dHJpYnV0ZXMuICovXG4gIHByaXZhdGUgX2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuc29tZShhdHRyaWJ1dGUgPT4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIF9pc1JpcHBsZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVSaXBwbGUgfHwgdGhpcy5kaXNhYmxlZDtcbiAgfVxufVxuXG4vKiogU2hhcmVkIGlucHV0cyBieSBidXR0b25zIHVzaW5nIHRoZSBgPGE+YCB0YWcgKi9cbmV4cG9ydCBjb25zdCBNQVRfQU5DSE9SX0lOUFVUUyA9IFsnZGlzYWJsZWQnLCAnZGlzYWJsZVJpcHBsZScsICdjb2xvcicsICd0YWJJbmRleCddO1xuXG4vKiogU2hhcmVkIGhvc3QgY29uZmlndXJhdGlvbiBmb3IgYnV0dG9ucyB1c2luZyB0aGUgYDxhPmAgdGFnLiAqL1xuZXhwb3J0IGNvbnN0IE1BVF9BTkNIT1JfSE9TVCA9IHtcbiAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgJ1tjbGFzcy5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZV0nOiAnX2FuaW1hdGlvbk1vZGUgPT09IFwiTm9vcEFuaW1hdGlvbnNcIicsXG5cbiAgLy8gTm90ZSB0aGF0IHdlIGlnbm9yZSB0aGUgdXNlci1zcGVjaWZpZWQgdGFiaW5kZXggd2hlbiBpdCdzIGRpc2FibGVkIGZvclxuICAvLyBjb25zaXN0ZW5jeSB3aXRoIHRoZSBgbWF0LWJ1dHRvbmAgYXBwbGllZCBvbiBuYXRpdmUgYnV0dG9ucyB3aGVyZSBldmVuXG4gIC8vIHRob3VnaCB0aGV5IGhhdmUgYW4gaW5kZXgsIHRoZXkncmUgbm90IHRhYmJhYmxlLlxuICAnW2F0dHIudGFiaW5kZXhdJzogJ2Rpc2FibGVkID8gLTEgOiB0YWJJbmRleCcsXG4gICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZC50b1N0cmluZygpJyxcbiAgLy8gTURDIGF1dG9tYXRpY2FsbHkgYXBwbGllcyB0aGUgcHJpbWFyeSB0aGVtZSBjb2xvciB0byB0aGUgYnV0dG9uLCBidXQgd2Ugd2FudCB0byBzdXBwb3J0XG4gIC8vIGFuIHVudGhlbWVkIHZlcnNpb24uIElmIGNvbG9yIGlzIHVuZGVmaW5lZCwgYXBwbHkgYSBDU1MgY2xhc3MgdGhhdCBtYWtlcyBpdCBlYXN5IHRvXG4gIC8vIHNlbGVjdCBhbmQgc3R5bGUgdGhpcyBcInRoZW1lXCIuXG4gICdbY2xhc3MubWF0LXVudGhlbWVkXSc6ICchY29sb3InLFxuICAvLyBBZGQgYSBjbGFzcyB0aGF0IGFwcGxpZXMgdG8gYWxsIGJ1dHRvbnMuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRhcmdldCBpZiBzb21lYm9keVxuICAvLyB3YW50cyB0byB0YXJnZXQgYWxsIE1hdGVyaWFsIGJ1dHRvbnMuXG4gICdbY2xhc3MubWF0LW1kYy1idXR0b24tYmFzZV0nOiAndHJ1ZScsXG59O1xuXG4vKipcbiAqIEFuY2hvciBidXR0b24gYmFzZS5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgTWF0QW5jaG9yQmFzZSBleHRlbmRzIE1hdEJ1dHRvbkJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHRhYkluZGV4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcGxhdGZvcm06IFBsYXRmb3JtLCBuZ1pvbmU6IE5nWm9uZSwgYW5pbWF0aW9uTW9kZT86IHN0cmluZykge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHBsYXRmb3JtLCBuZ1pvbmUsIGFuaW1hdGlvbk1vZGUpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyk7XG4gIH1cblxuICBfaGFsdERpc2FibGVkRXZlbnRzID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIC8vIEEgZGlzYWJsZWQgYnV0dG9uIHNob3VsZG4ndCBhcHBseSBhbnkgYWN0aW9uc1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9O1xufVxuIl19