@angular/material
Version:
Angular Material
1 lines • 38.4 kB
Source Map (JSON)
{"version":3,"file":"input.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/input/input-errors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/input/input.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/input/input-module.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\n/** @docs-private */\nexport function getMatInputUnsupportedTypeError(type: string): Error {\n return Error(`Input type \"${type}\" isn't supported by matInput.`);\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 {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {getSupportedInputTypes, Platform} from '@angular/cdk/platform';\nimport {AutofillMonitor} from '@angular/cdk/text-field';\nimport {\n AfterViewInit,\n booleanAttribute,\n Directive,\n DoCheck,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n isSignal,\n NgZone,\n OnChanges,\n OnDestroy,\n Renderer2,\n WritableSignal,\n} from '@angular/core';\nimport {_IdGenerator} from '@angular/cdk/a11y';\nimport {FormGroupDirective, NgControl, NgForm, Validators} from '@angular/forms';\nimport {ErrorStateMatcher, _ErrorStateTracker} from '../core';\nimport {MatFormFieldControl, MatFormField, MAT_FORM_FIELD} from '../form-field';\nimport {Subject} from 'rxjs';\nimport {getMatInputUnsupportedTypeError} from './input-errors';\nimport {MAT_INPUT_VALUE_ACCESSOR} from './input-value-accessor';\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = [\n 'button',\n 'checkbox',\n 'file',\n 'hidden',\n 'image',\n 'radio',\n 'range',\n 'reset',\n 'submit',\n];\n\n/** Object that can be used to configure the default options for the input. */\nexport interface MatInputConfig {\n /** Whether disabled inputs should be interactive. */\n disabledInteractive?: boolean;\n}\n\n/** Injection token that can be used to provide the default options for the input. */\nexport const MAT_INPUT_CONFIG = new InjectionToken<MatInputConfig>('MAT_INPUT_CONFIG');\n\n@Directive({\n selector: `input[matInput], textarea[matInput], select[matNativeControl],\n input[matNativeControl], textarea[matNativeControl]`,\n exportAs: 'matInput',\n host: {\n 'class': 'mat-mdc-input-element',\n // The BaseMatInput parent class adds `mat-input-element`, `mat-form-field-control` and\n // `mat-form-field-autofill-control` to the CSS class list, but this should not be added for\n // this MDC equivalent input.\n '[class.mat-input-server]': '_isServer',\n '[class.mat-mdc-form-field-textarea-control]': '_isInFormField && _isTextarea',\n '[class.mat-mdc-form-field-input-control]': '_isInFormField',\n '[class.mat-mdc-input-disabled-interactive]': 'disabledInteractive',\n '[class.mdc-text-field__input]': '_isInFormField',\n '[class.mat-mdc-native-select-inline]': '_isInlineSelect()',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[id]': 'id',\n '[disabled]': 'disabled && !disabledInteractive',\n '[required]': 'required',\n '[attr.name]': 'name || null',\n '[attr.readonly]': '_getReadonlyAttribute()',\n '[attr.aria-disabled]': 'disabled && disabledInteractive ? \"true\" : null',\n // Only mark the input as invalid for assistive technology if it has a value since the\n // state usually overlaps with `aria-required` when the input is empty and can be redundant.\n '[attr.aria-invalid]': '(empty && required) ? null : errorState',\n '[attr.aria-required]': 'required',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '(focus)': '_focusChanged(true)',\n '(blur)': '_focusChanged(false)',\n '(input)': '_onInput()',\n },\n providers: [{provide: MatFormFieldControl, useExisting: MatInput}],\n})\nexport class MatInput\n implements MatFormFieldControl<any>, OnChanges, OnDestroy, AfterViewInit, DoCheck\n{\n protected _elementRef =\n inject<ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>>(ElementRef);\n protected _platform = inject(Platform);\n ngControl = inject(NgControl, {optional: true, self: true})!;\n private _autofillMonitor = inject(AutofillMonitor);\n private _ngZone = inject(NgZone);\n protected _formField? = inject<MatFormField>(MAT_FORM_FIELD, {optional: true});\n private _renderer = inject(Renderer2);\n\n protected _uid = inject(_IdGenerator).getId('mat-input-');\n protected _previousNativeValue: any;\n private _inputValueAccessor: {value: any};\n private _signalBasedValueAccessor?: {value: WritableSignal<any>};\n private _previousPlaceholder: string | null;\n private _errorStateTracker: _ErrorStateTracker;\n private _config = inject(MAT_INPUT_CONFIG, {optional: true});\n private _cleanupIosKeyup: (() => void) | undefined;\n private _cleanupWebkitWheel: (() => void) | undefined;\n\n /** Whether the component is being rendered on the server. */\n readonly _isServer: boolean;\n\n /** Whether the component is a native html select. */\n readonly _isNativeSelect: boolean;\n\n /** Whether the component is a textarea. */\n readonly _isTextarea: boolean;\n\n /** Whether the input is inside of a form field. */\n readonly _isInFormField: boolean;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n controlType: string = 'mat-input';\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n autofilled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string {\n return this._id;\n }\n set id(value: string) {\n this._id = value || this._uid;\n }\n protected _id: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Name of the input.\n * @docs-private\n */\n @Input() name: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n }\n protected _required: boolean | undefined;\n\n /** Input type of the element. */\n @Input()\n get type(): string {\n return this._type;\n }\n set type(value: string) {\n this._type = value || 'text';\n this._validateType();\n\n // When using Angular inputs, developers are no longer able to set the properties on the native\n // input element. To ensure that bindings for `type` work, we need to sync the setter\n // with the native property. Textarea elements don't support the type property or attribute.\n if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n (this._elementRef.nativeElement as HTMLInputElement).type = this._type;\n }\n }\n protected _type = 'text';\n\n /** An object used to control when error messages are shown. */\n @Input()\n get errorStateMatcher() {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value: ErrorStateMatcher) {\n this._errorStateTracker.matcher = value;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input('aria-describedby') userAriaDescribedBy: string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string {\n return this._signalBasedValueAccessor\n ? this._signalBasedValueAccessor.value()\n : this._inputValueAccessor.value;\n }\n set value(value: any) {\n if (value !== this.value) {\n if (this._signalBasedValueAccessor) {\n this._signalBasedValueAccessor.value.set(value);\n } else {\n this._inputValueAccessor.value = value;\n }\n\n this.stateChanges.next();\n }\n }\n\n /** Whether the element is readonly. */\n @Input()\n get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: BooleanInput) {\n this._readonly = coerceBooleanProperty(value);\n }\n private _readonly = false;\n\n /** Whether the input should remain interactive when it is disabled. */\n @Input({transform: booleanAttribute})\n disabledInteractive: boolean;\n\n /** Whether the input is in an error state. */\n get errorState() {\n return this._errorStateTracker.errorState;\n }\n set errorState(value: boolean) {\n this._errorStateTracker.errorState = value;\n }\n\n protected _neverEmptyInputTypes = [\n 'date',\n 'datetime',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n ].filter(t => getSupportedInputTypes().has(t));\n\n constructor(...args: unknown[]);\n\n constructor() {\n const parentForm = inject(NgForm, {optional: true});\n const parentFormGroup = inject(FormGroupDirective, {optional: true});\n const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n const accessor = inject(MAT_INPUT_VALUE_ACCESSOR, {optional: true, self: true});\n\n const element = this._elementRef.nativeElement;\n const nodeName = element.nodeName.toLowerCase();\n\n if (accessor) {\n if (isSignal(accessor.value)) {\n this._signalBasedValueAccessor = accessor;\n } else {\n this._inputValueAccessor = accessor;\n }\n } else {\n // If no input value accessor was explicitly specified, use the element as the input value\n // accessor.\n this._inputValueAccessor = element;\n }\n\n this._previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n // exists on iOS, we only bother to install the listener on iOS.\n if (this._platform.IOS) {\n this._ngZone.runOutsideAngular(() => {\n this._cleanupIosKeyup = this._renderer.listen(element, 'keyup', this._iOSKeyupListener);\n });\n }\n\n this._errorStateTracker = new _ErrorStateTracker(\n defaultErrorStateMatcher,\n this.ngControl,\n parentFormGroup,\n parentForm,\n this.stateChanges,\n );\n this._isServer = !this._platform.isBrowser;\n this._isNativeSelect = nodeName === 'select';\n this._isTextarea = nodeName === 'textarea';\n this._isInFormField = !!this._formField;\n this.disabledInteractive = this._config?.disabledInteractive || false;\n\n if (this._isNativeSelect) {\n this.controlType = (element as HTMLSelectElement).multiple\n ? 'mat-native-select-multiple'\n : 'mat-native-select';\n }\n\n if (this._signalBasedValueAccessor) {\n effect(() => {\n // Read the value so the effect can register the dependency.\n this._signalBasedValueAccessor!.value();\n this.stateChanges.next();\n });\n }\n }\n\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n this.autofilled = event.isAutofilled;\n this.stateChanges.next();\n });\n }\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n\n if (this._platform.isBrowser) {\n this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n\n this._cleanupIosKeyup?.();\n this._cleanupWebkitWheel?.();\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n\n // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n // disabled.\n if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n this.disabled = this.ngControl.disabled;\n this.stateChanges.next();\n }\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this._dirtyCheckNativeValue();\n\n // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n // present or not depends on a query which is prone to \"changed after checked\" errors.\n this._dirtyCheckPlaceholder();\n }\n\n /** Focuses the input. */\n focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n /** Refreshes the error state of the input. */\n updateErrorState() {\n this._errorStateTracker.updateErrorState();\n }\n\n /** Callback for the cases where the focused state of the input changes. */\n _focusChanged(isFocused: boolean) {\n if (isFocused === this.focused) {\n return;\n }\n\n if (!this._isNativeSelect && isFocused && this.disabled && this.disabledInteractive) {\n const element = this._elementRef.nativeElement as HTMLInputElement;\n\n // Focusing an input that has text will cause all the text to be selected. Clear it since\n // the user won't be able to change it. This is based on the internal implementation.\n if (element.type === 'number') {\n // setSelectionRange doesn't work on number inputs so it needs to be set briefly to text.\n element.type = 'text';\n element.setSelectionRange(0, 0);\n element.type = 'number';\n } else {\n element.setSelectionRange(0, 0);\n }\n }\n\n this.focused = isFocused;\n this.stateChanges.next();\n }\n\n _onInput() {\n // This is a noop function and is used to let Angular know whenever the value changes.\n // Angular will run a new change detection each time the `input` event has been dispatched.\n // It's necessary that Angular recognizes the value change, because when floatingLabel\n // is set to false and Angular forms aren't used, the placeholder won't recognize the\n // value changes and will not disappear.\n // Listening to the input event wouldn't be necessary when the input is using the\n // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n }\n\n /** Does some manual dirty checking on the native input `value` property. */\n protected _dirtyCheckNativeValue() {\n const newValue = this._elementRef.nativeElement.value;\n\n if (this._previousNativeValue !== newValue) {\n this._previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Does some manual dirty checking on the native input `placeholder` attribute. */\n private _dirtyCheckPlaceholder() {\n const placeholder = this._getPlaceholder();\n if (placeholder !== this._previousPlaceholder) {\n const element = this._elementRef.nativeElement;\n this._previousPlaceholder = placeholder;\n placeholder\n ? element.setAttribute('placeholder', placeholder)\n : element.removeAttribute('placeholder');\n }\n }\n\n /** Gets the current placeholder of the form field. */\n protected _getPlaceholder(): string | null {\n return this.placeholder || null;\n }\n\n /** Make sure the input is a supported type. */\n protected _validateType() {\n if (\n MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getMatInputUnsupportedTypeError(this._type);\n }\n }\n\n /** Checks whether the input type is one of the types that are never empty. */\n protected _isNeverEmpty() {\n return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n protected _isBadInput() {\n // The `validity` property won't be present on platform-server.\n let validity = (this._elementRef.nativeElement as HTMLInputElement).validity;\n return validity && validity.badInput;\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return (\n !this._isNeverEmpty() &&\n !this._elementRef.nativeElement.value &&\n !this._isBadInput() &&\n !this.autofilled\n );\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat(): boolean {\n if (this._isNativeSelect) {\n // For a single-selection `<select>`, the label should float when the selected option has\n // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n // overlapping the label with the options.\n const selectElement = this._elementRef.nativeElement as HTMLSelectElement;\n const firstOption: HTMLOptionElement | undefined = selectElement.options[0];\n\n // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n return (\n this.focused ||\n selectElement.multiple ||\n !this.empty ||\n !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label)\n );\n } else {\n return (this.focused && !this.disabled) || !this.empty;\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get describedByIds(): string[] {\n const element = this._elementRef.nativeElement;\n const existingDescribedBy = element.getAttribute('aria-describedby');\n\n return existingDescribedBy?.split(' ') || [];\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids: string[]) {\n const element = this._elementRef.nativeElement;\n\n if (ids.length) {\n element.setAttribute('aria-describedby', ids.join(' '));\n } else {\n element.removeAttribute('aria-describedby');\n }\n }\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n if (!this.focused) {\n this.focus();\n }\n }\n\n /** Whether the form control is a native select that is displayed inline. */\n _isInlineSelect(): boolean {\n const element = this._elementRef.nativeElement as HTMLSelectElement;\n return this._isNativeSelect && (element.multiple || element.size > 1);\n }\n\n private _iOSKeyupListener = (event: Event): void => {\n const el = event.target as HTMLInputElement;\n\n // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n // indicate different things. If the value is 0, it means that the caret is at the start\n // of the input, whereas a value of `null` means that the input doesn't support\n // manipulating the selection range. Inputs that don't support setting the selection range\n // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n // Note: Just setting `0, 0` doesn't fix the issue. Setting\n // `1, 1` fixes it for the first time that you type text and\n // then hold delete. Toggling to `1, 1` and then back to\n // `0, 0` seems to completely fix it.\n el.setSelectionRange(1, 1);\n el.setSelectionRange(0, 0);\n }\n };\n\n /** Gets the value to set on the `readonly` attribute. */\n protected _getReadonlyAttribute(): string | null {\n if (this._isNativeSelect) {\n return null;\n }\n\n if (this.readonly || (this.disabled && this.disabledInteractive)) {\n return 'true';\n }\n\n return null;\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 {BidiModule} from '@angular/cdk/bidi';\nimport {TextFieldModule} from '@angular/cdk/text-field';\nimport {NgModule} from '@angular/core';\nimport {MatFormFieldModule} from '../form-field';\nimport {MatInput} from './input';\n\n@NgModule({\n imports: [MatFormFieldModule, MatInput],\n exports: [MatInput, MatFormFieldModule, TextFieldModule, BidiModule],\n})\nexport class MatInputModule {}\n"],"names":["getMatInputUnsupportedTypeError","type","Error","MAT_INPUT_INVALID_TYPES","MAT_INPUT_CONFIG","InjectionToken","MatInput","_elementRef","inject","ElementRef","_platform","Platform","ngControl","NgControl","optional","self","_autofillMonitor","AutofillMonitor","_ngZone","NgZone","_formField","MAT_FORM_FIELD","_renderer","Renderer2","_uid","_IdGenerator","getId","_previousNativeValue","_inputValueAccessor","_signalBasedValueAccessor","_previousPlaceholder","_errorStateTracker","_config","_cleanupIosKeyup","_cleanupWebkitWheel","_isServer","_isNativeSelect","_isTextarea","_isInFormField","focused","stateChanges","Subject","controlType","autofilled","disabled","_disabled","value","coerceBooleanProperty","next","id","_id","placeholder","name","required","_required","control","hasValidator","Validators","_type","_validateType","getSupportedInputTypes","has","nativeElement","errorStateMatcher","matcher","userAriaDescribedBy","set","readonly","_readonly","disabledInteractive","errorState","_neverEmptyInputTypes","filter","t","constructor","parentForm","NgForm","parentFormGroup","FormGroupDirective","defaultErrorStateMatcher","ErrorStateMatcher","accessor","MAT_INPUT_VALUE_ACCESSOR","element","nodeName","toLowerCase","isSignal","IOS","runOutsideAngular","listen","_iOSKeyupListener","_ErrorStateTracker","isBrowser","multiple","effect","ngAfterViewInit","monitor","subscribe","event","isAutofilled","ngOnChanges","ngOnDestroy","complete","stopMonitoring","ngDoCheck","updateErrorState","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","focus","options","_focusChanged","isFocused","setSelectionRange","_onInput","newValue","_getPlaceholder","setAttribute","removeAttribute","indexOf","ngDevMode","_isNeverEmpty","_isBadInput","validity","badInput","empty","shouldLabelFloat","selectElement","firstOption","selectedIndex","label","describedByIds","existingDescribedBy","getAttribute","split","setDescribedByIds","ids","length","join","onContainerClick","_isInlineSelect","size","el","target","selectionStart","selectionEnd","_getReadonlyAttribute","deps","i0","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","minVersion","version","isStandalone","selector","inputs","booleanAttribute","host","listeners","properties","classAttribute","providers","provide","MatFormFieldControl","useExisting","exportAs","usesOnChanges","ngImport","decorators","args","Input","transform","MatInputModule","NgModule","imports","MatFormFieldModule","exports","TextFieldModule","BidiModule","ɵinj","ɵɵngDeclareInjector"],"mappings":"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"}