diff --git a/core/src/components/input/input.md.outline.scss b/core/src/components/input/input.md.outline.scss index 9581300459b..d9e3ee34d35 100644 --- a/core/src/components/input/input.md.outline.scss +++ b/core/src/components/input/input.md.outline.scss @@ -15,11 +15,32 @@ } /** - * The border should get thicker when + * If the input has a validity state, the + * border should reflect that as a color. + */ +:host(.input-fill-outline.ion-touched.ion-valid), +:host(.input-fill-outline.ion-touched.ion-invalid) { + --border-color: var(--highlight-color); +} + +/** + * Border should be + * slightly darker on hover. + */ +@media (any-hover: hover) { + :host(.input-fill-outline:hover) { + --border-color: #{$background-color-step-750}; + } +} + +/** + * The border should get thicker + * and take on component color when * the input is focused. */ :host(.input-fill-outline.has-focus) { --border-width: 2px; + --border-color: var(--highlight-color); } /** @@ -30,16 +51,6 @@ border-top: none; } -/** - * Border should be - * slightly darker on hover. - */ -@media (any-hover: hover) { - :host(.input-fill-outline:hover) { - --border-color: #{$background-color-step-750}; - } -} - /** * Outline inputs do not have a bottom border. * Instead, they have a border that wraps the diff --git a/core/src/components/input/input.md.scss b/core/src/components/input/input.md.scss index b07c0bf9473..10c3bfe149a 100644 --- a/core/src/components/input/input.md.scss +++ b/core/src/components/input/input.md.scss @@ -49,6 +49,39 @@ min-height: 56px; } +// Input Label +// ---------------------------------------------------------------- + +/** + * When the input is focused the label should + * take on the highlight color. + */ +:host(.has-focus) label { + color: var(--highlight-color); +} + +// Input Highlight +// ---------------------------------------------------------------- + +.input-highlight { + @include position(null, null, -1px, 0); + + position: absolute; + + width: 100%; + height: 2px; + + transform: scale(0); + + transition: transform 200ms; + + background: var(--highlight-color); +} + +:host(.has-focus) .input-highlight { + transform: scale(1); +} + // Input Shape Rounded // ---------------------------------------------------------------- diff --git a/core/src/components/input/input.md.solid.scss b/core/src/components/input/input.md.solid.scss index 280c835cea0..9aba43a7d2e 100644 --- a/core/src/components/input/input.md.solid.scss +++ b/core/src/components/input/input.md.solid.scss @@ -19,6 +19,15 @@ border-bottom: var(--border-width) var(--border-style) var(--border-color); } +/** + * If the input has a validity state, the + * border should reflect that as a color. + */ +:host(.input-fill-solid.ion-touched.ion-valid) .input-wrapper, +:host(.input-fill-solid.ion-touched.ion-invalid) .input-wrapper { + --border-color: var(--highlight-color); +} + :host(.input-fill-solid) .input-bottom { border-top: none; } diff --git a/core/src/components/input/input.scss b/core/src/components/input/input.scss index 51fed885a2e..9d29d76195e 100644 --- a/core/src/components/input/input.scss +++ b/core/src/components/input/input.scss @@ -43,6 +43,14 @@ --highlight-color-valid: #{ion-color(success, base)}; --highlight-color-invalid: #{ion-color(danger, base)}; + /** + * This is a private API that is used to switch + * out the highlight color based on the state + * of the component without having to write + * different selectors for different fill variants. + */ + --highlight-color: var(--highlight-color-focused); + display: block; position: relative; @@ -77,10 +85,14 @@ --padding-start: 0; } -:host(.ion-color) { +:host(.legacy-input.ion-color) { color: current-color(base); } +:host(.ion-color) { + --highlight-color-focused: #{current-color(base)}; +} + // Native Text Input // -------------------------------------------------- @@ -251,6 +263,17 @@ background: var(--background); } +// Input Highlight +// ---------------------------------------------------------------- + +:host(.ion-touched.ion-invalid) { + --highlight-color: var(--highlight-color-invalid); +} + +:host(.ion-touched.ion-valid) { + --highlight-color: var(--highlight-color-valid); +} + // Input Bottom Content // ---------------------------------------------------------------- @@ -271,6 +294,20 @@ font-size: 12px; } +/** + * If the input has a validity state, the + * border and label should reflect that as a color. + */ +:host(.ion-touched.ion-valid) .input-bottom, +:host(.ion-touched.ion-invalid) .input-bottom { + --border-color: var(--highlight-color); +} + +:host(.ion-touched.ion-valid) label, +:host(.ion-touched.ion-invalid) label { + color: var(--highlight-color); +} + // Input Hint Text // ---------------------------------------------------------------- @@ -347,7 +384,7 @@ transition: opacity 150ms cubic-bezier(0.4, 0, 0.2, 1); } -// Input Label Placement +// Input Label Placement - Start // ---------------------------------------------------------------- /** @@ -358,6 +395,9 @@ flex-direction: row; } +// Input Label Placement - End +// ---------------------------------------------------------------- + /** * Label is on the right of the input in LTR and * on the left in RTL. @@ -375,6 +415,9 @@ @include margin(0, 0, 0, 8px); } +// Input Label Placement - Fixed +// ---------------------------------------------------------------- + /** * Label is on the left of the input in LTR and * on the right in RTL. Label also has a fixed width. @@ -389,6 +432,9 @@ max-width: 200px; } +// Input Label Placement - Stacked and Floating +// ---------------------------------------------------------------- + /** * Stacked: Label sits above the input and is scaled down. * Floating: Label sits over the input when the input has no diff --git a/core/src/components/input/input.tsx b/core/src/components/input/input.tsx index 6ec349c6356..e90691c66fb 100644 --- a/core/src/components/input/input.tsx +++ b/core/src/components/input/input.tsx @@ -604,6 +604,7 @@ export class Input implements ComponentInterface { const { disabled, fill, readonly, shape, inputId, labelPlacement } = this; const mode = getIonMode(this); const value = this.getValue(); + const shouldRenderHighlight = mode === 'md' && fill !== 'outline'; return ( )} + {shouldRenderHighlight &&
} {this.renderBottomContent()}
diff --git a/core/src/components/input/test/highlight/index.html b/core/src/components/input/test/highlight/index.html new file mode 100644 index 00000000000..29172a5af6e --- /dev/null +++ b/core/src/components/input/test/highlight/index.html @@ -0,0 +1,455 @@ + + + + + Input - Highlight + + + + + + + + + + + + + + Input - Highlight + + + + +

No Fill, Default

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

No Fill, Floating

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

No Fill, Stacked

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Solid, Default

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Solid, Floating

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Solid, Stacked

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Outline, Default

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Outline, Floating

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+ +

Outline, Stacked

+
+
+

Focus

+ +
+ +
+

Valid

+ +
+ +
+

Invalid

+ +
+
+
+
+ + diff --git a/core/src/components/input/test/highlight/input.e2e.ts b/core/src/components/input/test/highlight/input.e2e.ts new file mode 100644 index 00000000000..9770f742843 --- /dev/null +++ b/core/src/components/input/test/highlight/input.e2e.ts @@ -0,0 +1,165 @@ +import { expect } from '@playwright/test'; +import { test } from '@utils/test/playwright'; + +test.describe('input: highlights', () => { + test.beforeEach(({ skip }) => { + skip.rtl(); + }); + + test.describe('input: no fill', () => { + test('should render valid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-no-fill-valid-${page.getSnapshotSettings()}.png`); + }); + test('should render invalid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-no-fill-invalid-${page.getSnapshotSettings()}.png`); + }); + test('should render focused state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-no-fill-focus-${page.getSnapshotSettings()}.png`); + }); + }); + test.describe('input: solid', () => { + test('should render valid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-solid-valid-${page.getSnapshotSettings()}.png`); + }); + test('should render invalid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-solid-invalid-${page.getSnapshotSettings()}.png`); + }); + test('should render focused state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-solid-focus-${page.getSnapshotSettings()}.png`); + }); + }); + test.describe('input: outline', () => { + test('should render valid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-outline-valid-${page.getSnapshotSettings()}.png`); + }); + test('should render invalid state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-outline-invalid-${page.getSnapshotSettings()}.png`); + }); + test('should render focused state correctly', async ({ page }) => { + await page.setContent(` + + `); + + const input = page.locator('ion-input'); + expect(await input.screenshot()).toMatchSnapshot(`input-outline-focus-${page.getSnapshotSettings()}.png`); + }); + }); +}); diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..29098919f50 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..6ddaa18d076 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..04aee41bde8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..040851845c3 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..731c8aea0a3 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..3c2e716d827 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-focus-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b866fd6b2e1 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..5cd7ce12064 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..c13d1d3c627 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b8388adcd4b Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..2930e1f5dac Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..fc17505d21e Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-invalid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..c2fde971df8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..be75620d4e0 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..1e9b75ae12a Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..f5585b4060e Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..9cf4a5f0349 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..a4611136ce3 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-no-fill-valid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..29098919f50 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..6ddaa18d076 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..04aee41bde8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..04b49ed8ffb Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..23e7b5ed14f Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..737165374c9 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-focus-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b866fd6b2e1 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..5cd7ce12064 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..c13d1d3c627 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..72dcfec5739 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..95cadfc9f4c Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..85312b4068a Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-invalid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..c2fde971df8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..be75620d4e0 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..1e9b75ae12a Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..a470e43e537 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..6153f1ce8f9 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..1934a0f4659 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-outline-valid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..29098919f50 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..6ddaa18d076 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..04aee41bde8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b46ffc4bf6d Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..9142b72b333 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..89fa7f12c37 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-focus-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b866fd6b2e1 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..5cd7ce12064 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..c13d1d3c627 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..aef2f33a9ca Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..2da1b499f69 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..90252e16464 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-invalid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..c2fde971df8 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..be75620d4e0 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..1e9b75ae12a Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..b7dbcfa06c4 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..64028adc1d4 Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..72a6144b7ed Binary files /dev/null and b/core/src/components/input/test/highlight/input.e2e.ts-snapshots/input-solid-valid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Firefox-linux.png b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Firefox-linux.png index 5e5c44c5347..4995fb5f8b6 100644 Binary files a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Firefox-linux.png and b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Safari-linux.png b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Safari-linux.png index 130562236d0..69e992bddb8 100644 Binary files a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Safari-linux.png and b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Firefox-linux.png b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Firefox-linux.png index e8c5524a8a7..feaad1fa477 100644 Binary files a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Firefox-linux.png and b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Firefox-linux.png differ diff --git a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Safari-linux.png b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Safari-linux.png index 5005c0437c0..14c75cc4b3b 100644 Binary files a/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Safari-linux.png and b/core/src/components/input/test/label-placement/input.e2e.ts-snapshots/input-focused-placement-floating-no-value-md-rtl-Mobile-Safari-linux.png differ