@angular/material 15.0.0-next.4 → 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 (64) hide show
  1. package/button/testing/index.d.ts +8 -0
  2. package/chips/index.d.ts +13 -1
  3. package/core/mdc-helpers/_mdc-helpers.scss +8 -6
  4. package/core/typography/_all-typography.scss +73 -81
  5. package/datepicker/index.d.ts +10 -2
  6. package/esm2020/button/testing/button-harness-filters.mjs +1 -1
  7. package/esm2020/button/testing/button-harness.mjs +28 -2
  8. package/esm2020/checkbox/checkbox.mjs +2 -2
  9. package/esm2020/chips/chip-option.mjs +15 -7
  10. package/esm2020/core/version.mjs +1 -1
  11. package/esm2020/datepicker/datepicker-intl.mjs +11 -3
  12. package/esm2020/icon/icon.mjs +3 -2
  13. package/esm2020/legacy-button/testing/button-harness.mjs +27 -2
  14. package/esm2020/legacy-button/testing/public-api.mjs +1 -1
  15. package/esm2020/list/list-base.mjs +5 -2
  16. package/esm2020/list/selection-list.mjs +34 -4
  17. package/fesm2015/button/testing.mjs +29 -1
  18. package/fesm2015/button/testing.mjs.map +1 -1
  19. package/fesm2015/checkbox.mjs +2 -2
  20. package/fesm2015/checkbox.mjs.map +1 -1
  21. package/fesm2015/chips.mjs +14 -6
  22. package/fesm2015/chips.mjs.map +1 -1
  23. package/fesm2015/core.mjs +1 -1
  24. package/fesm2015/core.mjs.map +1 -1
  25. package/fesm2015/datepicker.mjs +10 -2
  26. package/fesm2015/datepicker.mjs.map +1 -1
  27. package/fesm2015/icon.mjs +2 -1
  28. package/fesm2015/icon.mjs.map +1 -1
  29. package/fesm2015/legacy-button/testing.mjs +28 -1
  30. package/fesm2015/legacy-button/testing.mjs.map +1 -1
  31. package/fesm2015/list.mjs +38 -4
  32. package/fesm2015/list.mjs.map +1 -1
  33. package/fesm2020/button/testing.mjs +27 -1
  34. package/fesm2020/button/testing.mjs.map +1 -1
  35. package/fesm2020/checkbox.mjs +2 -2
  36. package/fesm2020/checkbox.mjs.map +1 -1
  37. package/fesm2020/chips.mjs +14 -6
  38. package/fesm2020/chips.mjs.map +1 -1
  39. package/fesm2020/core.mjs +1 -1
  40. package/fesm2020/core.mjs.map +1 -1
  41. package/fesm2020/datepicker.mjs +10 -2
  42. package/fesm2020/datepicker.mjs.map +1 -1
  43. package/fesm2020/icon.mjs +2 -1
  44. package/fesm2020/icon.mjs.map +1 -1
  45. package/fesm2020/legacy-button/testing.mjs +26 -1
  46. package/fesm2020/legacy-button/testing.mjs.map +1 -1
  47. package/fesm2020/list.mjs +37 -4
  48. package/fesm2020/list.mjs.map +1 -1
  49. package/legacy-button/testing/index.d.ts +5 -0
  50. package/list/index.d.ts +25 -3
  51. package/package.json +2 -2
  52. package/prebuilt-themes/deeppurple-amber.css +1 -1
  53. package/prebuilt-themes/indigo-pink.css +1 -1
  54. package/prebuilt-themes/pink-bluegrey.css +1 -1
  55. package/prebuilt-themes/purple-green.css +1 -1
  56. package/schematics/ng-add/index.js +1 -1
  57. package/schematics/ng-add/index.mjs +1 -1
  58. package/schematics/ng-generate/mdc-migration/index_bundled.js +262 -316
  59. package/schematics/ng-generate/mdc-migration/index_bundled.js.map +3 -3
  60. package/schematics/ng-generate/mdc-migration/mdc_migration_bundle_metadata.json +1 -1
  61. package/schematics/ng-update/index_bundled.js +6 -1
  62. package/schematics/ng-update/index_bundled.js.map +2 -2
  63. package/schematics/ng-update/ng_update_index_metadata.json +1 -1
  64. package/slide-toggle/_slide-toggle-theme.scss +19 -19
@@ -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;
@@ -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;
@@ -6,4 +6,4 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWhhcm5lc3MtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9idXR0b24vdGVzdGluZy9idXR0b24taGFybmVzcy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Jhc2VIYXJuZXNzRmlsdGVyc30gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuXG4vKiogQSBzZXQgb2YgY3JpdGVyaWEgdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgYSBsaXN0IG9mIGJ1dHRvbiBoYXJuZXNzIGluc3RhbmNlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uSGFybmVzc0ZpbHRlcnMgZXh0ZW5kcyBCYXNlSGFybmVzc0ZpbHRlcnMge1xuICAvKiogT25seSBmaW5kIGluc3RhbmNlcyB3aG9zZSB0ZXh0IG1hdGNoZXMgdGhlIGdpdmVuIHZhbHVlLiAqL1xuICB0ZXh0Pzogc3RyaW5nIHwgUmVnRXhwO1xufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWhhcm5lc3MtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC9idXR0b24vdGVzdGluZy9idXR0b24taGFybmVzcy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Jhc2VIYXJuZXNzRmlsdGVyc30gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuXG4vKiogUG9zc2libGUgYnV0dG9uIGFwcGVhcmFuY2VzLiAqL1xuZXhwb3J0IHR5cGUgQnV0dG9uVmFyaWFudCA9ICdiYXNpYycgfCAncmFpc2VkJyB8ICdmbGF0JyB8ICdpY29uJyB8ICdzdHJva2VkJyB8ICdmYWInIHwgJ21pbmktZmFiJztcblxuLyoqIEEgc2V0IG9mIGNyaXRlcmlhIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIGEgbGlzdCBvZiBidXR0b24gaGFybmVzcyBpbnN0YW5jZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvbkhhcm5lc3NGaWx0ZXJzIGV4dGVuZHMgQmFzZUhhcm5lc3NGaWx0ZXJzIHtcbiAgLyoqIE9ubHkgZmluZCBpbnN0YW5jZXMgd2hvc2UgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiB2YWx1ZS4gKi9cbiAgdGV4dD86IHN0cmluZyB8IFJlZ0V4cDtcblxuICAvKiogT25seSBmaW5kIGluc3RhbmNlcyB3aXRoIGEgdmFyaWFudC4gKi9cbiAgdmFyaWFudD86IEJ1dHRvblZhcmlhbnQ7XG59XG4iXX0=
@@ -14,10 +14,13 @@ export class MatButtonHarness extends ContentContainerComponentHarness {
14
14
  * @param options Options for narrowing the search:
15
15
  * - `selector` finds a button whose host element matches the given selector.
16
16
  * - `text` finds a button with specific text content.
17
+ * - `variant` finds buttons matching a specific variant.
17
18
  * @return a `HarnessPredicate` configured with the given options.
18
19
  */
19
20
  static with(options = {}) {
20
- return new HarnessPredicate(this, options).addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
21
+ return new HarnessPredicate(this, options)
22
+ .addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text))
23
+ .addOption('variant', options.variant, (harness, variant) => HarnessPredicate.stringMatches(harness.getVariant(), variant));
21
24
  }
22
25
  async click(...args) {
23
26
  return (await this.host()).click(...args);
@@ -43,8 +46,31 @@ export class MatButtonHarness extends ContentContainerComponentHarness {
43
46
  async isFocused() {
44
47
  return (await this.host()).isFocused();
45
48
  }
49
+ /** Gets the variant of the button. */
50
+ async getVariant() {
51
+ const host = await this.host();
52
+ if ((await host.getAttribute('mat-raised-button')) != null) {
53
+ return 'raised';
54
+ }
55
+ else if ((await host.getAttribute('mat-flat-button')) != null) {
56
+ return 'flat';
57
+ }
58
+ else if ((await host.getAttribute('mat-icon-button')) != null) {
59
+ return 'icon';
60
+ }
61
+ else if ((await host.getAttribute('mat-stroked-button')) != null) {
62
+ return 'stroked';
63
+ }
64
+ else if ((await host.getAttribute('mat-fab')) != null) {
65
+ return 'fab';
66
+ }
67
+ else if ((await host.getAttribute('mat-mini-fab')) != null) {
68
+ return 'mini-fab';
69
+ }
70
+ return 'basic';
71
+ }
46
72
  }
47
73
  // TODO(jelbourn) use a single class, like `.mat-button-base`
48
74
  MatButtonHarness.hostSelector = `[mat-button], [mat-raised-button], [mat-flat-button],
49
75
  [mat-icon-button], [mat-stroked-button], [mat-fab], [mat-mini-fab]`;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYnV0dG9uL3Rlc3RpbmcvYnV0dG9uLWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUVMLGdDQUFnQyxFQUNoQyxnQkFBZ0IsR0FDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdDQUFnQztJQUtwRTs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUVULFVBQWdDLEVBQUU7UUFFbEMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDM0YsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFZRCxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBd0M7UUFDckQsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUksSUFBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsS0FBSyxDQUFDLE9BQU87UUFDWCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0dBQWdHO0lBQ2hHLEtBQUssQ0FBQyxLQUFLO1FBQ1QsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELDhGQUE4RjtJQUM5RixLQUFLLENBQUMsSUFBSTtRQUNSLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsS0FBSyxDQUFDLFNBQVM7UUFDYixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztBQTFERCw2REFBNkQ7QUFDdEQsNkJBQVksR0FBRzs0RkFDb0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnRIYXJuZXNzQ29uc3RydWN0b3IsXG4gIENvbnRlbnRDb250YWluZXJDb21wb25lbnRIYXJuZXNzLFxuICBIYXJuZXNzUHJlZGljYXRlLFxufSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7QnV0dG9uSGFybmVzc0ZpbHRlcnN9IGZyb20gJy4vYnV0dG9uLWhhcm5lc3MtZmlsdGVycyc7XG5cbi8qKiBIYXJuZXNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgTURDLWJhc2VkIG1hdC1idXR0b24gaW4gdGVzdHMuICovXG5leHBvcnQgY2xhc3MgTWF0QnV0dG9uSGFybmVzcyBleHRlbmRzIENvbnRlbnRDb250YWluZXJDb21wb25lbnRIYXJuZXNzIHtcbiAgLy8gVE9ETyhqZWxib3VybikgdXNlIGEgc2luZ2xlIGNsYXNzLCBsaWtlIGAubWF0LWJ1dHRvbi1iYXNlYFxuICBzdGF0aWMgaG9zdFNlbGVjdG9yID0gYFttYXQtYnV0dG9uXSwgW21hdC1yYWlzZWQtYnV0dG9uXSwgW21hdC1mbGF0LWJ1dHRvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgW21hdC1pY29uLWJ1dHRvbl0sIFttYXQtc3Ryb2tlZC1idXR0b25dLCBbbWF0LWZhYl0sIFttYXQtbWluaS1mYWJdYDtcblxuICAvKipcbiAgICogR2V0cyBhIGBIYXJuZXNzUHJlZGljYXRlYCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgYSBidXR0b24gd2l0aCBzcGVjaWZpYyBhdHRyaWJ1dGVzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBuYXJyb3dpbmcgdGhlIHNlYXJjaDpcbiAgICogICAtIGBzZWxlY3RvcmAgZmluZHMgYSBidXR0b24gd2hvc2UgaG9zdCBlbGVtZW50IG1hdGNoZXMgdGhlIGdpdmVuIHNlbGVjdG9yLlxuICAgKiAgIC0gYHRleHRgIGZpbmRzIGEgYnV0dG9uIHdpdGggc3BlY2lmaWMgdGV4dCBjb250ZW50LlxuICAgKiBAcmV0dXJuIGEgYEhhcm5lc3NQcmVkaWNhdGVgIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICovXG4gIHN0YXRpYyB3aXRoPFQgZXh0ZW5kcyBNYXRCdXR0b25IYXJuZXNzPihcbiAgICB0aGlzOiBDb21wb25lbnRIYXJuZXNzQ29uc3RydWN0b3I8VD4sXG4gICAgb3B0aW9uczogQnV0dG9uSGFybmVzc0ZpbHRlcnMgPSB7fSxcbiAgKTogSGFybmVzc1ByZWRpY2F0ZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBIYXJuZXNzUHJlZGljYXRlKHRoaXMsIG9wdGlvbnMpLmFkZE9wdGlvbigndGV4dCcsIG9wdGlvbnMudGV4dCwgKGhhcm5lc3MsIHRleHQpID0+XG4gICAgICBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoaGFybmVzcy5nZXRUZXh0KCksIHRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2tzIHRoZSBidXR0b24gYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyB0b3AtbGVmdC5cbiAgICogQHBhcmFtIHJlbGF0aXZlWCBUaGUgcmVsYXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgY2xpY2suXG4gICAqIEBwYXJhbSByZWxhdGl2ZVkgVGhlIHJlbGF0aXZlIHkgcG9zaXRpb24gb2YgdGhlIGNsaWNrLlxuICAgKi9cbiAgY2xpY2socmVsYXRpdmVYOiBudW1iZXIsIHJlbGF0aXZlWTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIENsaWNrcyB0aGUgYnV0dG9uIGF0IGl0cyBjZW50ZXIuICovXG4gIGNsaWNrKGxvY2F0aW9uOiAnY2VudGVyJyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBDbGlja3MgdGhlIGJ1dHRvbi4gKi9cbiAgY2xpY2soKTogUHJvbWlzZTx2b2lkPjtcbiAgYXN5bmMgY2xpY2soLi4uYXJnczogW10gfCBbJ2NlbnRlciddIHwgW251bWJlciwgbnVtYmVyXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmNsaWNrKC4uLihhcmdzIGFzIFtdKSk7XG4gIH1cblxuICAvKiogR2V0cyBhIGJvb2xlYW4gcHJvbWlzZSBpbmRpY2F0aW5nIGlmIHRoZSBidXR0b24gaXMgZGlzYWJsZWQuICovXG4gIGFzeW5jIGlzRGlzYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSAoYXdhaXQgdGhpcy5ob3N0KCkpLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICByZXR1cm4gY29lcmNlQm9vbGVhblByb3BlcnR5KGF3YWl0IGRpc2FibGVkKTtcbiAgfVxuXG4gIC8qKiBHZXRzIGEgcHJvbWlzZSBmb3IgdGhlIGJ1dHRvbidzIGxhYmVsIHRleHQuICovXG4gIGFzeW5jIGdldFRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS50ZXh0KCk7XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgYnV0dG9uIGFuZCByZXR1cm5zIGEgdm9pZCBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHdoZW4gdGhlIGFjdGlvbiBpcyBjb21wbGV0ZS4gKi9cbiAgYXN5bmMgZm9jdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBCbHVycyB0aGUgYnV0dG9uIGFuZCByZXR1cm5zIGEgdm9pZCBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHdoZW4gdGhlIGFjdGlvbiBpcyBjb21wbGV0ZS4gKi9cbiAgYXN5bmMgYmx1cigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5ibHVyKCk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYnV0dG9uIGlzIGZvY3VzZWQuICovXG4gIGFzeW5jIGlzRm9jdXNlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5pc0ZvY3VzZWQoKTtcbiAgfVxufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWhhcm5lc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvYnV0dG9uL3Rlc3RpbmcvYnV0dG9uLWhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUVMLGdDQUFnQyxFQUNoQyxnQkFBZ0IsR0FDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdDQUFnQztJQUtwRTs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FFVCxVQUFnQyxFQUFFO1FBRWxDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQ3ZDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUNqRCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUN4RDthQUNBLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUMxRCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUM5RCxDQUFDO0lBQ04sQ0FBQztJQVlELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUF3QztRQUNyRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBSSxJQUFXLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxPQUFPLHFCQUFxQixDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxLQUFLLENBQUMsT0FBTztRQUNYLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsS0FBSyxDQUFDLEtBQUs7UUFDVCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsOEZBQThGO0lBQzlGLEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxLQUFLLENBQUMsU0FBUztRQUNiLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDMUQsT0FBTyxRQUFRLENBQUM7U0FDakI7YUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDL0QsT0FBTyxNQUFNLENBQUM7U0FDZjthQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUMvRCxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2xFLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO2FBQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUM1RCxPQUFPLFVBQVUsQ0FBQztTQUNuQjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O0FBcEZELDZEQUE2RDtBQUN0RCw2QkFBWSxHQUFHOzRGQUNvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudEhhcm5lc3NDb25zdHJ1Y3RvcixcbiAgQ29udGVudENvbnRhaW5lckNvbXBvbmVudEhhcm5lc3MsXG4gIEhhcm5lc3NQcmVkaWNhdGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXN0aW5nJztcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtCdXR0b25IYXJuZXNzRmlsdGVycywgQnV0dG9uVmFyaWFudH0gZnJvbSAnLi9idXR0b24taGFybmVzcy1maWx0ZXJzJztcblxuLyoqIEhhcm5lc3MgZm9yIGludGVyYWN0aW5nIHdpdGggYSBNREMtYmFzZWQgbWF0LWJ1dHRvbiBpbiB0ZXN0cy4gKi9cbmV4cG9ydCBjbGFzcyBNYXRCdXR0b25IYXJuZXNzIGV4dGVuZHMgQ29udGVudENvbnRhaW5lckNvbXBvbmVudEhhcm5lc3Mge1xuICAvLyBUT0RPKGplbGJvdXJuKSB1c2UgYSBzaW5nbGUgY2xhc3MsIGxpa2UgYC5tYXQtYnV0dG9uLWJhc2VgXG4gIHN0YXRpYyBob3N0U2VsZWN0b3IgPSBgW21hdC1idXR0b25dLCBbbWF0LXJhaXNlZC1idXR0b25dLCBbbWF0LWZsYXQtYnV0dG9uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0LWljb24tYnV0dG9uXSwgW21hdC1zdHJva2VkLWJ1dHRvbl0sIFttYXQtZmFiXSwgW21hdC1taW5pLWZhYl1gO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhIGJ1dHRvbiB3aXRoIHNwZWNpZmljIGF0dHJpYnV0ZXMuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIG5hcnJvd2luZyB0aGUgc2VhcmNoOlxuICAgKiAgIC0gYHNlbGVjdG9yYCBmaW5kcyBhIGJ1dHRvbiB3aG9zZSBob3N0IGVsZW1lbnQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gICAqICAgLSBgdGV4dGAgZmluZHMgYSBidXR0b24gd2l0aCBzcGVjaWZpYyB0ZXh0IGNvbnRlbnQuXG4gICAqICAgLSBgdmFyaWFudGAgZmluZHMgYnV0dG9ucyBtYXRjaGluZyBhIHNwZWNpZmljIHZhcmlhbnQuXG4gICAqIEByZXR1cm4gYSBgSGFybmVzc1ByZWRpY2F0ZWAgY29uZmlndXJlZCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKi9cbiAgc3RhdGljIHdpdGg8VCBleHRlbmRzIE1hdEJ1dHRvbkhhcm5lc3M+KFxuICAgIHRoaXM6IENvbXBvbmVudEhhcm5lc3NDb25zdHJ1Y3RvcjxUPixcbiAgICBvcHRpb25zOiBCdXR0b25IYXJuZXNzRmlsdGVycyA9IHt9LFxuICApOiBIYXJuZXNzUHJlZGljYXRlPFQ+IHtcbiAgICByZXR1cm4gbmV3IEhhcm5lc3NQcmVkaWNhdGUodGhpcywgb3B0aW9ucylcbiAgICAgIC5hZGRPcHRpb24oJ3RleHQnLCBvcHRpb25zLnRleHQsIChoYXJuZXNzLCB0ZXh0KSA9PlxuICAgICAgICBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoaGFybmVzcy5nZXRUZXh0KCksIHRleHQpLFxuICAgICAgKVxuICAgICAgLmFkZE9wdGlvbigndmFyaWFudCcsIG9wdGlvbnMudmFyaWFudCwgKGhhcm5lc3MsIHZhcmlhbnQpID0+XG4gICAgICAgIEhhcm5lc3NQcmVkaWNhdGUuc3RyaW5nTWF0Y2hlcyhoYXJuZXNzLmdldFZhcmlhbnQoKSwgdmFyaWFudCksXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyB0aGUgYnV0dG9uIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgdG9wLWxlZnQuXG4gICAqIEBwYXJhbSByZWxhdGl2ZVggVGhlIHJlbGF0aXZlIHggcG9zaXRpb24gb2YgdGhlIGNsaWNrLlxuICAgKiBAcGFyYW0gcmVsYXRpdmVZIFRoZSByZWxhdGl2ZSB5IHBvc2l0aW9uIG9mIHRoZSBjbGljay5cbiAgICovXG4gIGNsaWNrKHJlbGF0aXZlWDogbnVtYmVyLCByZWxhdGl2ZVk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIC8qKiBDbGlja3MgdGhlIGJ1dHRvbiBhdCBpdHMgY2VudGVyLiAqL1xuICBjbGljayhsb2NhdGlvbjogJ2NlbnRlcicpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogQ2xpY2tzIHRoZSBidXR0b24uICovXG4gIGNsaWNrKCk6IFByb21pc2U8dm9pZD47XG4gIGFzeW5jIGNsaWNrKC4uLmFyZ3M6IFtdIHwgWydjZW50ZXInXSB8IFtudW1iZXIsIG51bWJlcl0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaG9zdCgpKS5jbGljayguLi4oYXJncyBhcyBbXSkpO1xuICB9XG5cbiAgLyoqIEdldHMgYSBib29sZWFuIHByb21pc2UgaW5kaWNhdGluZyBpZiB0aGUgYnV0dG9uIGlzIGRpc2FibGVkLiAqL1xuICBhc3luYyBpc0Rpc2FibGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRpc2FibGVkID0gKGF3YWl0IHRoaXMuaG9zdCgpKS5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgcmV0dXJuIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShhd2FpdCBkaXNhYmxlZCk7XG4gIH1cblxuICAvKiogR2V0cyBhIHByb21pc2UgZm9yIHRoZSBidXR0b24ncyBsYWJlbCB0ZXh0LiAqL1xuICBhc3luYyBnZXRUZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkudGV4dCgpO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgdGhlIGJ1dHRvbiBhbmQgcmV0dXJucyBhIHZvaWQgcHJvbWlzZSB0aGF0IGluZGljYXRlcyB3aGVuIHRoZSBhY3Rpb24gaXMgY29tcGxldGUuICovXG4gIGFzeW5jIGZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5ob3N0KCkpLmZvY3VzKCk7XG4gIH1cblxuICAvKiogQmx1cnMgdGhlIGJ1dHRvbiBhbmQgcmV0dXJucyBhIHZvaWQgcHJvbWlzZSB0aGF0IGluZGljYXRlcyB3aGVuIHRoZSBhY3Rpb24gaXMgY29tcGxldGUuICovXG4gIGFzeW5jIGJsdXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkuYmx1cigpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBmb2N1c2VkLiAqL1xuICBhc3luYyBpc0ZvY3VzZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmhvc3QoKSkuaXNGb2N1c2VkKCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgdmFyaWFudCBvZiB0aGUgYnV0dG9uLiAqL1xuICBhc3luYyBnZXRWYXJpYW50KCk6IFByb21pc2U8QnV0dG9uVmFyaWFudD4ge1xuICAgIGNvbnN0IGhvc3QgPSBhd2FpdCB0aGlzLmhvc3QoKTtcblxuICAgIGlmICgoYXdhaXQgaG9zdC5nZXRBdHRyaWJ1dGUoJ21hdC1yYWlzZWQtYnV0dG9uJykpICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAncmFpc2VkJztcbiAgICB9IGVsc2UgaWYgKChhd2FpdCBob3N0LmdldEF0dHJpYnV0ZSgnbWF0LWZsYXQtYnV0dG9uJykpICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAnZmxhdCc7XG4gICAgfSBlbHNlIGlmICgoYXdhaXQgaG9zdC5nZXRBdHRyaWJ1dGUoJ21hdC1pY29uLWJ1dHRvbicpKSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gJ2ljb24nO1xuICAgIH0gZWxzZSBpZiAoKGF3YWl0IGhvc3QuZ2V0QXR0cmlidXRlKCdtYXQtc3Ryb2tlZC1idXR0b24nKSkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdzdHJva2VkJztcbiAgICB9IGVsc2UgaWYgKChhd2FpdCBob3N0LmdldEF0dHJpYnV0ZSgnbWF0LWZhYicpKSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gJ2ZhYic7XG4gICAgfSBlbHNlIGlmICgoYXdhaXQgaG9zdC5nZXRBdHRyaWJ1dGUoJ21hdC1taW5pLWZhYicpKSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gJ21pbmktZmFiJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2Jhc2ljJztcbiAgfVxufVxuIl19