@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.
- package/core/focus-indicators/_private.scss +3 -0
- package/fesm2022/_animation-chunk.mjs.map +1 -1
- package/fesm2022/_date-formats-chunk.mjs.map +1 -1
- package/fesm2022/_date-range-input-harness-chunk.mjs.map +1 -1
- package/fesm2022/_error-options-chunk.mjs +6 -6
- package/fesm2022/_error-options-chunk.mjs.map +1 -1
- package/fesm2022/_error-state-chunk.mjs +9 -12
- package/fesm2022/_error-state-chunk.mjs.map +1 -1
- package/fesm2022/_form-field-chunk.mjs +30 -30
- package/fesm2022/_form-field-chunk.mjs.map +1 -1
- package/fesm2022/_icon-button-chunk.mjs +6 -6
- package/fesm2022/_icon-button-chunk.mjs.map +1 -1
- package/fesm2022/_icon-registry-chunk.mjs +3 -3
- package/fesm2022/_icon-registry-chunk.mjs.map +1 -1
- package/fesm2022/_input-harness-chunk.mjs.map +1 -1
- package/fesm2022/_input-value-accessor-chunk.mjs.map +1 -1
- package/fesm2022/_internal-form-field-chunk.mjs +7 -7
- package/fesm2022/_internal-form-field-chunk.mjs.map +1 -1
- package/fesm2022/_line-chunk.mjs +7 -7
- package/fesm2022/_line-chunk.mjs.map +1 -1
- package/fesm2022/_option-chunk.mjs +6 -6
- package/fesm2022/_option-chunk.mjs.map +1 -1
- package/fesm2022/_option-harness-chunk.mjs.map +1 -1
- package/fesm2022/_option-module-chunk.mjs +4 -4
- package/fesm2022/_option-module-chunk.mjs.map +1 -1
- package/fesm2022/_pseudo-checkbox-chunk.mjs +3 -3
- package/fesm2022/_pseudo-checkbox-chunk.mjs.map +1 -1
- package/fesm2022/_pseudo-checkbox-module-chunk.mjs +4 -4
- package/fesm2022/_pseudo-checkbox-module-chunk.mjs.map +1 -1
- package/fesm2022/_public-api-chunk.mjs.map +1 -1
- package/fesm2022/_ripple-chunk.mjs +6 -6
- package/fesm2022/_ripple-chunk.mjs.map +1 -1
- package/fesm2022/_ripple-loader-chunk.mjs +3 -3
- package/fesm2022/_ripple-loader-chunk.mjs.map +1 -1
- package/fesm2022/_ripple-module-chunk.mjs +4 -4
- package/fesm2022/_ripple-module-chunk.mjs.map +1 -1
- package/fesm2022/_structural-styles-chunk.mjs +5 -5
- package/fesm2022/_structural-styles-chunk.mjs.map +1 -1
- package/fesm2022/_tooltip-chunk.mjs +6 -6
- package/fesm2022/_tooltip-chunk.mjs.map +1 -1
- package/fesm2022/autocomplete-testing.mjs.map +1 -1
- package/fesm2022/autocomplete.mjs +13 -13
- package/fesm2022/autocomplete.mjs.map +1 -1
- package/fesm2022/badge-testing.mjs.map +1 -1
- package/fesm2022/badge.mjs +10 -10
- package/fesm2022/badge.mjs.map +1 -1
- package/fesm2022/bottom-sheet-testing.mjs.map +1 -1
- package/fesm2022/bottom-sheet.mjs +10 -10
- package/fesm2022/bottom-sheet.mjs.map +1 -1
- package/fesm2022/button-testing.mjs.map +1 -1
- package/fesm2022/button-toggle-testing.mjs.map +1 -1
- package/fesm2022/button-toggle.mjs +10 -10
- package/fesm2022/button-toggle.mjs.map +1 -1
- package/fesm2022/button.mjs +17 -17
- package/fesm2022/button.mjs.map +1 -1
- package/fesm2022/card-testing.mjs.map +1 -1
- package/fesm2022/card.mjs +46 -46
- package/fesm2022/card.mjs.map +1 -1
- package/fesm2022/checkbox-testing.mjs.map +1 -1
- package/fesm2022/checkbox.mjs +8 -8
- package/fesm2022/checkbox.mjs.map +1 -1
- package/fesm2022/chips-testing.mjs.map +1 -1
- package/fesm2022/chips.mjs +52 -47
- package/fesm2022/chips.mjs.map +1 -1
- package/fesm2022/core-testing.mjs.map +1 -1
- package/fesm2022/core.mjs +12 -12
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/datepicker-testing.mjs.map +1 -1
- package/fesm2022/datepicker.mjs +89 -84
- package/fesm2022/datepicker.mjs.map +1 -1
- package/fesm2022/dialog-testing.mjs.map +1 -1
- package/fesm2022/dialog.mjs +25 -25
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/divider-testing.mjs.map +1 -1
- package/fesm2022/divider.mjs +7 -7
- package/fesm2022/divider.mjs.map +1 -1
- package/fesm2022/expansion-testing.mjs.map +1 -1
- package/fesm2022/expansion.mjs +27 -27
- package/fesm2022/expansion.mjs.map +1 -1
- package/fesm2022/form-field-testing-control.mjs.map +1 -1
- package/fesm2022/form-field-testing.mjs.map +1 -1
- package/fesm2022/form-field.mjs +4 -4
- package/fesm2022/form-field.mjs.map +1 -1
- package/fesm2022/grid-list-testing.mjs.map +1 -1
- package/fesm2022/grid-list.mjs +22 -22
- package/fesm2022/grid-list.mjs.map +1 -1
- package/fesm2022/icon-testing.mjs +7 -7
- package/fesm2022/icon-testing.mjs.map +1 -1
- package/fesm2022/icon.mjs +7 -7
- package/fesm2022/icon.mjs.map +1 -1
- package/fesm2022/input-testing.mjs.map +1 -1
- package/fesm2022/input.mjs +13 -8
- package/fesm2022/input.mjs.map +1 -1
- package/fesm2022/list-testing.mjs.map +1 -1
- package/fesm2022/list.mjs +70 -56
- package/fesm2022/list.mjs.map +1 -1
- package/fesm2022/material.mjs.map +1 -1
- package/fesm2022/menu-testing.mjs.map +1 -1
- package/fesm2022/menu.mjs +22 -22
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/paginator-testing.mjs.map +1 -1
- package/fesm2022/paginator.mjs +11 -10
- package/fesm2022/paginator.mjs.map +1 -1
- package/fesm2022/progress-bar-testing.mjs.map +1 -1
- package/fesm2022/progress-bar.mjs +7 -7
- package/fesm2022/progress-bar.mjs.map +1 -1
- package/fesm2022/progress-spinner-testing.mjs.map +1 -1
- package/fesm2022/progress-spinner.mjs +7 -7
- package/fesm2022/progress-spinner.mjs.map +1 -1
- package/fesm2022/radio-testing.mjs.map +1 -1
- package/fesm2022/radio.mjs +15 -21
- package/fesm2022/radio.mjs.map +1 -1
- package/fesm2022/select-testing.mjs.map +1 -1
- package/fesm2022/select.mjs +16 -11
- package/fesm2022/select.mjs.map +1 -1
- package/fesm2022/sidenav-testing.mjs.map +1 -1
- package/fesm2022/sidenav.mjs +22 -22
- package/fesm2022/sidenav.mjs.map +1 -1
- package/fesm2022/slide-toggle-testing.mjs.map +1 -1
- package/fesm2022/slide-toggle.mjs +10 -10
- package/fesm2022/slide-toggle.mjs.map +1 -1
- package/fesm2022/slider-testing.mjs.map +1 -1
- package/fesm2022/slider.mjs +16 -16
- package/fesm2022/slider.mjs.map +1 -1
- package/fesm2022/snack-bar-testing.mjs.map +1 -1
- package/fesm2022/snack-bar.mjs +22 -22
- package/fesm2022/snack-bar.mjs.map +1 -1
- package/fesm2022/sort-testing.mjs.map +1 -1
- package/fesm2022/sort.mjs +15 -15
- package/fesm2022/sort.mjs.map +1 -1
- package/fesm2022/stepper-testing.mjs.map +1 -1
- package/fesm2022/stepper.mjs +33 -33
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table-testing.mjs.map +1 -1
- package/fesm2022/table.mjs +55 -55
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/tabs-testing.mjs.map +1 -1
- package/fesm2022/tabs.mjs +43 -43
- package/fesm2022/tabs.mjs.map +1 -1
- package/fesm2022/timepicker-testing.mjs.map +1 -1
- package/fesm2022/timepicker.mjs +16 -14
- package/fesm2022/timepicker.mjs.map +1 -1
- package/fesm2022/toolbar-testing.mjs.map +1 -1
- package/fesm2022/toolbar.mjs +10 -10
- package/fesm2022/toolbar.mjs.map +1 -1
- package/fesm2022/tooltip-testing.mjs.map +1 -1
- package/fesm2022/tooltip.mjs +4 -4
- package/fesm2022/tooltip.mjs.map +1 -1
- package/fesm2022/tree-testing.mjs.map +1 -1
- package/fesm2022/tree.mjs +25 -25
- package/fesm2022/tree.mjs.map +1 -1
- package/package.json +2 -2
- package/prebuilt-themes/deeppurple-amber.css +2 -2
- package/prebuilt-themes/indigo-pink.css +2 -2
- package/prebuilt-themes/pink-bluegrey.css +2 -2
- package/prebuilt-themes/purple-green.css +2 -2
- package/schematics/ng-add/index.js +1 -1
- package/stepper/_m2-stepper.scss +2 -2
- package/types/core.d.ts +2 -1
- 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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"}
|
package/fesm2022/select.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1148
|
+
version: "22.1.0-next.6",
|
|
1144
1149
|
ngImport: i0,
|
|
1145
1150
|
type: MatSelectModule,
|
|
1146
1151
|
decorators: [{
|