Skip to content

Commit abcb28b

Browse files
committed
fix(material-experimental/mdc-form-field): make sure fonts are loaded before calculating notch width
1 parent e436479 commit abcb28b

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/material-experimental/mdc-form-field/form-field.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import {MatFormFieldLineRipple} from './directives/line-ripple';
5252
import {MatFormFieldNotchedOutline} from './directives/notched-outline';
5353
import {MAT_PREFIX, MatPrefix} from './directives/prefix';
5454
import {MAT_SUFFIX, MatSuffix} from './directives/suffix';
55+
import {DOCUMENT} from '@angular/common';
5556

5657
/** Type for the available floatLabel values. */
5758
export type FloatLabelType = 'always' | 'auto';
@@ -308,7 +309,8 @@ export class MatFormField implements AfterViewInit, OnDestroy, AfterContentCheck
308309
private _platform: Platform,
309310
@Optional() @Inject(MAT_FORM_FIELD_DEFAULT_OPTIONS)
310311
private _defaults?: MatFormFieldDefaultOptions,
311-
@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {
312+
@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string,
313+
@Inject(DOCUMENT) private _document?: any) {
312314
if (_defaults && _defaults.appearance) {
313315
this.appearance = _defaults.appearance;
314316
} else if (_defaults && _defaults.hideRequiredMarker) {
@@ -340,7 +342,17 @@ export class MatFormField implements AfterViewInit, OnDestroy, AfterContentCheck
340342
this._updateFocusState();
341343
// Initial notch width update. This is needed in case the text-field label floats
342344
// on initialization, and renders inside of the notched outline.
343-
this._refreshOutlineNotchWidth();
345+
// Make sure fonts are loaded before calculating the width.
346+
if (this._document?.fonts?.ready) {
347+
this._document.fonts.ready.then(() => {
348+
this._refreshOutlineNotchWidth();
349+
this._changeDetectorRef.markForCheck();
350+
});
351+
} else {
352+
// FontFaceSet is not supported in IE
353+
setTimeout(() => this._refreshOutlineNotchWidth());
354+
}
355+
// this._refreshOutlineNotchWidth();
344356
// Enable animations now. This ensures we don't animate on initial render.
345357
this._subscriptAnimationState = 'enter';
346358
// Because the above changes a value used in the template after it was checked, we need

0 commit comments

Comments
 (0)