diff --git a/core/src/components/select/select.scss b/core/src/components/select/select.common.scss
similarity index 83%
rename from core/src/components/select/select.scss
rename to core/src/components/select/select.common.scss
index 0da89d4dc0..380f75e134 100644
--- a/core/src/components/select/select.scss
+++ b/core/src/components/select/select.common.scss
@@ -1,3 +1,4 @@
+@use "../../themes/mixins" as mixins;
@import "./select.vars";
// Select
@@ -31,7 +32,6 @@
--padding-bottom: 0px;
--padding-start: 0px;
--placeholder-color: currentColor;
- --placeholder-opacity: #{$placeholder-opacity};
--background: transparent;
--border-style: solid;
--highlight-color-focused: #{ion-color(primary, base)};
@@ -52,12 +52,9 @@
width: 100%;
min-height: 44px;
- font-family: $font-family-base;
-
white-space: nowrap;
cursor: pointer;
- z-index: $z-index-item-input;
}
/**
@@ -115,17 +112,13 @@
}
button {
- @include visually-hidden();
+ @include mixins.visually-hidden();
}
// Select Icon
// --------------------------------------------------
.select-icon {
- @include margin(0, 0, 0, $select-icon-margin-start);
-
- position: relative;
-
/**
* Prevent the icon from shrinking when the label and/or
* selected item text is long enough to fill the rest of
@@ -143,18 +136,6 @@ button {
color: inherit;
}
-/**
- * The select icon should be centered with
- * the entire container not just the control
- * with floating/stacked labels.
- */
-:host(.select-label-placement-stacked) .select-icon,
-:host(.select-label-placement-floating) .select-icon {
- position: absolute;
-
- height: 100%;
-}
-
/**
* This positions the icon at the correct
* edge of the component with LTR and RTL
@@ -193,9 +174,6 @@ button {
// --------------------------------------------------
.select-wrapper {
- @include padding(var(--padding-top), var(--padding-end), var(--padding-bottom), var(--padding-start));
- @include border-radius(var(--border-radius));
-
display: flex;
position: relative;
@@ -389,15 +367,6 @@ button {
flex-direction: row;
}
-:host(.select-label-placement-start) .label-text-wrapper {
- /**
- * The margin between the label and
- * the select should be on the end
- * when the label sits at the start.
- */
- @include margin(0, $form-control-label-margin, 0, 0);
-}
-
// Select Label Placement - End
// ----------------------------------------------------------------
@@ -409,27 +378,6 @@ button {
flex-direction: row-reverse;
}
-/**
- * The margin between the label and
- * the select should be on the start
- * when the label sits at the end.
- */
-:host(.select-label-placement-end) .label-text-wrapper {
- @include margin(0, 0, 0, $form-control-label-margin);
-}
-
-// Select Label Placement - Fixed
-// ----------------------------------------------------------------
-
-:host(.select-label-placement-fixed) .label-text-wrapper {
- /**
- * The margin between the label and
- * the select should be on the end
- * when the label sits at the start.
- */
- @include margin(0, $form-control-label-margin, 0, 0);
-}
-
/**
* Label is on the left of the select in LTR and
* on the right in RTL. Label also has a fixed width.
@@ -488,28 +436,11 @@ button {
*/
:host(.select-label-placement-stacked) .native-wrapper,
:host(.select-label-placement-floating) .native-wrapper {
- @include margin(1px, 0, 0, 0);
-
flex-grow: 1;
width: 100%;
}
-/**
- * This makes the label sit over the select
- * when the select is blurred and has no value.
- * The label should not sit over the select if the
- * select has a placeholder.
- * Note: This is different from what ion-input does
- * because the activating the select causes an overlay
- * to appear. This makes it hard to read the placeholder.
- * With ion-input, the input just focuses and the placeholder
- * is still easy to read.
- */
-:host(.select-label-placement-floating) .label-text-wrapper {
- @include transform(translateY(100%), scale(1));
-}
-
/**
* The placeholder should be hidden when the label
* is on top of the select. This prevents the label
@@ -537,19 +468,6 @@ button {
opacity: 1;
}
-/**
- * This makes the label sit above the input.
- */
-:host(.label-floating) .label-text-wrapper {
- @include transform(translateY(50%), scale(#{$form-control-label-stacked-scale}));
-
- /**
- * Label text should not extend
- * beyond the bounds of the input.
- */
- max-width: calc(100% / #{$form-control-label-stacked-scale});
-}
-
// Start/End Slots
// ----------------------------------------------------------------
@@ -564,11 +482,9 @@ button {
}
::slotted([slot="start"]:last-of-type) {
- margin-inline-end: $form-control-label-margin;
margin-inline-start: 0;
}
::slotted([slot="end"]:first-of-type) {
- margin-inline-start: $form-control-label-margin;
margin-inline-end: 0;
}
diff --git a/core/src/components/select/select.ionic.outline.scss b/core/src/components/select/select.ionic.outline.scss
new file mode 100644
index 0000000000..77427dd283
--- /dev/null
+++ b/core/src/components/select/select.ionic.outline.scss
@@ -0,0 +1,52 @@
+@use "../../themes/ionic/ionic.globals.scss" as globals;
+
+// Select Fill: Outline (Ionic Theme)
+// ----------------------------------------------------------------
+
+:host(.ion-color) {
+ --border-color: #{globals.current-color(base)};
+}
+
+// Select Label
+// ----------------------------------------------------------------
+
+:host(.select-fill-outline) .label-text-wrapper {
+ /**
+ * The label should appear on top of an outline
+ * container that overlaps it so it is always clickable.
+ */
+ position: relative;
+}
+
+// Select Inner Wrapper
+// ----------------------------------------------------------------
+
+:host(.select-fill-outline) .select-wrapper-inner {
+ @include globals.border-radius(var(--border-radius));
+ @include globals.padding(var(--padding-top), var(--padding-end), var(--padding-bottom), var(--padding-start));
+
+ /**
+ * Apply the background to the native select
+ * wrapper to only style the select.
+ */
+ background: var(--background);
+}
+
+// Outline Container
+// ----------------------------------------------------------------
+
+:host(.select-fill-outline) .select-outline {
+ @include globals.position(0, 0, 0, 0);
+ @include globals.border-radius(var(--border-radius));
+
+ position: absolute;
+
+ width: 100%;
+ height: 100%;
+
+ pointer-events: none;
+
+ border: var(--border-width) var(--border-style) var(--border-color);
+
+ box-sizing: border-box;
+}
diff --git a/core/src/components/select/select.ionic.scss b/core/src/components/select/select.ionic.scss
new file mode 100644
index 0000000000..5a7a17f488
--- /dev/null
+++ b/core/src/components/select/select.ionic.scss
@@ -0,0 +1,185 @@
+@use "../../themes/ionic/ionic.globals.scss" as globals;
+@use "./select.common";
+@use "./select.ionic.outline" as outline;
+
+// Ionic Select
+// -------------------------------------------------
+
+:host {
+ --background: #{globals.$ion-primitives-base-white};
+ // TODO(ROU-10778, ROU-10875): Sync the color names to the design system of
+ // ios and md. This will allow us to have a single color map.
+ --border-color: #{globals.current-color(neutral)};
+ --border-radius: #{globals.$ion-border-radius-400};
+ --border-width: #{globals.$ion-border-size-025};
+ --padding-start: #{globals.$ion-space-400};
+ --padding-end: #{globals.$ion-space-400};
+ --padding-top: #{globals.$ion-space-300};
+ --padding-bottom: #{globals.$ion-space-300};
+ --placeholder-color: #{globals.$ion-primitives-neutral-800};
+ --placeholder-opacity: 1;
+}
+
+// Select Label
+// ----------------------------------------------------------------
+
+.label-text-wrapper {
+ @include globals.typography(globals.$ion-body-sm-medium);
+
+ color: globals.$ion-primitives-neutral-1000;
+}
+
+// Select Label Placement - Start & Fixed
+// ----------------------------------------------------------------
+
+:host(.select-label-placement-start) .label-text-wrapper,
+:host(.select-label-placement-fixed) .label-text-wrapper {
+ /**
+ * The margin between the label and
+ * the select should be on the end
+ * when the label sits at the start.
+ */
+ @include globals.margin(0, globals.$ion-space-100, 0, 0);
+}
+
+// Select Label Placement - End
+// ----------------------------------------------------------------
+
+:host(.select-label-placement-end) .label-text-wrapper {
+ /**
+ * The margin between the label and
+ * the select should be on the start
+ * when the label sits at the end.
+ */
+ @include globals.margin(0, 0, 0, globals.$ion-space-100);
+}
+
+// Select Label Placement - Stacked & Floating
+// ----------------------------------------------------------------
+
+:host(.select-label-placement-stacked) .label-text-wrapper,
+:host(.select-label-placement-floating) .label-text-wrapper {
+ /**
+ * The margin between the label and
+ * the select should be on the bottom
+ * when the label sits at the top.
+ */
+ @include globals.margin(0, 0, globals.$ion-space-100, 0);
+}
+
+// Select Wrapper
+// ----------------------------------------------------------------
+
+.select-wrapper {
+ min-width: globals.$ion-scale-5000;
+
+ background: transparent;
+}
+
+// Select Inner Wrapper
+// ----------------------------------------------------------------
+
+.select-wrapper-inner {
+ @include globals.border-radius(var(--border-radius));
+ @include globals.padding(var(--padding-top), var(--padding-end), var(--padding-bottom), var(--padding-start));
+
+ position: relative;
+
+ height: globals.$ion-scale-1200;
+
+ background: var(--background);
+
+ box-sizing: border-box;
+
+ gap: globals.$ion-space-200;
+}
+
+:host(.select-label-placement-stacked) .select-wrapper-inner,
+:host(.select-label-placement-floating) .select-wrapper-inner {
+ width: 100%;
+}
+
+// Select Native Wrapper
+// ----------------------------------------------------------------
+
+.native-wrapper {
+ @include globals.typography(globals.$ion-body-md-regular);
+
+ color: globals.$ion-primitives-neutral-1200;
+}
+
+:host(.select-label-placement-stacked) .native-wrapper,
+:host(.select-label-placement-floating) .native-wrapper {
+ /**
+ * Text should not extend beyond the bounds of the select.
+ * This is done by setting the width to the full width minus
+ * the icon width and the gap between the icon and the text.
+ */
+ width: calc(100% - globals.$ion-scale-400 - globals.$ion-space-200);
+}
+
+// Start/End Slots
+// ----------------------------------------------------------------
+
+/**
+ * Slotted buttons have a lot of default padding that can
+ * cause them to look misaligned from other pieces such
+ * as the control's label, especially when using a clear
+ * fill. We also make them circular to ensure that non-
+ * clear buttons and the focus/hover state on clear ones
+ * don't look too crowded.
+ */
+::slotted(ion-button[slot="start"].button-has-icon-only),
+::slotted(ion-button[slot="end"].button-has-icon-only) {
+ --border-radius: 50%;
+ --padding-start: 8px;
+ --padding-end: 8px;
+ --padding-top: 8px;
+ --padding-bottom: 8px;
+
+ aspect-ratio: 1;
+}
+
+// Select Icon
+// --------------------------------------------------
+
+.select-icon,
+::slotted(ion-icon) {
+ width: globals.$ion-scale-400;
+ height: globals.$ion-scale-400;
+}
+
+.select-icon {
+ transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+/**
+ * This rotates the chevron icon
+ * when the select is activated.
+ * This should only happen on MD.
+ */
+:host(.select-expanded:not(.has-expanded-icon)) .select-icon {
+ @include globals.transform(rotate(180deg));
+}
+
+.select-icon {
+ color: globals.$ion-primitives-neutral-800;
+}
+
+// States
+// ----------------------------------------------------------------
+
+// Disabled
+// ----------------------------------------------------------------
+
+:host(.select-disabled) {
+ --background: #{globals.$ion-primitives-neutral-100};
+ --border-color: #{globals.$ion-primitives-neutral-300};
+}
+
+:host(.select-disabled) .label-text-wrapper,
+// Targets the text inside the select and the placeholder
+:host(.select-disabled) .select-text,
+:host(.select-disabled) .select-icon {
+ color: globals.$ion-primitives-neutral-500;
+}
diff --git a/core/src/components/select/select.ios.scss b/core/src/components/select/select.ios.scss
index a1d3f5df08..7a7a4139f6 100644
--- a/core/src/components/select/select.ios.scss
+++ b/core/src/components/select/select.ios.scss
@@ -1,4 +1,4 @@
-@import "./select";
+@import "./select.native";
@import "./select.ios.vars";
// iOS Select
diff --git a/core/src/components/select/select.md.scss b/core/src/components/select/select.md.scss
index 9b106f06db..4d19c8419a 100644
--- a/core/src/components/select/select.md.scss
+++ b/core/src/components/select/select.md.scss
@@ -1,4 +1,4 @@
-@import "./select";
+@import "./select.native";
@import "./select.md.vars";
@import "./select.md.solid.scss";
@import "./select.md.outline.scss";
diff --git a/core/src/components/select/select.native.scss b/core/src/components/select/select.native.scss
new file mode 100644
index 0000000000..8c60a4f7cc
--- /dev/null
+++ b/core/src/components/select/select.native.scss
@@ -0,0 +1,130 @@
+@import "../../themes/native/native.globals";
+@import "./select.common";
+
+// Select: Native
+// --------------------------------------------------
+
+:host {
+ --placeholder-opacity: #{$placeholder-opacity};
+
+ font-family: $font-family-base;
+
+ z-index: $z-index-item-input;
+}
+
+// Select Icon
+// --------------------------------------------------
+
+.select-icon {
+ @include margin(0, 0, 0, $select-icon-margin-start);
+
+ position: relative;
+}
+
+/**
+ * The select icon should be centered with
+ * the entire container not just the control
+ * with floating/stacked labels.
+ */
+:host(.select-label-placement-stacked) .select-icon,
+:host(.select-label-placement-floating) .select-icon {
+ position: absolute;
+
+ height: 100%;
+}
+
+// Select Wrapper
+// --------------------------------------------------
+
+.select-wrapper {
+ @include padding(var(--padding-top), var(--padding-end), var(--padding-bottom), var(--padding-start));
+ @include border-radius(var(--border-radius));
+}
+
+// Select Label Placement - Start
+// ----------------------------------------------------------------
+
+:host(.select-label-placement-start) .label-text-wrapper {
+ /**
+ * The margin between the label and
+ * the select should be on the end
+ * when the label sits at the start.
+ */
+ @include margin(0, $form-control-label-margin, 0, 0);
+}
+
+// Select Label Placement - End
+// ----------------------------------------------------------------
+/**
+ * The margin between the label and
+ * the select should be on the start
+ * when the label sits at the end.
+ */
+:host(.select-label-placement-end) .label-text-wrapper {
+ @include margin(0, 0, 0, $form-control-label-margin);
+}
+
+// Select Label Placement - Fixed
+// ----------------------------------------------------------------
+
+:host(.select-label-placement-fixed) .label-text-wrapper {
+ /**
+ * The margin between the label and
+ * the select should be on the end
+ * when the label sits at the start.
+ */
+ @include margin(0, $form-control-label-margin, 0, 0);
+}
+
+// Select Label Placement - Stacked and Floating
+// ----------------------------------------------------------------
+
+/**
+ * Ensures the select does not
+ * overlap the label.
+ * Also ensure that the native wrapper
+ * takes up the remaining available height and width.
+ */
+:host(.select-label-placement-stacked) .native-wrapper,
+:host(.select-label-placement-floating) .native-wrapper {
+ @include margin(1px, 0, 0, 0);
+}
+
+/**
+ * This makes the label sit over the select
+ * when the select is blurred and has no value.
+ * The label should not sit over the select if the
+ * select has a placeholder.
+ * Note: This is different from what ion-input does
+ * because the activating the select causes an overlay
+ * to appear. This makes it hard to read the placeholder.
+ * With ion-input, the input just focuses and the placeholder
+ * is still easy to read.
+ */
+:host(.select-label-placement-floating) .label-text-wrapper {
+ @include transform(translateY(100%), scale(1));
+}
+
+/**
+ * This makes the label sit above the input.
+ */
+:host(.label-floating) .label-text-wrapper {
+ @include transform(translateY(50%), scale(#{$form-control-label-stacked-scale}));
+
+ /**
+ * Label text should not extend
+ * beyond the bounds of the input.
+ */
+ max-width: calc(100% / #{$form-control-label-stacked-scale});
+}
+
+// Start/End Slots
+// ----------------------------------------------------------------
+
+::slotted([slot="start"]:last-of-type) {
+ margin-inline-end: $form-control-label-margin;
+}
+
+::slotted([slot="end"]:first-of-type) {
+ margin-inline-start: $form-control-label-margin;
+}
diff --git a/core/src/components/select/select.tsx b/core/src/components/select/select.tsx
index ab0de8f0f3..3efd9c8acb 100644
--- a/core/src/components/select/select.tsx
+++ b/core/src/components/select/select.tsx
@@ -50,7 +50,7 @@ import type { SelectChangeEventDetail, SelectInterface, SelectCompareFn } from '
styleUrls: {
ios: 'select.ios.scss',
md: 'select.md.scss',
- ionic: 'select.md.scss',
+ ionic: 'select.ionic.scss',
},
shadow: true,
})
@@ -1050,6 +1050,8 @@ export class Select implements ComponentInterface {
this;
const theme = getIonTheme(this);
const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
+ const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
+ const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
const rtl = isRTL(el) ? 'rtl' : 'ltr';
const inItem = hostContext('ion-item', this.el);
@@ -1104,13 +1106,25 @@ export class Select implements ComponentInterface {
diff --git a/core/src/components/select/select.vars.scss b/core/src/components/select/select.vars.scss
index 1b04994b16..3658ed826b 100644
--- a/core/src/components/select/select.vars.scss
+++ b/core/src/components/select/select.vars.scss
@@ -1,4 +1,2 @@
-@import "../../themes/native/native.globals";
-
/// @prop - Margin start of the select icon
$select-icon-margin-start: 4px;
diff --git a/core/src/components/select/test/color/select.e2e.ts b/core/src/components/select/test/color/select.e2e.ts
index 9ba5e0e2ed..d49867ee42 100644
--- a/core/src/components/select/test/color/select.e2e.ts
+++ b/core/src/components/select/test/color/select.e2e.ts
@@ -1,6 +1,26 @@
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
+configs({ modes: ['md', 'ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('input: color'), () => {
+ test.describe('input: fill outline', () => {
+ test('should set label and highlight color on expand', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apple
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+ await expect(select).toHaveScreenshot(screenshot(`select-outline-color`));
+ });
+ });
+ });
+});
+
configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('input: color'), () => {
test.describe('input: fill none', () => {
@@ -33,20 +53,5 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
await expect(select).toHaveScreenshot(screenshot(`select-solid-color`));
});
});
- test.describe('input: fill outline', () => {
- test('should set label and highlight color on expand', async ({ page }) => {
- await page.setContent(
- `
-
- Apple
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
- await expect(select).toHaveScreenshot(screenshot(`select-outline-color`));
- });
- });
});
});
diff --git a/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..9647eccce5
Binary files /dev/null and b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..28aed88baf
Binary files /dev/null and b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..2b641cdedd
Binary files /dev/null and b/core/src/components/select/test/color/select.e2e.ts-snapshots/select-outline-color-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts b/core/src/components/select/test/custom/select.e2e.ts
index 5823236517..ca82fd86f7 100644
--- a/core/src/components/select/test/custom/select.e2e.ts
+++ b/core/src/components/select/test/custom/select.e2e.ts
@@ -1,7 +1,7 @@
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
-configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+configs({ modes: ['ios', 'md', 'ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('select: custom'), () => {
test('should be able to customize select using css apis', async ({ page }) => {
test.info().annotations.push({
@@ -64,6 +64,10 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
ion-select::part(label) {
color: green;
}
+
+ ion-select::part(placeholder) {
+ color: purple;
+ }
`,
config
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..a875da746d
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..64aede09fe
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..5f75f8d83a
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-diff-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..c4299d65bb
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..143798a0f3
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..67af6bf797
Binary files /dev/null and b/core/src/components/select/test/custom/select.e2e.ts-snapshots/select-custom-parts-diff-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/fill/index.html b/core/src/components/select/test/fill/index.html
index b290135980..6f4bd10462 100644
--- a/core/src/components/select/test/fill/index.html
+++ b/core/src/components/select/test/fill/index.html
@@ -48,7 +48,9 @@
No Fill
-
+
+ Apple
+
diff --git a/core/src/components/select/test/fill/select.e2e.ts b/core/src/components/select/test/fill/select.e2e.ts
index 350c0b847a..5f54991f9e 100644
--- a/core/src/components/select/test/fill/select.e2e.ts
+++ b/core/src/components/select/test/fill/select.e2e.ts
@@ -1,6 +1,56 @@
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
+configs({ modes: ['md', 'ionic-md'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('select: fill'), () => {
+ test.describe('select: fill outline', () => {
+ test('should not have visual regressions', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apple
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+ await expect(select).toHaveScreenshot(screenshot(`select-fill-outline`));
+ });
+ test('padding and border radius should be customizable', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+ Apple
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+ await expect(select).toHaveScreenshot(screenshot(`select-fill-shaped-outline-custom`));
+ });
+ });
+ });
+});
+
configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('select: fill'), () => {
test.describe('select: fill solid', () => {
@@ -85,23 +135,6 @@ configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => {
});
});
test.describe('select: fill outline', () => {
- test('should not have visual regressions', async ({ page }) => {
- await page.setContent(
- `
-
- Apple
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
- await expect(select).toHaveScreenshot(screenshot(`select-fill-outline`));
- });
test('should render correctly with floating label', async ({ page }) => {
await page.setContent(
`
@@ -139,32 +172,6 @@ configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => {
const select = page.locator('ion-select');
await expect(select).toHaveScreenshot(screenshot(`select-fill-shaped-outline`));
});
- test('padding and border radius should be customizable', async ({ page }) => {
- await page.setContent(
- `
-
-
- Apple
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
- await expect(select).toHaveScreenshot(screenshot(`select-fill-shaped-outline-custom`));
- });
});
});
});
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..fafefce159
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..b4c35809de
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..da272e1149
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..9e0822760d
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..9e853c870a
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..6a5a85d69a
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-outline-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..388d539e25
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..52d87bb845
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..998b85533d
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..ca20cc597c
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..b754a973fb
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..1dea4f4eda
Binary files /dev/null and b/core/src/components/select/test/fill/select.e2e.ts-snapshots/select-fill-shaped-outline-custom-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts b/core/src/components/select/test/item/select.e2e.ts
index 05ca3e4abb..5abb7075d7 100644
--- a/core/src/components/select/test/item/select.e2e.ts
+++ b/core/src/components/select/test/item/select.e2e.ts
@@ -1,7 +1,7 @@
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
-configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+configs({ modes: ['ios', 'md', 'ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('select: item'), () => {
test('should render correctly in list with no fill', async ({ page }) => {
await page.setContent(
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..d7cd69c9eb
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..fbabd2302a
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..245619e4c1
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-inset-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..fd95ef363f
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..87dc2c8e0c
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..1f392e93af
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-item-flex-container-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..a7e5ca4b96
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..7d214af3c4
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..ee415ed49c
Binary files /dev/null and b/core/src/components/select/test/item/select.e2e.ts-snapshots/select-list-no-fill-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts b/core/src/components/select/test/label/select.e2e.ts
index 4999268e4f..d514918db8 100644
--- a/core/src/components/select/test/label/select.e2e.ts
+++ b/core/src/components/select/test/label/select.e2e.ts
@@ -7,7 +7,7 @@ import { configs, test } from '@utils/test/playwright';
* used to change the alignment of the select
* within the container.
*/
-configs().forEach(({ title, screenshot, config }) => {
+configs({ modes: ['ios', 'md', 'ionic-md'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('select: label'), () => {
test.describe('select: default placement', () => {
test('should render a space between justification with a default select', async ({ page }) => {
@@ -35,6 +35,73 @@ configs().forEach(({ title, screenshot, config }) => {
});
});
+ test.describe('select: stacked placement', () => {
+ test('label should appear above the select when there is a value', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apples
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+ await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-value`));
+ });
+ test('label should appear above the select when there is no value', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apples
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+ await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-no-value`));
+ });
+ test('label should appear on top of the select when the select is expanded', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apples
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+
+ await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-expanded`));
+ });
+ test('long text should truncate', async ({ page }) => {
+ await page.setContent(
+ `
+
+ Apples Apples Apples Apples Apples Apples Apples Apples
+
+ `,
+ config
+ );
+
+ const select = page.locator('ion-select');
+
+ await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-long-text`));
+ });
+ });
+ });
+});
+
+/**
+ * By default ion-select takes up the full width
+ * of its container. The justify property can be
+ * used to change the alignment of the select
+ * within the container.
+ */
+configs().forEach(({ title, screenshot, config }) => {
+ test.describe(title('select: label'), () => {
test.describe('select: start placement', () => {
test('should render a start justification with label in the start position', async ({ page }) => {
await page.setContent(
@@ -224,63 +291,6 @@ configs().forEach(({ title, screenshot, config }) => {
await expect(select).toHaveScreenshot(screenshot(`select-label-floating-long-text`));
});
});
-
- test.describe('select: stacked placement', () => {
- test('label should appear above the select when there is a value', async ({ page }) => {
- await page.setContent(
- `
-
- Apples
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
- await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-value`));
- });
- test('label should appear above the select when there is no value', async ({ page }) => {
- await page.setContent(
- `
-
- Apples
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
- await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-no-value`));
- });
- test('label should appear on top of the select when the select is expanded', async ({ page }) => {
- await page.setContent(
- `
-
- Apples
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
-
- await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-expanded`));
- });
- test('long text should truncate', async ({ page }) => {
- await page.setContent(
- `
-
- Apples Apples Apples Apples Apples Apples Apples Apples
-
- `,
- config
- );
-
- const select = page.locator('ion-select');
-
- await expect(select).toHaveScreenshot(screenshot(`select-label-stacked-long-text`));
- });
- });
});
});
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..3ab3282cd8
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..6bd3d241d8
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..4b27f7e52c
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..51a7bcb669
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..00e79749bd
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..68a678fb16
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-default-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..f1ba26616d
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..7c276d2dce
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..84322e2868
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..6dd3bb451a
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..bb5eb940ac
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..35d313b3a4
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-long-label-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..496ca634f1
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..d392d08555
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..8fe63aa759
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..7833129e92
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..bbfe0e65a5
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..3d9bcf288c
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-expanded-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..60332b6f7d
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..24529d2a77
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..e2c5af5d56
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..3f7421e038
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..c29eebd89a
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..80dfaa10c3
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-long-text-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..3c511786e9
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..36d24087ba
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..8115b13b17
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..1da37f87da
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..d6c2b8d619
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..effeeacdd6
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-no-value-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..480a1486cb
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..ea14caefaf
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..5587e01fc1
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Chrome-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..83d76b87ef
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..ab6bed9a33
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Safari-linux.png b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..5d1c60ed44
Binary files /dev/null and b/core/src/components/select/test/label/select.e2e.ts-snapshots/select-label-stacked-value-ionic-md-rtl-light-Mobile-Safari-linux.png differ
diff --git a/core/src/components/select/test/states/index.html b/core/src/components/select/test/states/index.html
index a4c71b368d..8c7a76db52 100644
--- a/core/src/components/select/test/states/index.html
+++ b/core/src/components/select/test/states/index.html
@@ -19,7 +19,7 @@
grid-row-gap: 20px;
grid-column-gap: 20px;
}
- h2 {
+ h3 {
font-size: 12px;
font-weight: normal;
@@ -49,31 +49,65 @@
+ No Fill
-
Placeholder
-
+ Disabled, No Value
+
-
Value
-
- Apples
-
-
-
-
-
Disabled, Placeholder
+ Disabled, Placeholder
-
Disabled, Value
+ Disabled, Value
Apples
+
+ Outline
+
+
+
Disabled, No Value
+
+
+
+
+
Disabled, Placeholder
+
+
+
+
+
Disabled, Value
+
+ Apples
+
+
+
+
+ Solid
+
+
+
Disabled, No Value
+
+
+
+
+
Disabled, Placeholder
+
+
+
+
+
Disabled, Value
+
+ Apples
+
+
+