Skip to content

Commit 32353fb

Browse files
authored
fix(multiple): resolve directive host binding issues (angular#30606)
Fixes several issues that weren't caught, because of lack of type checking of directive host bindings.
1 parent d0d5de4 commit 32353fb

File tree

10 files changed

+26
-25
lines changed

10 files changed

+26
-25
lines changed

src/material/autocomplete/autocomplete-trigger.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ export class MatAutocompleteTrigger
458458
this._element.nativeElement.disabled = isDisabled;
459459
}
460460

461-
_handleKeydown(event: KeyboardEvent): void {
461+
_handleKeydown(e: Event): void {
462+
const event = e as KeyboardEvent;
462463
const keyCode = event.keyCode;
463464
const hasModifier = hasModifierKey(event);
464465

@@ -501,7 +502,7 @@ export class MatAutocompleteTrigger
501502
}
502503
}
503504

504-
_handleInput(event: KeyboardEvent): void {
505+
_handleInput(event: Event): void {
505506
let target = event.target as HTMLInputElement;
506507
let value: number | string | null = target.value;
507508

src/material/chips/chip-input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class MatChipInput implements MatChipTextControl, OnChanges, OnDestroy {
8181
this._chipGrid.registerInput(this);
8282
}
8383
}
84-
private _chipGrid: MatChipGrid;
84+
protected _chipGrid: MatChipGrid;
8585

8686
/**
8787
* Whether or not the chipEnd event will be emitted when the input is blurred.

src/material/datepicker/date-range-input-parts.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ abstract class MatDateRangeInputPartBase<D>
150150
}
151151

152152
/** Handles `input` events on the input element. */
153-
override _onInput(value: string) {
154-
super._onInput(value);
153+
override _onInput(event: Event) {
154+
super._onInput(event);
155155
this._rangeInput._handleChildValueChange();
156156
}
157157

@@ -211,15 +211,13 @@ abstract class MatDateRangeInputPartBase<D>
211211
host: {
212212
'class': 'mat-start-date mat-date-range-input-inner',
213213
'[disabled]': 'disabled',
214-
'(input)': '_onInput($event.target.value)',
214+
'(input)': '_onInput($event)',
215215
'(change)': '_onChange()',
216216
'(keydown)': '_onKeydown($event)',
217217
'[attr.aria-haspopup]': '_rangeInput.rangePicker ? "dialog" : null',
218-
'[attr.aria-owns]': `_rangeInput._ariaOwns
219-
? _rangeInput._ariaOwns()
220-
: (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null`,
221-
'[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',
222-
'[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',
218+
'[attr.aria-owns]': '_rangeInput._ariaOwns() || null',
219+
'[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()!) : null',
220+
'[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()!) : null',
223221
'(blur)': '_onBlur()',
224222
'type': 'text',
225223
},
@@ -301,15 +299,13 @@ export class MatStartDate<D> extends MatDateRangeInputPartBase<D> {
301299
host: {
302300
'class': 'mat-end-date mat-date-range-input-inner',
303301
'[disabled]': 'disabled',
304-
'(input)': '_onInput($event.target.value)',
302+
'(input)': '_onInput($event)',
305303
'(change)': '_onChange()',
306304
'(keydown)': '_onKeydown($event)',
307305
'[attr.aria-haspopup]': '_rangeInput.rangePicker ? "dialog" : null',
308-
'[attr.aria-owns]': `_rangeInput._ariaOwns
309-
? _rangeInput._ariaOwns()
310-
: (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null`,
311-
'[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null',
312-
'[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null',
306+
'[attr.aria-owns]': '_rangeInput._ariaOwns() || null',
307+
'[attr.min]': '_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()!) : null',
308+
'[attr.max]': '_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()!) : null',
313309
'(blur)': '_onBlur()',
314310
'type': 'text',
315311
},

src/material/datepicker/datepicker-input-base.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,8 @@ export abstract class MatDatepickerInputBase<S, D = ExtractDateTypeFromSelection
322322
}
323323
}
324324

325-
_onInput(value: string) {
325+
_onInput(event: Event) {
326+
const value = (event.target as HTMLInputElement).value;
326327
const lastValueWasValid = this._lastValueValid;
327328
let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);
328329
this._lastValueValid = this._isValidValue(date);

src/material/datepicker/datepicker-input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export const MAT_DATEPICKER_VALIDATORS: any = {
4848
// `aria-owns` for this, because it's only defined while the calendar is open.
4949
'[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',
5050
'[disabled]': 'disabled',
51-
'(input)': '_onInput($event.target.value)',
51+
'(input)': '_onInput($event)',
5252
'(change)': '_onChange()',
5353
'(blur)': '_onBlur()',
5454
'(keydown)': '_onKeydown($event)',

src/material/menu/menu-trigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ const PANELS_TO_TRIGGERS = new WeakMap<MatMenuPanel, MatMenuTrigger>();
9292
'class': 'mat-mdc-menu-trigger',
9393
'[attr.aria-haspopup]': 'menu ? "menu" : null',
9494
'[attr.aria-expanded]': 'menuOpen',
95-
'[attr.aria-controls]': 'menuOpen ? menu.panelId : null',
95+
'[attr.aria-controls]': 'menuOpen ? menu?.panelId : null',
9696
'(click)': '_handleClick($event)',
9797
'(mousedown)': '_handleMousedown($event)',
9898
'(keydown)': '_handleKeydown($event)',

src/material/timepicker/timepicker-input.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ import {DOCUMENT} from '@angular/common';
6060
'[attr.mat-timepicker-id]': 'timepicker()?.panelId',
6161
'[disabled]': 'disabled()',
6262
'(blur)': '_handleBlur()',
63-
'(input)': '_handleInput($event.target.value)',
63+
'(input)': '_handleInput($event)',
6464
'(keydown)': '_handleKeydown($event)',
6565
},
6666
providers: [
@@ -261,7 +261,8 @@ export class MatTimepickerInput<D> implements ControlValueAccessor, Validator, O
261261
};
262262

263263
/** Handles the `input` event. */
264-
protected _handleInput(value: string) {
264+
protected _handleInput(event: Event) {
265+
const value = (event.target as HTMLInputElement).value;
265266
const currentValue = this.value();
266267
const date = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);
267268
const hasChanged = !this._dateAdapter.sameTime(date, currentValue);

tools/public_api_guard/material/autocomplete.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, AfterViewIn
178178
// (undocumented)
179179
_handleFocus(): void;
180180
// (undocumented)
181-
_handleInput(event: KeyboardEvent): void;
181+
_handleInput(event: Event): void;
182182
// (undocumented)
183-
_handleKeydown(event: KeyboardEvent): void;
183+
_handleKeydown(e: Event): void;
184184
// (undocumented)
185185
static ngAcceptInputType_autocompleteDisabled: unknown;
186186
// (undocumented)

tools/public_api_guard/material/chips.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ export class MatChipInput implements MatChipTextControl, OnChanges, OnDestroy {
245245
readonly chipEnd: EventEmitter<MatChipInputEvent>;
246246
get chipGrid(): MatChipGrid;
247247
set chipGrid(value: MatChipGrid);
248+
// (undocumented)
249+
protected _chipGrid: MatChipGrid;
248250
clear(): void;
249251
get disabled(): boolean;
250252
set disabled(value: boolean);

tools/public_api_guard/material/timepicker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export class MatTimepickerInput<D> implements ControlValueAccessor, Validator, O
8484
_getLabelId(): string | null;
8585
getOverlayOrigin(): ElementRef<HTMLElement>;
8686
protected _handleBlur(): void;
87-
protected _handleInput(value: string): void;
87+
protected _handleInput(event: Event): void;
8888
protected _handleKeydown(event: KeyboardEvent): void;
8989
readonly max: InputSignalWithTransform<D | null, unknown>;
9090
readonly min: InputSignalWithTransform<D | null, unknown>;

0 commit comments

Comments
 (0)