diff --git a/packages/input-container/src/styles/vaadin-input-container-base-styles.js b/packages/input-container/src/styles/vaadin-input-container-base-styles.js index e7f2976b3c4..245cc0bbf6d 100644 --- a/packages/input-container/src/styles/vaadin-input-container-base-styles.js +++ b/packages/input-container/src/styles/vaadin-input-container-base-styles.js @@ -118,6 +118,26 @@ export const inputContainerStyles = css` --vaadin-input-field-border-color: transparent; } + :host([theme~='align-start']) slot:not([name])::slotted(*) { + text-align: start; + } + + :host([theme~='align-center']) slot:not([name])::slotted(*) { + text-align: center; + } + + :host([theme~='align-end']) slot:not([name])::slotted(*) { + text-align: end; + } + + :host([theme~='align-left']) slot:not([name])::slotted(*) { + text-align: left; + } + + :host([theme~='align-right']) slot:not([name])::slotted(*) { + text-align: right; + } + @media (forced-colors: active) { :host { --vaadin-input-field-background: Field; diff --git a/packages/input-container/test/visual/base/input-container.test.js b/packages/input-container/test/visual/base/input-container.test.js index 45d0501afef..0edf95dea63 100644 --- a/packages/input-container/test/visual/base/input-container.test.js +++ b/packages/input-container/test/visual/base/input-container.test.js @@ -88,4 +88,46 @@ describe('input-container', () => { }); }); }); + + ['ltr', 'rtl'].forEach((dir) => { + describe(dir, () => { + before(() => { + document.documentElement.setAttribute('dir', dir); + }); + + after(() => { + document.documentElement.removeAttribute('dir'); + }); + + it('align-start', async () => { + input.value = 'Some text'; + element.setAttribute('theme', 'align-start'); + await visualDiff(div, `${dir}-align-start`); + }); + + it('align-center', async () => { + input.value = 'Some text'; + element.setAttribute('theme', 'align-center'); + await visualDiff(div, `${dir}-align-center`); + }); + + it('align-end', async () => { + input.value = 'Some text'; + element.setAttribute('theme', 'align-end'); + await visualDiff(div, `${dir}-align-end`); + }); + + it('align-left', async () => { + input.value = 'Some text'; + element.setAttribute('theme', 'align-left'); + await visualDiff(div, `${dir}-align-left`); + }); + + it('align-right', async () => { + input.value = 'Some text'; + element.setAttribute('theme', 'align-right'); + await visualDiff(div, `${dir}-align-right`); + }); + }); + }); }); diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-center.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-center.png new file mode 100644 index 00000000000..110a6c77f67 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-center.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-end.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-end.png new file mode 100644 index 00000000000..205a1762ac5 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-end.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-left.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-left.png new file mode 100644 index 00000000000..2aee0289111 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-left.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-right.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-right.png new file mode 100644 index 00000000000..205a1762ac5 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-right.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-start.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-start.png new file mode 100644 index 00000000000..2aee0289111 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/ltr-align-start.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-center.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-center.png new file mode 100644 index 00000000000..110a6c77f67 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-center.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-end.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-end.png new file mode 100644 index 00000000000..2aee0289111 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-end.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-left.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-left.png new file mode 100644 index 00000000000..2aee0289111 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-left.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-right.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-right.png new file mode 100644 index 00000000000..205a1762ac5 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-right.png differ diff --git a/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-start.png b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-start.png new file mode 100644 index 00000000000..205a1762ac5 Binary files /dev/null and b/packages/input-container/test/visual/base/screenshots/input-container/baseline/rtl-align-start.png differ diff --git a/packages/select/src/styles/vaadin-select-overlay-base-styles.js b/packages/select/src/styles/vaadin-select-overlay-base-styles.js index 814ae44d4c3..48546d6e5cc 100644 --- a/packages/select/src/styles/vaadin-select-overlay-base-styles.js +++ b/packages/select/src/styles/vaadin-select-overlay-base-styles.js @@ -22,4 +22,24 @@ export const selectOverlayStyles = css` [part='backdrop'] { background: transparent; } + + :host([theme~='align-start']) [part='overlay'] { + text-align: start; + } + + :host([theme~='align-center']) [part='overlay'] { + text-align: center; + } + + :host([theme~='align-end']) [part='overlay'] { + text-align: end; + } + + :host([theme~='align-left']) [part='overlay'] { + text-align: left; + } + + :host([theme~='align-right']) [part='overlay'] { + text-align: right; + } `; diff --git a/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-center.png b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-center.png new file mode 100644 index 00000000000..c8ca7fb642b Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-center.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-end.png b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-end.png new file mode 100644 index 00000000000..933e19eb673 Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-end.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-left.png b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-left.png new file mode 100644 index 00000000000..c11631024fb Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-left.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-right.png b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-right.png new file mode 100644 index 00000000000..933e19eb673 Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-right.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-start.png b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-start.png new file mode 100644 index 00000000000..c11631024fb Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/ltr-align-start.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-center.png b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-center.png new file mode 100644 index 00000000000..dc3fac25412 Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-center.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-end.png b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-end.png new file mode 100644 index 00000000000..d027fd85f81 Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-end.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-left.png b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-left.png new file mode 100644 index 00000000000..d027fd85f81 Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-left.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-right.png b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-right.png new file mode 100644 index 00000000000..1da9786662c Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-right.png differ diff --git a/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-start.png b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-start.png new file mode 100644 index 00000000000..1da9786662c Binary files /dev/null and b/packages/select/test/visual/base/screenshots/select/baseline/rtl-align-start.png differ diff --git a/packages/select/test/visual/base/select.test.js b/packages/select/test/visual/base/select.test.js index 1d72cdcd953..44aae9a9223 100644 --- a/packages/select/test/visual/base/select.test.js +++ b/packages/select/test/visual/base/select.test.js @@ -108,4 +108,50 @@ describe('select', () => { await visualDiff(div, 'value-multiline'); }); }); + + ['ltr', 'rtl'].forEach((dir) => { + describe(dir, () => { + before(() => { + document.documentElement.setAttribute('dir', dir); + }); + + after(() => { + document.documentElement.removeAttribute('dir'); + }); + + beforeEach(async () => { + div.style.height = '200px'; + div.style.width = '200px'; + element.value = 'value-1'; + await sendKeys({ press: 'Tab' }); + element.opened = true; + await nextFrame(); + }); + + it('align-start', async () => { + element.setAttribute('theme', 'align-start'); + await visualDiff(div, `${dir}-align-start`); + }); + + it('align-center', async () => { + element.setAttribute('theme', 'align-center'); + await visualDiff(div, `${dir}-align-center`); + }); + + it('align-end', async () => { + element.setAttribute('theme', 'align-end'); + await visualDiff(div, `${dir}-align-end`); + }); + + it('align-left', async () => { + element.setAttribute('theme', 'align-left'); + await visualDiff(div, `${dir}-align-left`); + }); + + it('align-right', async () => { + element.setAttribute('theme', 'align-right'); + await visualDiff(div, `${dir}-align-right`); + }); + }); + }); });