@angular/material 21.0.0-next.8 → 21.0.0-rc.0

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 (204) hide show
  1. package/core/tokens/_classes.scss +1 -1
  2. package/core/tokens/m2/_md-sys-color.scss +17 -17
  3. package/fesm2022/_animation-chunk.mjs +10 -16
  4. package/fesm2022/_animation-chunk.mjs.map +1 -1
  5. package/fesm2022/_date-formats-chunk.mjs +68 -164
  6. package/fesm2022/_date-formats-chunk.mjs.map +1 -1
  7. package/fesm2022/_date-range-input-harness-chunk.mjs +284 -463
  8. package/fesm2022/_date-range-input-harness-chunk.mjs.map +1 -1
  9. package/fesm2022/_error-options-chunk.mjs +56 -19
  10. package/fesm2022/_error-options-chunk.mjs.map +1 -1
  11. package/fesm2022/_error-state-chunk.mjs +24 -31
  12. package/fesm2022/_error-state-chunk.mjs.map +1 -1
  13. package/fesm2022/_form-field-chunk.mjs +1224 -1017
  14. package/fesm2022/_form-field-chunk.mjs.map +1 -1
  15. package/fesm2022/_icon-button-chunk.mjs +243 -187
  16. package/fesm2022/_icon-button-chunk.mjs.map +1 -1
  17. package/fesm2022/_icon-registry-chunk.mjs +350 -575
  18. package/fesm2022/_icon-registry-chunk.mjs.map +1 -1
  19. package/fesm2022/_input-harness-chunk.mjs +56 -107
  20. package/fesm2022/_input-harness-chunk.mjs.map +1 -1
  21. package/fesm2022/_input-value-accessor-chunk.mjs +0 -6
  22. package/fesm2022/_input-value-accessor-chunk.mjs.map +1 -1
  23. package/fesm2022/_internal-form-field-chunk.mjs +59 -19
  24. package/fesm2022/_internal-form-field-chunk.mjs.map +1 -1
  25. package/fesm2022/_line-chunk.mjs +83 -43
  26. package/fesm2022/_line-chunk.mjs.map +1 -1
  27. package/fesm2022/_option-chunk.mjs +348 -311
  28. package/fesm2022/_option-chunk.mjs.map +1 -1
  29. package/fesm2022/_option-harness-chunk.mjs +23 -39
  30. package/fesm2022/_option-harness-chunk.mjs.map +1 -1
  31. package/fesm2022/_option-module-chunk.mjs +36 -10
  32. package/fesm2022/_option-module-chunk.mjs.map +1 -1
  33. package/fesm2022/_pseudo-checkbox-chunk.mjs +79 -44
  34. package/fesm2022/_pseudo-checkbox-chunk.mjs.map +1 -1
  35. package/fesm2022/_pseudo-checkbox-module-chunk.mjs +36 -10
  36. package/fesm2022/_pseudo-checkbox-module-chunk.mjs.map +1 -1
  37. package/fesm2022/_public-api-chunk.mjs +71 -134
  38. package/fesm2022/_public-api-chunk.mjs.map +1 -1
  39. package/fesm2022/_ripple-chunk.mjs +504 -600
  40. package/fesm2022/_ripple-chunk.mjs.map +1 -1
  41. package/fesm2022/_ripple-loader-chunk.mjs +120 -138
  42. package/fesm2022/_ripple-loader-chunk.mjs.map +1 -1
  43. package/fesm2022/_ripple-module-chunk.mjs +36 -10
  44. package/fesm2022/_ripple-module-chunk.mjs.map +1 -1
  45. package/fesm2022/_structural-styles-chunk.mjs +37 -10
  46. package/fesm2022/_structural-styles-chunk.mjs.map +1 -1
  47. package/fesm2022/_tooltip-chunk.mjs +810 -888
  48. package/fesm2022/_tooltip-chunk.mjs.map +1 -1
  49. package/fesm2022/autocomplete-testing.mjs +62 -86
  50. package/fesm2022/autocomplete-testing.mjs.map +1 -1
  51. package/fesm2022/autocomplete.mjs +965 -1126
  52. package/fesm2022/autocomplete.mjs.map +1 -1
  53. package/fesm2022/badge-testing.mjs +38 -54
  54. package/fesm2022/badge-testing.mjs.map +1 -1
  55. package/fesm2022/badge.mjs +321 -272
  56. package/fesm2022/badge.mjs.map +1 -1
  57. package/fesm2022/bottom-sheet-testing.mjs +10 -24
  58. package/fesm2022/bottom-sheet-testing.mjs.map +1 -1
  59. package/fesm2022/bottom-sheet.mjs +349 -344
  60. package/fesm2022/bottom-sheet.mjs.map +1 -1
  61. package/fesm2022/button-testing.mjs +60 -94
  62. package/fesm2022/button-testing.mjs.map +1 -1
  63. package/fesm2022/button-toggle-testing.mjs +76 -125
  64. package/fesm2022/button-toggle-testing.mjs.map +1 -1
  65. package/fesm2022/button-toggle.mjs +752 -662
  66. package/fesm2022/button-toggle.mjs.map +1 -1
  67. package/fesm2022/button.mjs +263 -158
  68. package/fesm2022/button.mjs.map +1 -1
  69. package/fesm2022/card-testing.mjs +19 -33
  70. package/fesm2022/card-testing.mjs.map +1 -1
  71. package/fesm2022/card.mjs +576 -272
  72. package/fesm2022/card.mjs.map +1 -1
  73. package/fesm2022/checkbox-testing.mjs +71 -123
  74. package/fesm2022/checkbox-testing.mjs.map +1 -1
  75. package/fesm2022/checkbox.mjs +515 -477
  76. package/fesm2022/checkbox.mjs.map +1 -1
  77. package/fesm2022/chips-testing.mjs +201 -350
  78. package/fesm2022/chips-testing.mjs.map +1 -1
  79. package/fesm2022/chips.mjs +2552 -2289
  80. package/fesm2022/chips.mjs.map +1 -1
  81. package/fesm2022/core-testing.mjs +14 -28
  82. package/fesm2022/core-testing.mjs.map +1 -1
  83. package/fesm2022/core.mjs +357 -328
  84. package/fesm2022/core.mjs.map +1 -1
  85. package/fesm2022/datepicker-testing.mjs +15 -25
  86. package/fesm2022/datepicker-testing.mjs.map +1 -1
  87. package/fesm2022/datepicker.mjs +4826 -4563
  88. package/fesm2022/datepicker.mjs.map +1 -1
  89. package/fesm2022/dialog-testing.mjs +93 -129
  90. package/fesm2022/dialog-testing.mjs.map +1 -1
  91. package/fesm2022/dialog.mjs +810 -829
  92. package/fesm2022/dialog.mjs.map +1 -1
  93. package/fesm2022/divider-testing.mjs +10 -11
  94. package/fesm2022/divider-testing.mjs.map +1 -1
  95. package/fesm2022/divider.mjs +119 -43
  96. package/fesm2022/divider.mjs.map +1 -1
  97. package/fesm2022/expansion-testing.mjs +74 -130
  98. package/fesm2022/expansion-testing.mjs.map +1 -1
  99. package/fesm2022/expansion.mjs +703 -515
  100. package/fesm2022/expansion.mjs.map +1 -1
  101. package/fesm2022/form-field-testing-control.mjs +16 -33
  102. package/fesm2022/form-field-testing-control.mjs.map +1 -1
  103. package/fesm2022/form-field-testing.mjs +118 -179
  104. package/fesm2022/form-field-testing.mjs.map +1 -1
  105. package/fesm2022/form-field.mjs +36 -10
  106. package/fesm2022/form-field.mjs.map +1 -1
  107. package/fesm2022/grid-list-testing.mjs +65 -113
  108. package/fesm2022/grid-list-testing.mjs.map +1 -1
  109. package/fesm2022/grid-list.mjs +559 -494
  110. package/fesm2022/grid-list.mjs.map +1 -1
  111. package/fesm2022/icon-testing.mjs +148 -127
  112. package/fesm2022/icon-testing.mjs.map +1 -1
  113. package/fesm2022/icon.mjs +325 -351
  114. package/fesm2022/icon.mjs.map +1 -1
  115. package/fesm2022/input-testing.mjs +59 -99
  116. package/fesm2022/input-testing.mjs.map +1 -1
  117. package/fesm2022/input.mjs +457 -520
  118. package/fesm2022/input.mjs.map +1 -1
  119. package/fesm2022/list-testing.mjs +251 -434
  120. package/fesm2022/list-testing.mjs.map +1 -1
  121. package/fesm2022/list.mjs +1522 -1204
  122. package/fesm2022/list.mjs.map +1 -1
  123. package/fesm2022/material.mjs +0 -5
  124. package/fesm2022/material.mjs.map +1 -1
  125. package/fesm2022/menu-testing.mjs +159 -228
  126. package/fesm2022/menu-testing.mjs.map +1 -1
  127. package/fesm2022/menu.mjs +1338 -1343
  128. package/fesm2022/menu.mjs.map +1 -1
  129. package/fesm2022/paginator-testing.mjs +55 -79
  130. package/fesm2022/paginator-testing.mjs.map +1 -1
  131. package/fesm2022/paginator.mjs +381 -309
  132. package/fesm2022/paginator.mjs.map +1 -1
  133. package/fesm2022/progress-bar-testing.mjs +12 -21
  134. package/fesm2022/progress-bar-testing.mjs.map +1 -1
  135. package/fesm2022/progress-bar.mjs +224 -169
  136. package/fesm2022/progress-bar.mjs.map +1 -1
  137. package/fesm2022/progress-spinner-testing.mjs +13 -23
  138. package/fesm2022/progress-spinner-testing.mjs.map +1 -1
  139. package/fesm2022/progress-spinner.mjs +235 -160
  140. package/fesm2022/progress-spinner.mjs.map +1 -1
  141. package/fesm2022/radio-testing.mjs +133 -208
  142. package/fesm2022/radio-testing.mjs.map +1 -1
  143. package/fesm2022/radio.mjs +712 -679
  144. package/fesm2022/radio.mjs.map +1 -1
  145. package/fesm2022/select-testing.mjs +83 -117
  146. package/fesm2022/select-testing.mjs.map +1 -1
  147. package/fesm2022/select.mjs +1116 -1246
  148. package/fesm2022/select.mjs.map +1 -1
  149. package/fesm2022/sidenav-testing.mjs +54 -120
  150. package/fesm2022/sidenav-testing.mjs.map +1 -1
  151. package/fesm2022/sidenav.mjs +1078 -995
  152. package/fesm2022/sidenav.mjs.map +1 -1
  153. package/fesm2022/slide-toggle-testing.mjs +57 -92
  154. package/fesm2022/slide-toggle-testing.mjs.map +1 -1
  155. package/fesm2022/slide-toggle.mjs +369 -279
  156. package/fesm2022/slide-toggle.mjs.map +1 -1
  157. package/fesm2022/slider-testing.mjs +90 -138
  158. package/fesm2022/slider-testing.mjs.map +1 -1
  159. package/fesm2022/slider.mjs +1651 -1716
  160. package/fesm2022/slider.mjs.map +1 -1
  161. package/fesm2022/snack-bar-testing.mjs +40 -87
  162. package/fesm2022/snack-bar-testing.mjs.map +1 -1
  163. package/fesm2022/snack-bar.mjs +763 -714
  164. package/fesm2022/snack-bar.mjs.map +1 -1
  165. package/fesm2022/sort-testing.mjs +45 -66
  166. package/fesm2022/sort-testing.mjs.map +1 -1
  167. package/fesm2022/sort.mjs +419 -344
  168. package/fesm2022/sort.mjs.map +1 -1
  169. package/fesm2022/stepper-testing.mjs +78 -154
  170. package/fesm2022/stepper-testing.mjs.map +1 -1
  171. package/fesm2022/stepper.mjs +790 -498
  172. package/fesm2022/stepper.mjs.map +1 -1
  173. package/fesm2022/table-testing.mjs +125 -186
  174. package/fesm2022/table-testing.mjs.map +1 -1
  175. package/fesm2022/table.mjs +1026 -684
  176. package/fesm2022/table.mjs.map +1 -1
  177. package/fesm2022/tabs-testing.mjs +125 -197
  178. package/fesm2022/tabs-testing.mjs.map +1 -1
  179. package/fesm2022/tabs.mjs +2351 -2028
  180. package/fesm2022/tabs.mjs.map +1 -1
  181. package/fesm2022/timepicker-testing.mjs +113 -172
  182. package/fesm2022/timepicker-testing.mjs.map +1 -1
  183. package/fesm2022/timepicker.mjs +1019 -826
  184. package/fesm2022/timepicker.mjs.map +1 -1
  185. package/fesm2022/toolbar-testing.mjs +16 -27
  186. package/fesm2022/toolbar-testing.mjs.map +1 -1
  187. package/fesm2022/toolbar.mjs +163 -78
  188. package/fesm2022/toolbar.mjs.map +1 -1
  189. package/fesm2022/tooltip-testing.mjs +41 -52
  190. package/fesm2022/tooltip-testing.mjs.map +1 -1
  191. package/fesm2022/tooltip.mjs +36 -10
  192. package/fesm2022/tooltip.mjs.map +1 -1
  193. package/fesm2022/tree-testing.mjs +86 -162
  194. package/fesm2022/tree-testing.mjs.map +1 -1
  195. package/fesm2022/tree.mjs +638 -466
  196. package/fesm2022/tree.mjs.map +1 -1
  197. package/package.json +2 -2
  198. package/schematics/ng-add/index.js +1 -1
  199. package/types/expansion.d.ts +4 -2
  200. package/types/menu-testing.d.ts +2 -0
  201. package/types/select.d.ts +1 -1
  202. package/types/sort.d.ts +1 -1
  203. package/types/table-testing.d.ts +27 -1
  204. package/types/timepicker.d.ts +148 -128
@@ -16,144 +16,108 @@ import 'rxjs/operators';
16
16
  import '@angular/cdk/keycodes';
17
17
  import '@angular/cdk/bidi';
18
18
 
19
- /** Selectors for different sections of the mat-dialog that can contain user content. */
20
19
  var MatDialogSection;
21
20
  (function (MatDialogSection) {
22
- MatDialogSection["TITLE"] = ".mat-mdc-dialog-title";
23
- MatDialogSection["CONTENT"] = ".mat-mdc-dialog-content";
24
- MatDialogSection["ACTIONS"] = ".mat-mdc-dialog-actions";
21
+ MatDialogSection["TITLE"] = ".mat-mdc-dialog-title";
22
+ MatDialogSection["CONTENT"] = ".mat-mdc-dialog-content";
23
+ MatDialogSection["ACTIONS"] = ".mat-mdc-dialog-actions";
25
24
  })(MatDialogSection || (MatDialogSection = {}));
26
- /** Harness for interacting with a standard `MatDialog` in tests. */
27
- class MatDialogHarness
28
- // @breaking-change 14.0.0 change generic type to MatDialogSection.
29
- extends ContentContainerComponentHarness {
30
- /** The selector for the host element of a `MatDialog` instance. */
31
- static hostSelector = '.mat-mdc-dialog-container';
32
- /**
33
- * Gets a `HarnessPredicate` that can be used to search for a dialog with specific attributes.
34
- * @param options Options for filtering which dialog instances are considered a match.
35
- * @return a `HarnessPredicate` configured with the given options.
36
- */
37
- static with(options = {}) {
38
- return new HarnessPredicate(this, options);
39
- }
40
- _title = this.locatorForOptional(MatDialogSection.TITLE);
41
- _content = this.locatorForOptional(MatDialogSection.CONTENT);
42
- _actions = this.locatorForOptional(MatDialogSection.ACTIONS);
43
- /** Gets the id of the dialog. */
44
- async getId() {
45
- const id = await (await this.host()).getAttribute('id');
46
- // In case no id has been specified, the "id" property always returns
47
- // an empty string. To make this method more explicit, we return null.
48
- return id !== '' ? id : null;
49
- }
50
- /** Gets the role of the dialog. */
51
- async getRole() {
52
- return (await this.host()).getAttribute('role');
53
- }
54
- /** Gets the value of the dialog's "aria-label" attribute. */
55
- async getAriaLabel() {
56
- return (await this.host()).getAttribute('aria-label');
57
- }
58
- /** Gets the value of the dialog's "aria-labelledby" attribute. */
59
- async getAriaLabelledby() {
60
- return (await this.host()).getAttribute('aria-labelledby');
61
- }
62
- /** Gets the value of the dialog's "aria-describedby" attribute. */
63
- async getAriaDescribedby() {
64
- return (await this.host()).getAttribute('aria-describedby');
65
- }
66
- /**
67
- * Closes the dialog by pressing escape.
68
- *
69
- * Note: this method does nothing if `disableClose` has been set to `true` for the dialog.
70
- */
71
- async close() {
72
- await (await this.host()).sendKeys(TestKey.ESCAPE);
73
- }
74
- /** Gets the dialog's text. */
75
- async getText() {
76
- return (await this.host()).text();
77
- }
78
- /** Gets the dialog's title text. This only works if the dialog is using mat-dialog-title. */
79
- async getTitleText() {
80
- return (await this._title())?.text() ?? '';
81
- }
82
- /** Gets the dialog's content text. This only works if the dialog is using mat-dialog-content. */
83
- async getContentText() {
84
- return (await this._content())?.text() ?? '';
85
- }
86
- /** Gets the dialog's actions text. This only works if the dialog is using mat-dialog-actions. */
87
- async getActionsText() {
88
- return (await this._actions())?.text() ?? '';
89
- }
25
+ class MatDialogHarness extends ContentContainerComponentHarness {
26
+ static hostSelector = '.mat-mdc-dialog-container';
27
+ static with(options = {}) {
28
+ return new HarnessPredicate(this, options);
29
+ }
30
+ _title = this.locatorForOptional(MatDialogSection.TITLE);
31
+ _content = this.locatorForOptional(MatDialogSection.CONTENT);
32
+ _actions = this.locatorForOptional(MatDialogSection.ACTIONS);
33
+ async getId() {
34
+ const id = await (await this.host()).getAttribute('id');
35
+ return id !== '' ? id : null;
36
+ }
37
+ async getRole() {
38
+ return (await this.host()).getAttribute('role');
39
+ }
40
+ async getAriaLabel() {
41
+ return (await this.host()).getAttribute('aria-label');
42
+ }
43
+ async getAriaLabelledby() {
44
+ return (await this.host()).getAttribute('aria-labelledby');
45
+ }
46
+ async getAriaDescribedby() {
47
+ return (await this.host()).getAttribute('aria-describedby');
48
+ }
49
+ async close() {
50
+ await (await this.host()).sendKeys(TestKey.ESCAPE);
51
+ }
52
+ async getText() {
53
+ return (await this.host()).text();
54
+ }
55
+ async getTitleText() {
56
+ return (await this._title())?.text() ?? '';
57
+ }
58
+ async getContentText() {
59
+ return (await this._content())?.text() ?? '';
60
+ }
61
+ async getActionsText() {
62
+ return (await this._actions())?.text() ?? '';
63
+ }
90
64
  }
91
65
 
92
66
  var MatTestDialogOpener_1;
93
- /** Test component that immediately opens a dialog when bootstrapped. */
94
67
  let MatTestDialogOpener = class MatTestDialogOpener {
95
- static { MatTestDialogOpener_1 = this; }
96
- dialog = inject(MatDialog);
97
- /** Component that should be opened with the MatDialog `open` method. */
98
- static component;
99
- /** Config that should be provided to the MatDialog `open` method. */
100
- static config;
101
- /** MatDialogRef returned from the MatDialog `open` method. */
102
- dialogRef;
103
- /** Data passed to the `MatDialog` close method. */
104
- closedResult;
105
- _afterClosedSubscription;
106
- _ngZone = inject(NgZone);
107
- /** Static method that prepares this class to open the provided component. */
108
- static withComponent(component, config) {
109
- MatTestDialogOpener_1.component = component;
110
- MatTestDialogOpener_1.config = config;
111
- return MatTestDialogOpener_1;
112
- }
113
- constructor() {
114
- if (!MatTestDialogOpener_1.component) {
115
- throw new Error(`MatTestDialogOpener does not have a component provided.`);
116
- }
117
- this.dialogRef = this._ngZone.run(() => {
118
- const config = { ...(MatTestDialogOpener_1.config || {}) };
119
- config.enterAnimationDuration = 0;
120
- config.exitAnimationDuration = 0;
121
- return this.dialog.open(MatTestDialogOpener_1.component, config);
122
- });
123
- this._afterClosedSubscription = this.dialogRef.afterClosed().subscribe(result => {
124
- this.closedResult = result;
125
- });
68
+ static {
69
+ MatTestDialogOpener_1 = this;
70
+ }
71
+ dialog = inject(MatDialog);
72
+ static component;
73
+ static config;
74
+ dialogRef;
75
+ closedResult;
76
+ _afterClosedSubscription;
77
+ _ngZone = inject(NgZone);
78
+ static withComponent(component, config) {
79
+ MatTestDialogOpener_1.component = component;
80
+ MatTestDialogOpener_1.config = config;
81
+ return MatTestDialogOpener_1;
82
+ }
83
+ constructor() {
84
+ if (!MatTestDialogOpener_1.component) {
85
+ throw new Error(`MatTestDialogOpener does not have a component provided.`);
126
86
  }
127
- ngOnDestroy() {
128
- this._afterClosedSubscription.unsubscribe();
129
- MatTestDialogOpener_1.component = undefined;
130
- MatTestDialogOpener_1.config = undefined;
131
- }
132
- };
133
- MatTestDialogOpener = MatTestDialogOpener_1 = __decorate([
134
- Component({
135
- selector: 'mat-test-dialog-opener',
136
- template: '',
137
- changeDetection: ChangeDetectionStrategy.OnPush,
138
- encapsulation: ViewEncapsulation.None,
139
- }),
140
- __metadata("design:paramtypes", [])
141
- ], MatTestDialogOpener);
142
- let MatTestDialogOpenerModule = class MatTestDialogOpenerModule {
87
+ this.dialogRef = this._ngZone.run(() => {
88
+ const config = {
89
+ ...(MatTestDialogOpener_1.config || {})
90
+ };
91
+ config.enterAnimationDuration = 0;
92
+ config.exitAnimationDuration = 0;
93
+ return this.dialog.open(MatTestDialogOpener_1.component, config);
94
+ });
95
+ this._afterClosedSubscription = this.dialogRef.afterClosed().subscribe(result => {
96
+ this.closedResult = result;
97
+ });
98
+ }
99
+ ngOnDestroy() {
100
+ this._afterClosedSubscription.unsubscribe();
101
+ MatTestDialogOpener_1.component = undefined;
102
+ MatTestDialogOpener_1.config = undefined;
103
+ }
143
104
  };
144
- MatTestDialogOpenerModule = __decorate([
145
- NgModule({
146
- imports: [MatDialogModule, MatTestDialogOpener],
147
- providers: [
148
- {
149
- provide: MATERIAL_ANIMATIONS,
150
- useValue: {
151
- animationsDisabled: true,
152
- },
153
- },
154
- ],
155
- })
156
- ], MatTestDialogOpenerModule);
105
+ MatTestDialogOpener = MatTestDialogOpener_1 = __decorate([Component({
106
+ selector: 'mat-test-dialog-opener',
107
+ template: '',
108
+ changeDetection: ChangeDetectionStrategy.OnPush,
109
+ encapsulation: ViewEncapsulation.None
110
+ }), __metadata("design:paramtypes", [])], MatTestDialogOpener);
111
+ let MatTestDialogOpenerModule = class MatTestDialogOpenerModule {};
112
+ MatTestDialogOpenerModule = __decorate([NgModule({
113
+ imports: [MatDialogModule, MatTestDialogOpener],
114
+ providers: [{
115
+ provide: MATERIAL_ANIMATIONS,
116
+ useValue: {
117
+ animationsDisabled: true
118
+ }
119
+ }]
120
+ })], MatTestDialogOpenerModule);
157
121
 
158
122
  export { MatDialogHarness, MatDialogSection, MatTestDialogOpener, MatTestDialogOpenerModule };
159
123
  //# sourceMappingURL=dialog-testing.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/dialog/testing/dialog-harness.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/dialog/testing/dialog-opener.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n TestKey,\n} from '@angular/cdk/testing';\nimport {DialogHarnessFilters} from './dialog-harness-filters';\nimport {DialogRole} from '../../dialog';\n\n/** Selectors for different sections of the mat-dialog that can contain user content. */\nexport enum MatDialogSection {\n TITLE = '.mat-mdc-dialog-title',\n CONTENT = '.mat-mdc-dialog-content',\n ACTIONS = '.mat-mdc-dialog-actions',\n}\n\n/** Harness for interacting with a standard `MatDialog` in tests. */\nexport class MatDialogHarness\n // @breaking-change 14.0.0 change generic type to MatDialogSection.\n extends ContentContainerComponentHarness<MatDialogSection | string>\n{\n /** The selector for the host element of a `MatDialog` instance. */\n static hostSelector = '.mat-mdc-dialog-container';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a dialog with specific attributes.\n * @param options Options for filtering which dialog instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatDialogHarness>(\n this: ComponentHarnessConstructor<T>,\n options: DialogHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n protected _title = this.locatorForOptional(MatDialogSection.TITLE);\n protected _content = this.locatorForOptional(MatDialogSection.CONTENT);\n protected _actions = this.locatorForOptional(MatDialogSection.ACTIONS);\n\n /** Gets the id of the dialog. */\n async getId(): Promise<string | null> {\n const id = await (await this.host()).getAttribute('id');\n // In case no id has been specified, the \"id\" property always returns\n // an empty string. To make this method more explicit, we return null.\n return id !== '' ? id : null;\n }\n\n /** Gets the role of the dialog. */\n async getRole(): Promise<DialogRole | null> {\n return (await this.host()).getAttribute('role') as Promise<DialogRole | null>;\n }\n\n /** Gets the value of the dialog's \"aria-label\" attribute. */\n async getAriaLabel(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-label');\n }\n\n /** Gets the value of the dialog's \"aria-labelledby\" attribute. */\n async getAriaLabelledby(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-labelledby');\n }\n\n /** Gets the value of the dialog's \"aria-describedby\" attribute. */\n async getAriaDescribedby(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-describedby');\n }\n\n /**\n * Closes the dialog by pressing escape.\n *\n * Note: this method does nothing if `disableClose` has been set to `true` for the dialog.\n */\n async close(): Promise<void> {\n await (await this.host()).sendKeys(TestKey.ESCAPE);\n }\n\n /** Gets the dialog's text. */\n async getText() {\n return (await this.host()).text();\n }\n\n /** Gets the dialog's title text. This only works if the dialog is using mat-dialog-title. */\n async getTitleText() {\n return (await this._title())?.text() ?? '';\n }\n\n /** Gets the dialog's content text. This only works if the dialog is using mat-dialog-content. */\n async getContentText() {\n return (await this._content())?.text() ?? '';\n }\n\n /** Gets the dialog's actions text. This only works if the dialog is using mat-dialog-actions. */\n async getActionsText() {\n return (await this._actions())?.text() ?? '';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentType} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n NgModule,\n NgZone,\n OnDestroy,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogModule, MatDialogRef} from '../../dialog';\nimport {Subscription} from 'rxjs';\nimport {AnimationsConfig, MATERIAL_ANIMATIONS} from '@angular/material/core';\n\n/** Test component that immediately opens a dialog when bootstrapped. */\n@Component({\n selector: 'mat-test-dialog-opener',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatTestDialogOpener<T = unknown, R = unknown> implements OnDestroy {\n dialog = inject(MatDialog);\n\n /** Component that should be opened with the MatDialog `open` method. */\n protected static component: ComponentType<unknown> | undefined;\n\n /** Config that should be provided to the MatDialog `open` method. */\n protected static config: MatDialogConfig | undefined;\n\n /** MatDialogRef returned from the MatDialog `open` method. */\n dialogRef: MatDialogRef<T, R>;\n\n /** Data passed to the `MatDialog` close method. */\n closedResult: R | undefined;\n\n private readonly _afterClosedSubscription: Subscription;\n\n private readonly _ngZone = inject(NgZone);\n\n /** Static method that prepares this class to open the provided component. */\n static withComponent<T = unknown, R = unknown>(\n component: ComponentType<T>,\n config?: MatDialogConfig,\n ) {\n MatTestDialogOpener.component = component;\n MatTestDialogOpener.config = config;\n return MatTestDialogOpener as ComponentType<MatTestDialogOpener<T, R>>;\n }\n\n constructor(...args: unknown[]);\n\n constructor() {\n if (!MatTestDialogOpener.component) {\n throw new Error(`MatTestDialogOpener does not have a component provided.`);\n }\n\n this.dialogRef = this._ngZone.run(() => {\n const config = {...(MatTestDialogOpener.config || {})};\n config.enterAnimationDuration = 0;\n config.exitAnimationDuration = 0;\n return this.dialog.open<T, R>(MatTestDialogOpener.component as ComponentType<T>, config);\n });\n this._afterClosedSubscription = this.dialogRef.afterClosed().subscribe(result => {\n this.closedResult = result;\n });\n }\n\n ngOnDestroy() {\n this._afterClosedSubscription.unsubscribe();\n MatTestDialogOpener.component = undefined;\n MatTestDialogOpener.config = undefined;\n }\n}\n\n@NgModule({\n imports: [MatDialogModule, MatTestDialogOpener],\n providers: [\n {\n provide: MATERIAL_ANIMATIONS,\n useValue: {\n animationsDisabled: true,\n } as AnimationsConfig,\n },\n ],\n})\nexport class MatTestDialogOpenerModule {}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialog-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/dialog/testing/dialog-harness.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/dialog/testing/dialog-opener.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n TestKey,\n} from '@angular/cdk/testing';\nimport {DialogHarnessFilters} from './dialog-harness-filters';\nimport {DialogRole} from '../../dialog';\n\n/** Selectors for different sections of the mat-dialog that can contain user content. */\nexport enum MatDialogSection {\n TITLE = '.mat-mdc-dialog-title',\n CONTENT = '.mat-mdc-dialog-content',\n ACTIONS = '.mat-mdc-dialog-actions',\n}\n\n/** Harness for interacting with a standard `MatDialog` in tests. */\nexport class MatDialogHarness\n // @breaking-change 14.0.0 change generic type to MatDialogSection.\n extends ContentContainerComponentHarness<MatDialogSection | string>\n{\n /** The selector for the host element of a `MatDialog` instance. */\n static hostSelector = '.mat-mdc-dialog-container';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a dialog with specific attributes.\n * @param options Options for filtering which dialog instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatDialogHarness>(\n this: ComponentHarnessConstructor<T>,\n options: DialogHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n protected _title = this.locatorForOptional(MatDialogSection.TITLE);\n protected _content = this.locatorForOptional(MatDialogSection.CONTENT);\n protected _actions = this.locatorForOptional(MatDialogSection.ACTIONS);\n\n /** Gets the id of the dialog. */\n async getId(): Promise<string | null> {\n const id = await (await this.host()).getAttribute('id');\n // In case no id has been specified, the \"id\" property always returns\n // an empty string. To make this method more explicit, we return null.\n return id !== '' ? id : null;\n }\n\n /** Gets the role of the dialog. */\n async getRole(): Promise<DialogRole | null> {\n return (await this.host()).getAttribute('role') as Promise<DialogRole | null>;\n }\n\n /** Gets the value of the dialog's \"aria-label\" attribute. */\n async getAriaLabel(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-label');\n }\n\n /** Gets the value of the dialog's \"aria-labelledby\" attribute. */\n async getAriaLabelledby(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-labelledby');\n }\n\n /** Gets the value of the dialog's \"aria-describedby\" attribute. */\n async getAriaDescribedby(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-describedby');\n }\n\n /**\n * Closes the dialog by pressing escape.\n *\n * Note: this method does nothing if `disableClose` has been set to `true` for the dialog.\n */\n async close(): Promise<void> {\n await (await this.host()).sendKeys(TestKey.ESCAPE);\n }\n\n /** Gets the dialog's text. */\n async getText() {\n return (await this.host()).text();\n }\n\n /** Gets the dialog's title text. This only works if the dialog is using mat-dialog-title. */\n async getTitleText() {\n return (await this._title())?.text() ?? '';\n }\n\n /** Gets the dialog's content text. This only works if the dialog is using mat-dialog-content. */\n async getContentText() {\n return (await this._content())?.text() ?? '';\n }\n\n /** Gets the dialog's actions text. This only works if the dialog is using mat-dialog-actions. */\n async getActionsText() {\n return (await this._actions())?.text() ?? '';\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentType} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n NgModule,\n NgZone,\n OnDestroy,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogModule, MatDialogRef} from '../../dialog';\nimport {Subscription} from 'rxjs';\nimport {AnimationsConfig, MATERIAL_ANIMATIONS} from '@angular/material/core';\n\n/** Test component that immediately opens a dialog when bootstrapped. */\n@Component({\n selector: 'mat-test-dialog-opener',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatTestDialogOpener<T = unknown, R = unknown> implements OnDestroy {\n dialog = inject(MatDialog);\n\n /** Component that should be opened with the MatDialog `open` method. */\n protected static component: ComponentType<unknown> | undefined;\n\n /** Config that should be provided to the MatDialog `open` method. */\n protected static config: MatDialogConfig | undefined;\n\n /** MatDialogRef returned from the MatDialog `open` method. */\n dialogRef: MatDialogRef<T, R>;\n\n /** Data passed to the `MatDialog` close method. */\n closedResult: R | undefined;\n\n private readonly _afterClosedSubscription: Subscription;\n\n private readonly _ngZone = inject(NgZone);\n\n /** Static method that prepares this class to open the provided component. */\n static withComponent<T = unknown, R = unknown>(\n component: ComponentType<T>,\n config?: MatDialogConfig,\n ) {\n MatTestDialogOpener.component = component;\n MatTestDialogOpener.config = config;\n return MatTestDialogOpener as ComponentType<MatTestDialogOpener<T, R>>;\n }\n\n constructor(...args: unknown[]);\n\n constructor() {\n if (!MatTestDialogOpener.component) {\n throw new Error(`MatTestDialogOpener does not have a component provided.`);\n }\n\n this.dialogRef = this._ngZone.run(() => {\n const config = {...(MatTestDialogOpener.config || {})};\n config.enterAnimationDuration = 0;\n config.exitAnimationDuration = 0;\n return this.dialog.open<T, R>(MatTestDialogOpener.component as ComponentType<T>, config);\n });\n this._afterClosedSubscription = this.dialogRef.afterClosed().subscribe(result => {\n this.closedResult = result;\n });\n }\n\n ngOnDestroy() {\n this._afterClosedSubscription.unsubscribe();\n MatTestDialogOpener.component = undefined;\n MatTestDialogOpener.config = undefined;\n }\n}\n\n@NgModule({\n imports: [MatDialogModule, MatTestDialogOpener],\n providers: [\n {\n provide: MATERIAL_ANIMATIONS,\n useValue: {\n animationsDisabled: true,\n } as AnimationsConfig,\n },\n ],\n})\nexport class MatTestDialogOpenerModule {}\n"],"names":["MatDialogSection","MatDialogHarness","ContentContainerComponentHarness","HarnessPredicate","options","getId","id","host","getAttribute","getAriaLabel","getAriaLabelledby","getAriaDescribedby","MatTestDialogOpener","component","config","closedResult","_afterClosedSubscription","_ngZone","inject","NgZone","MatTestDialogOpener_1","constructor","Error","enterAnimationDuration","exitAnimationDuration","dialog","open","dialogRef","afterClosed","subscribe","result","ngOnDestroy","unsubscribe","__metadata","MatTestDialogOpenerModule","__decorate","providers"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAqBEA,gBAAA,CAAA,SAAA,CAAA,GAAA,yBAAA;AAGF,CAAAA,EAAAA,gBAEqE,KAAAA,gBAAA,GACnE,EAAA,CAAA,CAAA;AASGC,MAAAA,yBACHC,gCAAA,CAAA;;;WAgBS,IAAAC,gBAAS,CAAA,IAAA,EAAAC,OAAA,CAAA;;;;;EASlB,MAAAC,KAAkBA,GAElB;AAGA,IAAA,MAAAC,EAAuB,GAAA,MAAA,CAAA,MAAA,IAAA,CAAAC,IAAA,IAAAC,YAAA,CAAA,IAAA,CAAA;IAKC,OAAAF,EAAA,KAAA,EAAA,GAAAA,EAAA,GAAA,IAAA;AACtB;;;;AAQFG,EAAAA,MAAAA,YAAWA,GAAA;IACT,OAAAF,CAAAA,MAAAA,IAAAA,CAAAA,IAAA,IAAAC,YAAA,CAAA,YAAA,CAAA;;yBAKcE,GAAA;;AAIhB;AAEAC,EAAAA,MAAAA,kBAAAA,GAAA;;AAIE;;;;;;;;;;;;;;;;;;;ACpESC,IAAAA,mBAAA,SAAAA,mBAAA,CAAA;;;;;AAiBM,EAAA,OAAAC,SAAwB;AAQvC,EAAA,OAAAC,MAAA;;EAcEC,YAAA;EACAC,wBAA+E;EAEjFC,OAAA,GAAAC,MAAA,CAAAC,MAAA,CAAA;;yBAKS,CAAAN,SAAA,GAAAA,SAAA;IAETO,qBAAA,CAAAN,MAAA,GAAAA,MAAA;AACA,IAAA,OAAAM,qBAAoB;AAEvB;AA1DUC,EAAAA,WAAAA,GAAA;IAET,IAAAD,CAAAA,qBAAA,CAAAP,SAAA,EAAA;AACe,MAAA,MAAA,IAAAS,MAEf,CAAA,uDAAA,CAAA,CAAA;AACW;;AAiEA,MAAA,MAAAR,MAAA,GAAA;QAAA,IAAAM,qBAAyB,CAAAN,MAAA,IAAA,EAAA;AAAA,OAAA;AAAGA,MAAAA,MAAA,CAAAS,sBAAA,GAAA,CAAA;AATvCT,MAAAA,MAAA,CAAAU,qBAAA,GAAA,CAAA;MACE,OAAA,IAAA,CAAAC,MAAA,CAAAC,IAAA,CAAAN,qBAAA,CAAAP,SAAA,EAAAC,MAAA,CAAA;;IAEE,IAAA,CAAAE,wBAAA,GAAAW,IAAAA,CAAAA,SAAA,CAAAC,WAAA,EAAA,CAAAC,SAAA,CAAAC,MAAA,IAAA;MAEqB,IAAA,CAAAf,YAAA,GAAAe,MAAA;;;AAG1BC,EAAAA,WAAAA,GAAA;QACY,CAAAf,wBAA4B,CAAAgB,WAAA,EAAA;;;;;;;;;;CA7BhCC,CAAAA,EAAAA,UAAA,4BAVL,mBAAA,CAAA;AAKF,IAAA,yBAAA,GAAA,MAAAC,yBAAA;yBAEI,GAAAC,UAAA;;AAGGC,EAAAA,SAAA;;;;;;;;;;"}