@angular/material 22.1.0-next.3 → 22.1.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 (160) hide show
  1. package/core/focus-indicators/_private.scss +3 -0
  2. package/fesm2022/_animation-chunk.mjs.map +1 -1
  3. package/fesm2022/_date-formats-chunk.mjs.map +1 -1
  4. package/fesm2022/_date-range-input-harness-chunk.mjs.map +1 -1
  5. package/fesm2022/_error-options-chunk.mjs +6 -6
  6. package/fesm2022/_error-options-chunk.mjs.map +1 -1
  7. package/fesm2022/_error-state-chunk.mjs +9 -12
  8. package/fesm2022/_error-state-chunk.mjs.map +1 -1
  9. package/fesm2022/_form-field-chunk.mjs +30 -30
  10. package/fesm2022/_form-field-chunk.mjs.map +1 -1
  11. package/fesm2022/_icon-button-chunk.mjs +6 -6
  12. package/fesm2022/_icon-button-chunk.mjs.map +1 -1
  13. package/fesm2022/_icon-registry-chunk.mjs +3 -3
  14. package/fesm2022/_icon-registry-chunk.mjs.map +1 -1
  15. package/fesm2022/_input-harness-chunk.mjs.map +1 -1
  16. package/fesm2022/_input-value-accessor-chunk.mjs.map +1 -1
  17. package/fesm2022/_internal-form-field-chunk.mjs +7 -7
  18. package/fesm2022/_internal-form-field-chunk.mjs.map +1 -1
  19. package/fesm2022/_line-chunk.mjs +7 -7
  20. package/fesm2022/_line-chunk.mjs.map +1 -1
  21. package/fesm2022/_option-chunk.mjs +6 -6
  22. package/fesm2022/_option-chunk.mjs.map +1 -1
  23. package/fesm2022/_option-harness-chunk.mjs.map +1 -1
  24. package/fesm2022/_option-module-chunk.mjs +4 -4
  25. package/fesm2022/_option-module-chunk.mjs.map +1 -1
  26. package/fesm2022/_pseudo-checkbox-chunk.mjs +3 -3
  27. package/fesm2022/_pseudo-checkbox-chunk.mjs.map +1 -1
  28. package/fesm2022/_pseudo-checkbox-module-chunk.mjs +4 -4
  29. package/fesm2022/_pseudo-checkbox-module-chunk.mjs.map +1 -1
  30. package/fesm2022/_public-api-chunk.mjs.map +1 -1
  31. package/fesm2022/_ripple-chunk.mjs +6 -6
  32. package/fesm2022/_ripple-chunk.mjs.map +1 -1
  33. package/fesm2022/_ripple-loader-chunk.mjs +3 -3
  34. package/fesm2022/_ripple-loader-chunk.mjs.map +1 -1
  35. package/fesm2022/_ripple-module-chunk.mjs +4 -4
  36. package/fesm2022/_ripple-module-chunk.mjs.map +1 -1
  37. package/fesm2022/_structural-styles-chunk.mjs +5 -5
  38. package/fesm2022/_structural-styles-chunk.mjs.map +1 -1
  39. package/fesm2022/_tooltip-chunk.mjs +6 -6
  40. package/fesm2022/_tooltip-chunk.mjs.map +1 -1
  41. package/fesm2022/autocomplete-testing.mjs.map +1 -1
  42. package/fesm2022/autocomplete.mjs +13 -13
  43. package/fesm2022/autocomplete.mjs.map +1 -1
  44. package/fesm2022/badge-testing.mjs.map +1 -1
  45. package/fesm2022/badge.mjs +10 -10
  46. package/fesm2022/badge.mjs.map +1 -1
  47. package/fesm2022/bottom-sheet-testing.mjs.map +1 -1
  48. package/fesm2022/bottom-sheet.mjs +10 -10
  49. package/fesm2022/bottom-sheet.mjs.map +1 -1
  50. package/fesm2022/button-testing.mjs.map +1 -1
  51. package/fesm2022/button-toggle-testing.mjs.map +1 -1
  52. package/fesm2022/button-toggle.mjs +10 -10
  53. package/fesm2022/button-toggle.mjs.map +1 -1
  54. package/fesm2022/button.mjs +17 -17
  55. package/fesm2022/button.mjs.map +1 -1
  56. package/fesm2022/card-testing.mjs.map +1 -1
  57. package/fesm2022/card.mjs +46 -46
  58. package/fesm2022/card.mjs.map +1 -1
  59. package/fesm2022/checkbox-testing.mjs.map +1 -1
  60. package/fesm2022/checkbox.mjs +8 -8
  61. package/fesm2022/checkbox.mjs.map +1 -1
  62. package/fesm2022/chips-testing.mjs.map +1 -1
  63. package/fesm2022/chips.mjs +52 -47
  64. package/fesm2022/chips.mjs.map +1 -1
  65. package/fesm2022/core-testing.mjs.map +1 -1
  66. package/fesm2022/core.mjs +12 -12
  67. package/fesm2022/core.mjs.map +1 -1
  68. package/fesm2022/datepicker-testing.mjs.map +1 -1
  69. package/fesm2022/datepicker.mjs +89 -84
  70. package/fesm2022/datepicker.mjs.map +1 -1
  71. package/fesm2022/dialog-testing.mjs.map +1 -1
  72. package/fesm2022/dialog.mjs +25 -25
  73. package/fesm2022/dialog.mjs.map +1 -1
  74. package/fesm2022/divider-testing.mjs.map +1 -1
  75. package/fesm2022/divider.mjs +7 -7
  76. package/fesm2022/divider.mjs.map +1 -1
  77. package/fesm2022/expansion-testing.mjs.map +1 -1
  78. package/fesm2022/expansion.mjs +27 -27
  79. package/fesm2022/expansion.mjs.map +1 -1
  80. package/fesm2022/form-field-testing-control.mjs.map +1 -1
  81. package/fesm2022/form-field-testing.mjs.map +1 -1
  82. package/fesm2022/form-field.mjs +4 -4
  83. package/fesm2022/form-field.mjs.map +1 -1
  84. package/fesm2022/grid-list-testing.mjs.map +1 -1
  85. package/fesm2022/grid-list.mjs +22 -22
  86. package/fesm2022/grid-list.mjs.map +1 -1
  87. package/fesm2022/icon-testing.mjs +7 -7
  88. package/fesm2022/icon-testing.mjs.map +1 -1
  89. package/fesm2022/icon.mjs +7 -7
  90. package/fesm2022/icon.mjs.map +1 -1
  91. package/fesm2022/input-testing.mjs.map +1 -1
  92. package/fesm2022/input.mjs +13 -8
  93. package/fesm2022/input.mjs.map +1 -1
  94. package/fesm2022/list-testing.mjs.map +1 -1
  95. package/fesm2022/list.mjs +70 -56
  96. package/fesm2022/list.mjs.map +1 -1
  97. package/fesm2022/material.mjs.map +1 -1
  98. package/fesm2022/menu-testing.mjs.map +1 -1
  99. package/fesm2022/menu.mjs +22 -22
  100. package/fesm2022/menu.mjs.map +1 -1
  101. package/fesm2022/paginator-testing.mjs.map +1 -1
  102. package/fesm2022/paginator.mjs +11 -10
  103. package/fesm2022/paginator.mjs.map +1 -1
  104. package/fesm2022/progress-bar-testing.mjs.map +1 -1
  105. package/fesm2022/progress-bar.mjs +7 -7
  106. package/fesm2022/progress-bar.mjs.map +1 -1
  107. package/fesm2022/progress-spinner-testing.mjs.map +1 -1
  108. package/fesm2022/progress-spinner.mjs +7 -7
  109. package/fesm2022/progress-spinner.mjs.map +1 -1
  110. package/fesm2022/radio-testing.mjs.map +1 -1
  111. package/fesm2022/radio.mjs +15 -21
  112. package/fesm2022/radio.mjs.map +1 -1
  113. package/fesm2022/select-testing.mjs.map +1 -1
  114. package/fesm2022/select.mjs +16 -11
  115. package/fesm2022/select.mjs.map +1 -1
  116. package/fesm2022/sidenav-testing.mjs.map +1 -1
  117. package/fesm2022/sidenav.mjs +22 -22
  118. package/fesm2022/sidenav.mjs.map +1 -1
  119. package/fesm2022/slide-toggle-testing.mjs.map +1 -1
  120. package/fesm2022/slide-toggle.mjs +10 -10
  121. package/fesm2022/slide-toggle.mjs.map +1 -1
  122. package/fesm2022/slider-testing.mjs.map +1 -1
  123. package/fesm2022/slider.mjs +16 -16
  124. package/fesm2022/slider.mjs.map +1 -1
  125. package/fesm2022/snack-bar-testing.mjs.map +1 -1
  126. package/fesm2022/snack-bar.mjs +22 -22
  127. package/fesm2022/snack-bar.mjs.map +1 -1
  128. package/fesm2022/sort-testing.mjs.map +1 -1
  129. package/fesm2022/sort.mjs +15 -15
  130. package/fesm2022/sort.mjs.map +1 -1
  131. package/fesm2022/stepper-testing.mjs.map +1 -1
  132. package/fesm2022/stepper.mjs +33 -33
  133. package/fesm2022/stepper.mjs.map +1 -1
  134. package/fesm2022/table-testing.mjs.map +1 -1
  135. package/fesm2022/table.mjs +55 -55
  136. package/fesm2022/table.mjs.map +1 -1
  137. package/fesm2022/tabs-testing.mjs.map +1 -1
  138. package/fesm2022/tabs.mjs +43 -43
  139. package/fesm2022/tabs.mjs.map +1 -1
  140. package/fesm2022/timepicker-testing.mjs.map +1 -1
  141. package/fesm2022/timepicker.mjs +16 -14
  142. package/fesm2022/timepicker.mjs.map +1 -1
  143. package/fesm2022/toolbar-testing.mjs.map +1 -1
  144. package/fesm2022/toolbar.mjs +10 -10
  145. package/fesm2022/toolbar.mjs.map +1 -1
  146. package/fesm2022/tooltip-testing.mjs.map +1 -1
  147. package/fesm2022/tooltip.mjs +4 -4
  148. package/fesm2022/tooltip.mjs.map +1 -1
  149. package/fesm2022/tree-testing.mjs.map +1 -1
  150. package/fesm2022/tree.mjs +25 -25
  151. package/fesm2022/tree.mjs.map +1 -1
  152. package/package.json +2 -2
  153. package/prebuilt-themes/deeppurple-amber.css +2 -2
  154. package/prebuilt-themes/indigo-pink.css +2 -2
  155. package/prebuilt-themes/pink-bluegrey.css +2 -2
  156. package/prebuilt-themes/purple-green.css +2 -2
  157. package/schematics/ng-add/index.js +1 -1
  158. package/stepper/_m2-stepper.scss +2 -2
  159. package/types/core.d.ts +2 -1
  160. package/types/radio.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"select-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/testing/select-harness.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 {ComponentHarnessConstructor, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {\n MatOptionHarness,\n MatOptgroupHarness,\n OptionHarnessFilters,\n OptgroupHarnessFilters,\n} from '@angular/material/core/testing';\nimport {MatFormFieldControlHarnessBase} from '@angular/material/form-field/testing/control';\nimport {SelectHarnessFilters} from './select-harness-filters';\n\n/** Harness for interacting with a mat-select in tests. */\nexport class MatSelectHarness extends MatFormFieldControlHarnessBase {\n static hostSelector = '.mat-mdc-select';\n private _prefix = 'mat-mdc';\n private _optionClass = MatOptionHarness;\n private _optionGroupClass = MatOptgroupHarness;\n private _documentRootLocator = this.documentRootLocatorFactory();\n private _backdrop = this._documentRootLocator.locatorFor('.cdk-overlay-backdrop');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a select with specific attributes.\n * @param options Options for filtering which select instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatSelectHarness>(\n this: ComponentHarnessConstructor<T>,\n options: SelectHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options)\n .addOption('disabled', options.disabled, async (harness, disabled) => {\n return (await harness.isDisabled()) === disabled;\n })\n .addOption('label', options.label, (harness, label) => {\n return HarnessPredicate.stringMatches(harness.getLabel(), label);\n });\n }\n\n /** Gets a boolean promise indicating if the select is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-disabled`);\n }\n\n /** Gets a boolean promise indicating if the select is valid. */\n async isValid(): Promise<boolean> {\n return !(await (await this.host()).hasClass('ng-invalid'));\n }\n\n /** Gets a boolean promise indicating if the select is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-required`);\n }\n\n /** Gets a boolean promise indicating if the select is empty (no value is selected). */\n async isEmpty(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-empty`);\n }\n\n /** Gets a boolean promise indicating if the select is in multi-selection mode. */\n async isMultiple(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-multiple`);\n }\n\n /** Gets a promise for the select's value text. */\n async getValueText(): Promise<string> {\n const value = await this.locatorFor(`.${this._prefix}-select-value`)();\n return value.text();\n }\n\n /** Focuses the select and returns a void promise that indicates when the action is complete. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the select and returns a void promise that indicates when the action is complete. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the select is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /** Gets the options inside the select panel. */\n async getOptions(filter?: Omit<OptionHarnessFilters, 'ancestor'>): Promise<MatOptionHarness[]> {\n return this._documentRootLocator.locatorForAll(\n this._optionClass.with({\n ...(filter || {}),\n ancestor: await this._getPanelSelector(),\n } as OptionHarnessFilters),\n )();\n }\n\n /** Gets the groups of options inside the panel. */\n async getOptionGroups(\n filter?: Omit<OptgroupHarnessFilters, 'ancestor'>,\n ): Promise<MatOptgroupHarness[]> {\n return this._documentRootLocator.locatorForAll(\n this._optionGroupClass.with({\n ...(filter || {}),\n ancestor: await this._getPanelSelector(),\n } as OptgroupHarnessFilters),\n )() as Promise<MatOptgroupHarness[]>;\n }\n\n /** Gets whether the select is open. */\n async isOpen(): Promise<boolean> {\n return !!(await this._documentRootLocator.locatorForOptional(await this._getPanelSelector())());\n }\n\n /** Opens the select's panel. */\n async open(): Promise<void> {\n if (!(await this.isOpen())) {\n const trigger = await this.locatorFor(`.${this._prefix}-select-trigger`)();\n return trigger.click();\n }\n }\n\n /**\n * Clicks the options that match the passed-in filter. If the select is in multi-selection\n * mode all options will be clicked, otherwise the harness will pick the first matching option.\n */\n async clickOptions(filter?: OptionHarnessFilters): Promise<void> {\n await this.open();\n\n const [isMultiple, options] = await parallel(() => [\n this.isMultiple(),\n this.getOptions(filter),\n ]);\n\n if (options.length === 0) {\n throw Error('Select does not have options matching the specified filter');\n }\n\n if (isMultiple) {\n await parallel(() => options.map(option => option.click()));\n } else {\n await options[0].click();\n }\n }\n\n /** Closes the select's panel. */\n async close(): Promise<void> {\n if (await this.isOpen()) {\n // This is the most consistent way that works both in both single and multi-select modes,\n // but it assumes that only one overlay is open at a time. We should be able to make it\n // a bit more precise after #16645 where we can dispatch an ESCAPE press to the host instead.\n return (await this._backdrop()).click();\n }\n }\n\n /** Gets the selector that should be used to find this select's panel. */\n private async _getPanelSelector(): Promise<string> {\n const id = await (await this.host()).getAttribute('id');\n return `#${id}-panel`;\n }\n}\n"],"names":["MatSelectHarness","MatFormFieldControlHarnessBase","hostSelector","_prefix","_optionClass","MatOptionHarness","_optionGroupClass","MatOptgroupHarness","_documentRootLocator","documentRootLocatorFactory","_backdrop","locatorFor","with","options","HarnessPredicate","addOption","disabled","harness","isDisabled","label","stringMatches","getLabel","host","hasClass","isValid","isRequired","isEmpty","isMultiple","getValueText","value","text","focus","blur","isFocused","getOptions","filter","locatorForAll","ancestor","_getPanelSelector","getOptionGroups","isOpen","locatorForOptional","open","trigger","click","clickOptions","parallel","length","Error","map","option","close","id","getAttribute"],"mappings":"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"}
1
+ {"version":3,"file":"select-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/select/testing/select-harness.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 {ComponentHarnessConstructor, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {\n MatOptionHarness,\n MatOptgroupHarness,\n OptionHarnessFilters,\n OptgroupHarnessFilters,\n} from '@angular/material/core/testing';\nimport {MatFormFieldControlHarnessBase} from '@angular/material/form-field/testing/control';\nimport {SelectHarnessFilters} from './select-harness-filters';\n\n/** Harness for interacting with a mat-select in tests. */\nexport class MatSelectHarness extends MatFormFieldControlHarnessBase {\n static hostSelector = '.mat-mdc-select';\n private _prefix = 'mat-mdc';\n private _optionClass = MatOptionHarness;\n private _optionGroupClass = MatOptgroupHarness;\n private _documentRootLocator = this.documentRootLocatorFactory();\n private _backdrop = this._documentRootLocator.locatorFor('.cdk-overlay-backdrop');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a select with specific attributes.\n * @param options Options for filtering which select instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatSelectHarness>(\n this: ComponentHarnessConstructor<T>,\n options: SelectHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options)\n .addOption('disabled', options.disabled, async (harness, disabled) => {\n return (await harness.isDisabled()) === disabled;\n })\n .addOption('label', options.label, (harness, label) => {\n return HarnessPredicate.stringMatches(harness.getLabel(), label);\n });\n }\n\n /** Gets a boolean promise indicating if the select is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-disabled`);\n }\n\n /** Gets a boolean promise indicating if the select is valid. */\n async isValid(): Promise<boolean> {\n return !(await (await this.host()).hasClass('ng-invalid'));\n }\n\n /** Gets a boolean promise indicating if the select is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-required`);\n }\n\n /** Gets a boolean promise indicating if the select is empty (no value is selected). */\n async isEmpty(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-empty`);\n }\n\n /** Gets a boolean promise indicating if the select is in multi-selection mode. */\n async isMultiple(): Promise<boolean> {\n return (await this.host()).hasClass(`${this._prefix}-select-multiple`);\n }\n\n /** Gets a promise for the select's value text. */\n async getValueText(): Promise<string> {\n const value = await this.locatorFor(`.${this._prefix}-select-value`)();\n return value.text();\n }\n\n /** Focuses the select and returns a void promise that indicates when the action is complete. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Blurs the select and returns a void promise that indicates when the action is complete. */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the select is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /** Gets the options inside the select panel. */\n async getOptions(filter?: Omit<OptionHarnessFilters, 'ancestor'>): Promise<MatOptionHarness[]> {\n return this._documentRootLocator.locatorForAll(\n this._optionClass.with({\n ...(filter || {}),\n ancestor: await this._getPanelSelector(),\n } as OptionHarnessFilters),\n )();\n }\n\n /** Gets the groups of options inside the panel. */\n async getOptionGroups(\n filter?: Omit<OptgroupHarnessFilters, 'ancestor'>,\n ): Promise<MatOptgroupHarness[]> {\n return this._documentRootLocator.locatorForAll(\n this._optionGroupClass.with({\n ...(filter || {}),\n ancestor: await this._getPanelSelector(),\n } as OptgroupHarnessFilters),\n )() as Promise<MatOptgroupHarness[]>;\n }\n\n /** Gets whether the select is open. */\n async isOpen(): Promise<boolean> {\n return !!(await this._documentRootLocator.locatorForOptional(await this._getPanelSelector())());\n }\n\n /** Opens the select's panel. */\n async open(): Promise<void> {\n if (!(await this.isOpen())) {\n const trigger = await this.locatorFor(`.${this._prefix}-select-trigger`)();\n return trigger.click();\n }\n }\n\n /**\n * Clicks the options that match the passed-in filter. If the select is in multi-selection\n * mode all options will be clicked, otherwise the harness will pick the first matching option.\n */\n async clickOptions(filter?: OptionHarnessFilters): Promise<void> {\n await this.open();\n\n const [isMultiple, options] = await parallel(() => [\n this.isMultiple(),\n this.getOptions(filter),\n ]);\n\n if (options.length === 0) {\n throw Error('Select does not have options matching the specified filter');\n }\n\n if (isMultiple) {\n await parallel(() => options.map(option => option.click()));\n } else {\n await options[0].click();\n }\n }\n\n /** Closes the select's panel. */\n async close(): Promise<void> {\n if (await this.isOpen()) {\n // This is the most consistent way that works both in both single and multi-select modes,\n // but it assumes that only one overlay is open at a time. We should be able to make it\n // a bit more precise after #16645 where we can dispatch an ESCAPE press to the host instead.\n return (await this._backdrop()).click();\n }\n }\n\n /** Gets the selector that should be used to find this select's panel. */\n private async _getPanelSelector(): Promise<string> {\n const id = await (await this.host()).getAttribute('id');\n return `#${id}-panel`;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import * as i0 from '@angular/core';
8
8
  import { InjectionToken, inject, Injector, ChangeDetectorRef, ElementRef, Renderer2, signal, EventEmitter, HostAttributeToken, booleanAttribute, numberAttribute, Output, Input, ViewChild, ContentChild, ContentChildren, ViewEncapsulation, Component, Directive, NgModule } from '@angular/core';
9
9
  import { NgControl, Validators, NgForm, FormGroupDirective } from '@angular/forms';
10
10
  import { _getEventTarget } from '@angular/cdk/platform';
11
+ import { FORM_FIELD } from '@angular/forms/signals';
11
12
  import { Subject, defer, merge } from 'rxjs';
12
13
  import { startWith, switchMap, filter, map, takeUntil, take } from 'rxjs/operators';
13
14
  import { MAT_FORM_FIELD, MatFormFieldControl } from './_form-field-chunk.mjs';
@@ -276,13 +277,17 @@ class MatSelect {
276
277
  const defaultPopoverConfig = inject(OVERLAY_DEFAULT_CONFIG, {
277
278
  optional: true
278
279
  });
280
+ const formField = inject(FORM_FIELD, {
281
+ optional: true,
282
+ self: true
283
+ });
279
284
  if (this.ngControl) {
280
285
  this.ngControl.valueAccessor = this;
281
286
  }
282
287
  if (this._defaultOptions?.typeaheadDebounceInterval != null) {
283
288
  this.typeaheadDebounceInterval = this._defaultOptions.typeaheadDebounceInterval;
284
289
  }
285
- this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, this.ngControl, parentFormGroup, parentForm, this.stateChanges);
290
+ this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, formField || this.ngControl, parentFormGroup, parentForm, this.stateChanges);
286
291
  this._scrollStrategy = this._scrollStrategyFactory();
287
292
  this.tabIndex = tabIndex == null ? 0 : parseInt(tabIndex) || 0;
288
293
  this._popoverLocation = defaultPopoverConfig?.usePopover === false ? null : 'inline';
@@ -761,7 +766,7 @@ class MatSelect {
761
766
  }
762
767
  static ɵfac = i0.ɵɵngDeclareFactory({
763
768
  minVersion: "12.0.0",
764
- version: "22.1.0-next.4",
769
+ version: "22.1.0-next.6",
765
770
  ngImport: i0,
766
771
  type: MatSelect,
767
772
  deps: [],
@@ -769,7 +774,7 @@ class MatSelect {
769
774
  });
770
775
  static ɵcmp = i0.ɵɵngDeclareComponent({
771
776
  minVersion: "17.0.0",
772
- version: "22.1.0-next.4",
777
+ version: "22.1.0-next.6",
773
778
  type: MatSelect,
774
779
  isStandalone: true,
775
780
  selector: "mat-select",
@@ -891,7 +896,7 @@ class MatSelect {
891
896
  }
892
897
  i0.ɵɵngDeclareClassMetadata({
893
898
  minVersion: "12.0.0",
894
- version: "22.1.0-next.4",
899
+ version: "22.1.0-next.6",
895
900
  ngImport: i0,
896
901
  type: MatSelect,
897
902
  decorators: [{
@@ -1077,7 +1082,7 @@ i0.ɵɵngDeclareClassMetadata({
1077
1082
  class MatSelectTrigger {
1078
1083
  static ɵfac = i0.ɵɵngDeclareFactory({
1079
1084
  minVersion: "12.0.0",
1080
- version: "22.1.0-next.4",
1085
+ version: "22.1.0-next.6",
1081
1086
  ngImport: i0,
1082
1087
  type: MatSelectTrigger,
1083
1088
  deps: [],
@@ -1085,7 +1090,7 @@ class MatSelectTrigger {
1085
1090
  });
1086
1091
  static ɵdir = i0.ɵɵngDeclareDirective({
1087
1092
  minVersion: "14.0.0",
1088
- version: "22.1.0-next.4",
1093
+ version: "22.1.0-next.6",
1089
1094
  type: MatSelectTrigger,
1090
1095
  isStandalone: true,
1091
1096
  selector: "mat-select-trigger",
@@ -1098,7 +1103,7 @@ class MatSelectTrigger {
1098
1103
  }
1099
1104
  i0.ɵɵngDeclareClassMetadata({
1100
1105
  minVersion: "12.0.0",
1101
- version: "22.1.0-next.4",
1106
+ version: "22.1.0-next.6",
1102
1107
  ngImport: i0,
1103
1108
  type: MatSelectTrigger,
1104
1109
  decorators: [{
@@ -1116,7 +1121,7 @@ i0.ɵɵngDeclareClassMetadata({
1116
1121
  class MatSelectModule {
1117
1122
  static ɵfac = i0.ɵɵngDeclareFactory({
1118
1123
  minVersion: "12.0.0",
1119
- version: "22.1.0-next.4",
1124
+ version: "22.1.0-next.6",
1120
1125
  ngImport: i0,
1121
1126
  type: MatSelectModule,
1122
1127
  deps: [],
@@ -1124,7 +1129,7 @@ class MatSelectModule {
1124
1129
  });
1125
1130
  static ɵmod = i0.ɵɵngDeclareNgModule({
1126
1131
  minVersion: "14.0.0",
1127
- version: "22.1.0-next.4",
1132
+ version: "22.1.0-next.6",
1128
1133
  ngImport: i0,
1129
1134
  type: MatSelectModule,
1130
1135
  imports: [OverlayModule, MatOptionModule, MatSelect, MatSelectTrigger],
@@ -1132,7 +1137,7 @@ class MatSelectModule {
1132
1137
  });
1133
1138
  static ɵinj = i0.ɵɵngDeclareInjector({
1134
1139
  minVersion: "12.0.0",
1135
- version: "22.1.0-next.4",
1140
+ version: "22.1.0-next.6",
1136
1141
  ngImport: i0,
1137
1142
  type: MatSelectModule,
1138
1143
  imports: [OverlayModule, MatOptionModule, BidiModule, CdkScrollableModule, MatFormFieldModule, MatOptionModule]
@@ -1140,7 +1145,7 @@ class MatSelectModule {
1140
1145
  }
1141
1146
  i0.ɵɵngDeclareClassMetadata({
1142
1147
  minVersion: "12.0.0",
1143
- version: "22.1.0-next.4",
1148
+ version: "22.1.0-next.6",
1144
1149
  ngImport: i0,
1145
1150
  type: MatSelectModule,
1146
1151
  decorators: [{