feat(input): remove size property in favor of CSS styling (#28903)

Issue number: Internal

---------

<!-- Please do not submit updates to dependencies unless it fixes an
issue. -->

<!-- Please try to limit your pull request to one type (bugfix, feature,
etc). Submit multiple pull requests if needed. -->

## What is the current behavior?
<!-- Please describe the current behavior that you are modifying. -->

The `ion-input` component currently specifies a `size` attribute to
align with the HTML `input` implementation. However, Ionic's custom
appearance for MD and iOS is not compatible and should not be used with
the `size` attribute:
https://github.com/ionic-team/ionic-framework/issues/27945#issuecomment-1669702274.

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

- The `size` property has been removed from `ion-input`.

## Does this introduce a breaking change?

- [x] Yes
- [ ] No

<!--
  If this introduces a breaking change:
1. Describe the impact and migration path for existing applications
below.
  2. Update the BREAKING.md file with the breaking change.
3. Add "BREAKING CHANGE: [...]" to the commit description when merging.
See
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#footer
for more information.
-->

The `size` attribute has been removed from `ion-input`. As it was not
compatible before, this is likely to have a minimal impact to
developers. If your application is using the `size` attribute, replace
the usage with CSS styling to control the width of the `ion-input`.


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
This commit is contained in:
Sean Perkins
2024-01-29 19:56:25 -05:00
committed by GitHub
parent 18ce6e0aeb
commit a393d2a86c
6 changed files with 7 additions and 11 deletions

View File

@ -20,6 +20,7 @@ This is a comprehensive list of the breaking changes introduced in the major ver
- [Button](#version-8x-button) - [Button](#version-8x-button)
- [Content](#version-8x-content) - [Content](#version-8x-content)
- [Datetime](#version-8x-datetime) - [Datetime](#version-8x-datetime)
- [Input](#version-8x-input)
- [Nav](#version-8x-nav) - [Nav](#version-8x-nav)
- [Picker](#version-8x-picker) - [Picker](#version-8x-picker)
@ -134,6 +135,10 @@ This allows components to inherit the color properly when used outside of Ionic
} }
``` ```
<h4 id="version-8x-input">Input</h4>
- `size` has been removed from the `ion-input` component. Developers should use CSS to specify the visible width of the input.
<h4 id="version-8x-nav">Nav</h4> <h4 id="version-8x-nav">Nav</h4>
- `getLength` returns `Promise<number>` instead of `<number>`. This method was not previously available in Nav's TypeScript interface, but developers could still access it by casting Nav as `any`. Developers should ensure they `await` their `getLength` call before accessing the returned value. - `getLength` returns `Promise<number>` instead of `<number>`. This method was not previously available in Nav's TypeScript interface, but developers could still access it by casting Nav as `any`. Developers should ensure they `await` their `getLength` call before accessing the returned value.

View File

@ -579,7 +579,6 @@ ion-input,prop,placeholder,string | undefined,undefined,false,false
ion-input,prop,readonly,boolean,false,false,false ion-input,prop,readonly,boolean,false,false,false
ion-input,prop,required,boolean,false,false,false ion-input,prop,required,boolean,false,false,false
ion-input,prop,shape,"round" | undefined,undefined,false,false ion-input,prop,shape,"round" | undefined,undefined,false,false
ion-input,prop,size,number | undefined,undefined,false,false
ion-input,prop,spellcheck,boolean,false,false,false ion-input,prop,spellcheck,boolean,false,false,false
ion-input,prop,step,string | undefined,undefined,false,false ion-input,prop,step,string | undefined,undefined,false,false
ion-input,prop,type,"date" | "datetime-local" | "email" | "month" | "number" | "password" | "search" | "tel" | "text" | "time" | "url" | "week",'text',false,false ion-input,prop,type,"date" | "datetime-local" | "email" | "month" | "number" | "password" | "search" | "tel" | "text" | "time" | "url" | "week",'text',false,false

View File

@ -1281,7 +1281,6 @@ export namespace Components {
* The shape of the input. If "round" it will have an increased border radius. * The shape of the input. If "round" it will have an increased border radius.
*/ */
"shape"?: 'round'; "shape"?: 'round';
"size"?: number;
/** /**
* If `true`, the element will have its spelling and grammar checked. * If `true`, the element will have its spelling and grammar checked.
*/ */
@ -6038,7 +6037,6 @@ declare namespace LocalJSX {
* The shape of the input. If "round" it will have an increased border radius. * The shape of the input. If "round" it will have an increased border radius.
*/ */
"shape"?: 'round'; "shape"?: 'round';
"size"?: number;
/** /**
* If `true`, the element will have its spelling and grammar checked. * If `true`, the element will have its spelling and grammar checked.
*/ */

View File

@ -281,9 +281,6 @@ export class Input implements ComponentInterface {
*/ */
@Prop() step?: string; @Prop() step?: string;
// FW-4914 Remove this property in Ionic 8
@Prop() size?: number;
/** /**
* The type of control to display. The default type is text. * The type of control to display. The default type is text.
*/ */
@ -806,7 +803,6 @@ export class Input implements ComponentInterface {
required={this.required} required={this.required}
spellcheck={this.spellcheck} spellcheck={this.spellcheck}
step={this.step} step={this.step}
size={this.size}
type={this.type} type={this.type}
value={value} value={value}
onInput={this.onInput} onInput={this.onInput}
@ -915,7 +911,6 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
required={this.required} required={this.required}
spellcheck={this.spellcheck} spellcheck={this.spellcheck}
step={this.step} step={this.step}
size={this.size}
type={this.type} type={this.type}
value={value} value={value}
onInput={this.onInput} onInput={this.onInput}

View File

@ -955,7 +955,7 @@ export declare interface IonInfiniteScrollContent extends Components.IonInfinite
@ProxyCmp({ @ProxyCmp({
inputs: ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'counter', 'counterFormatter', 'debounce', 'disabled', 'enterkeyhint', 'errorText', 'fill', 'helperText', 'inputmode', 'label', 'labelPlacement', 'legacy', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'shape', 'size', 'spellcheck', 'step', 'type', 'value'], inputs: ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'counter', 'counterFormatter', 'debounce', 'disabled', 'enterkeyhint', 'errorText', 'fill', 'helperText', 'inputmode', 'label', 'labelPlacement', 'legacy', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'shape', 'spellcheck', 'step', 'type', 'value'],
methods: ['setFocus', 'getInputElement'] methods: ['setFocus', 'getInputElement']
}) })
@Component({ @Component({
@ -963,7 +963,7 @@ export declare interface IonInfiniteScrollContent extends Components.IonInfinite
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>', template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'counter', 'counterFormatter', 'debounce', 'disabled', 'enterkeyhint', 'errorText', 'fill', 'helperText', 'inputmode', 'label', 'labelPlacement', 'legacy', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'shape', 'size', 'spellcheck', 'step', 'type', 'value'], inputs: ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'counter', 'counterFormatter', 'debounce', 'disabled', 'enterkeyhint', 'errorText', 'fill', 'helperText', 'inputmode', 'label', 'labelPlacement', 'legacy', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'shape', 'spellcheck', 'step', 'type', 'value'],
}) })
export class IonInput { export class IonInput {
protected el: HTMLElement; protected el: HTMLElement;

View File

@ -429,7 +429,6 @@ export const IonInput = /*@__PURE__*/ defineContainer<JSX.IonInput, JSX.IonInput
'shape', 'shape',
'spellcheck', 'spellcheck',
'step', 'step',
'size',
'type', 'type',
'value', 'value',
'ionInput', 'ionInput',