diff --git a/packages/upload/src/styles/vaadin-upload-base-styles.js b/packages/upload/src/styles/vaadin-upload-base-styles.js
index 1beff605617..09ab351b840 100644
--- a/packages/upload/src/styles/vaadin-upload-base-styles.js
+++ b/packages/upload/src/styles/vaadin-upload-base-styles.js
@@ -39,6 +39,10 @@ export const uploadStyles = css`
gap: var(--vaadin-gap-s);
}
+ ::slotted([slot='drop-label-content']) {
+ flex: 100;
+ }
+
[part='drop-label'] {
align-items: center;
color: var(--vaadin-upload-drop-label-color, var(--vaadin-text-color));
diff --git a/packages/upload/src/vaadin-upload.js b/packages/upload/src/vaadin-upload.js
index a230bbde362..890a7b796e2 100644
--- a/packages/upload/src/vaadin-upload.js
+++ b/packages/upload/src/vaadin-upload.js
@@ -125,10 +125,12 @@ class Upload extends UploadMixin(ElementMixin(ThemableMixin(PolylitMixin(LumoInj
return html`
diff --git a/packages/upload/test/dom/__snapshots__/vaadin-upload.test.snap.js b/packages/upload/test/dom/__snapshots__/vaadin-upload.test.snap.js
index 350985bbe8b..f918dabe7dc 100644
--- a/packages/upload/test/dom/__snapshots__/vaadin-upload.test.snap.js
+++ b/packages/upload/test/dom/__snapshots__/vaadin-upload.test.snap.js
@@ -198,16 +198,18 @@ snapshots["vaadin-upload shadow default"] =
`
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom-with-files.png b/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom-with-files.png
new file mode 100644
index 00000000000..e536271198e
Binary files /dev/null and b/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom-with-files.png differ
diff --git a/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom.png b/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom.png
new file mode 100644
index 00000000000..1a1efd0ab95
Binary files /dev/null and b/packages/upload/test/visual/base/screenshots/upload/baseline/drop-label-content-custom.png differ
diff --git a/packages/upload/test/visual/base/upload.test.js b/packages/upload/test/visual/base/upload.test.js
index 00f5bb2025c..515a7949962 100644
--- a/packages/upload/test/visual/base/upload.test.js
+++ b/packages/upload/test/visual/base/upload.test.js
@@ -145,4 +145,31 @@ describe('upload', () => {
await visualDiff(div, 'state-max-files-reached');
});
});
+
+ describe('drop-label-content slot', () => {
+ it('custom content', async () => {
+ element = fixtureSync(
+ `
+
+ Custom drop area content
+
+ `,
+ div,
+ );
+ await visualDiff(div, 'drop-label-content-custom');
+ });
+
+ it('custom content with files', async () => {
+ element = fixtureSync(
+ `
+
+ Custom drop area content
+
+ `,
+ div,
+ );
+ element.files = [{ name: 'Don Quixote.pdf', progress: 100, complete: true }];
+ await visualDiff(div, 'drop-label-content-custom-with-files');
+ });
+ });
});
diff --git a/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom-with-files.png b/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom-with-files.png
new file mode 100644
index 00000000000..eab6ebbdaeb
Binary files /dev/null and b/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom-with-files.png differ
diff --git a/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom.png b/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom.png
new file mode 100644
index 00000000000..18bfe631012
Binary files /dev/null and b/packages/upload/test/visual/lumo/screenshots/upload/baseline/drop-label-content-custom.png differ
diff --git a/packages/upload/test/visual/lumo/upload.test.js b/packages/upload/test/visual/lumo/upload.test.js
index 25675b5f316..169261bde25 100644
--- a/packages/upload/test/visual/lumo/upload.test.js
+++ b/packages/upload/test/visual/lumo/upload.test.js
@@ -157,4 +157,31 @@ describe('upload', () => {
await visualDiff(div, 'width');
});
});
+
+ describe('drop-label-content slot', () => {
+ it('custom content', async () => {
+ element = fixtureSync(
+ `
+
+ Custom drop area content
+
+ `,
+ div,
+ );
+ await visualDiff(div, 'drop-label-content-custom');
+ });
+
+ it('custom content with files', async () => {
+ element = fixtureSync(
+ `
+
+ Custom drop area content
+
+ `,
+ div,
+ );
+ element.files = [{ name: 'Don Quixote.pdf', progress: 100, complete: true }];
+ await visualDiff(div, 'drop-label-content-custom-with-files');
+ });
+ });
});