@vaadin/upload 25.0.0-alpha2 → 25.0.0-alpha20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +11 -12
- package/src/styles/vaadin-upload-base-styles.d.ts +8 -0
- package/src/styles/vaadin-upload-base-styles.js +59 -0
- package/src/styles/vaadin-upload-file-base-styles.js +138 -0
- package/src/styles/vaadin-upload-file-list-base-styles.d.ts +8 -0
- package/src/styles/vaadin-upload-file-list-base-styles.js +36 -0
- package/src/styles/vaadin-upload-icon-base-styles.d.ts +8 -0
- package/src/styles/vaadin-upload-icon-base-styles.js +33 -0
- package/src/vaadin-upload-file-list.js +3 -16
- package/src/vaadin-upload-file.d.ts +0 -2
- package/src/vaadin-upload-file.js +47 -45
- package/src/vaadin-upload-icon.js +10 -10
- package/src/vaadin-upload-mixin.d.ts +2 -2
- package/src/vaadin-upload-mixin.js +5 -4
- package/src/vaadin-upload.d.ts +8 -8
- package/src/vaadin-upload.js +13 -25
- package/vaadin-upload.js +1 -1
- package/web-types.json +5 -5
- package/web-types.lit.json +5 -5
- package/src/vaadin-upload-file-styles.js +0 -32
- package/theme/lumo/vaadin-upload-styles.d.ts +0 -8
- package/theme/lumo/vaadin-upload-styles.js +0 -192
- package/theme/lumo/vaadin-upload.d.ts +0 -2
- package/theme/lumo/vaadin-upload.js +0 -2
- /package/src/{vaadin-upload-file-styles.d.ts → styles/vaadin-upload-file-base-styles.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/upload",
|
|
3
|
-
"version": "25.0.0-
|
|
3
|
+
"version": "25.0.0-alpha20",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"files": [
|
|
23
23
|
"src",
|
|
24
|
-
"theme",
|
|
25
24
|
"vaadin-*.d.ts",
|
|
26
25
|
"vaadin-*.js",
|
|
27
26
|
"web-types.json",
|
|
@@ -35,23 +34,23 @@
|
|
|
35
34
|
],
|
|
36
35
|
"dependencies": {
|
|
37
36
|
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
38
|
-
"@vaadin/a11y-base": "25.0.0-
|
|
39
|
-
"@vaadin/button": "25.0.0-
|
|
40
|
-
"@vaadin/component-base": "25.0.0-
|
|
41
|
-
"@vaadin/progress-bar": "25.0.0-
|
|
42
|
-
"@vaadin/vaadin-
|
|
43
|
-
"@vaadin/vaadin-themable-mixin": "25.0.0-alpha2",
|
|
37
|
+
"@vaadin/a11y-base": "25.0.0-alpha20",
|
|
38
|
+
"@vaadin/button": "25.0.0-alpha20",
|
|
39
|
+
"@vaadin/component-base": "25.0.0-alpha20",
|
|
40
|
+
"@vaadin/progress-bar": "25.0.0-alpha20",
|
|
41
|
+
"@vaadin/vaadin-themable-mixin": "25.0.0-alpha20",
|
|
44
42
|
"lit": "^3.0.0"
|
|
45
43
|
},
|
|
46
44
|
"devDependencies": {
|
|
47
|
-
"@vaadin/chai-plugins": "25.0.0-
|
|
48
|
-
"@vaadin/test-runner-commands": "25.0.0-
|
|
45
|
+
"@vaadin/chai-plugins": "25.0.0-alpha20",
|
|
46
|
+
"@vaadin/test-runner-commands": "25.0.0-alpha20",
|
|
49
47
|
"@vaadin/testing-helpers": "^2.0.0",
|
|
50
|
-
"
|
|
48
|
+
"@vaadin/vaadin-lumo-styles": "25.0.0-alpha20",
|
|
49
|
+
"sinon": "^21.0.0"
|
|
51
50
|
},
|
|
52
51
|
"web-types": [
|
|
53
52
|
"web-types.json",
|
|
54
53
|
"web-types.lit.json"
|
|
55
54
|
],
|
|
56
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "c948aae591a30b432f3784000d4677674cae56e0"
|
|
57
56
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import '@vaadin/component-base/src/styles/style-props.js';
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
|
|
9
|
+
export const uploadStyles = css`
|
|
10
|
+
:host {
|
|
11
|
+
background: var(--vaadin-upload-background, transparent);
|
|
12
|
+
border: var(
|
|
13
|
+
--vaadin-upload-border,
|
|
14
|
+
var(--vaadin-upload-border-width, 1px) solid
|
|
15
|
+
var(--vaadin-upload-border-color, var(--vaadin-border-color-secondary))
|
|
16
|
+
);
|
|
17
|
+
border-radius: var(--vaadin-upload-border-radius, var(--vaadin-radius-m));
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
padding: var(--vaadin-upload-padding, var(--vaadin-padding-s));
|
|
22
|
+
position: relative;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:host([dragover-valid]) {
|
|
26
|
+
--vaadin-upload-background: var(--vaadin-background-container);
|
|
27
|
+
--vaadin-upload-border: 1px dashed var(--vaadin-text-color);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:host([hidden]) {
|
|
31
|
+
display: none !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[hidden] {
|
|
35
|
+
display: none !important;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
[part='primary-buttons'] {
|
|
39
|
+
align-items: center;
|
|
40
|
+
display: flex;
|
|
41
|
+
gap: var(--vaadin-gap-s);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
[part='drop-label'] {
|
|
45
|
+
align-items: center;
|
|
46
|
+
color: var(--vaadin-upload-drop-label-color, var(--vaadin-text-color));
|
|
47
|
+
display: flex;
|
|
48
|
+
font-size: var(--vaadin-upload-drop-label-font-size, inherit);
|
|
49
|
+
font-weight: var(--vaadin-upload-drop-label-font-weight, inherit);
|
|
50
|
+
gap: var(--vaadin-upload-drop-label-gap, var(--vaadin-gap-s));
|
|
51
|
+
line-height: var(--vaadin-upload-drop-label-line-height, inherit);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host([nodrop]) {
|
|
55
|
+
--vaadin-upload-border: none;
|
|
56
|
+
--vaadin-upload-border-radius: 0;
|
|
57
|
+
--vaadin-upload-padding: 0;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import '@vaadin/component-base/src/styles/style-props.js';
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
|
|
9
|
+
export const uploadFileStyles = css`
|
|
10
|
+
:host {
|
|
11
|
+
align-items: center;
|
|
12
|
+
display: grid;
|
|
13
|
+
gap: var(--vaadin-upload-file-gap, var(--vaadin-gap-s));
|
|
14
|
+
grid-template-columns: var(--vaadin-icon-size, 1lh) minmax(0, 1fr) auto;
|
|
15
|
+
padding: var(--vaadin-upload-file-padding, var(--vaadin-padding-s));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:host(:focus-visible) {
|
|
19
|
+
outline: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
|
|
20
|
+
outline-offset: calc(var(--vaadin-focus-ring-width) * -1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
[hidden] {
|
|
24
|
+
display: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[part='done-icon']:not([hidden]),
|
|
28
|
+
[part='warning-icon']:not([hidden]) {
|
|
29
|
+
display: flex;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[part='done-icon']::before,
|
|
33
|
+
[part='warning-icon']::before {
|
|
34
|
+
content: '';
|
|
35
|
+
display: inline-block;
|
|
36
|
+
flex: none;
|
|
37
|
+
height: var(--vaadin-icon-size, 1lh);
|
|
38
|
+
width: var(--vaadin-icon-size, 1lh);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[part='done-icon']::before {
|
|
42
|
+
background: var(--vaadin-upload-file-done-color, currentColor);
|
|
43
|
+
mask-image: var(--_vaadin-icon-checkmark);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
[part='warning-icon']::before {
|
|
47
|
+
background: var(--vaadin-upload-file-warning-color, currentColor);
|
|
48
|
+
mask-image: var(--_vaadin-icon-warn);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
[part='meta'] {
|
|
52
|
+
grid-column: 2;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[part='name'] {
|
|
56
|
+
color: var(--vaadin-upload-file-name-color, var(--vaadin-text-color));
|
|
57
|
+
font-size: var(--vaadin-upload-file-name-font-size, inherit);
|
|
58
|
+
font-weight: var(--vaadin-upload-file-name-font-weight, inherit);
|
|
59
|
+
line-height: var(--vaadin-upload-file-name-line-height, inherit);
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
text-overflow: ellipsis;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
[part='status'] {
|
|
65
|
+
color: var(--vaadin-upload-file-status-color, var(--vaadin-text-color-secondary));
|
|
66
|
+
font-size: var(--vaadin-upload-file-status-font-size, inherit);
|
|
67
|
+
font-weight: var(--vaadin-upload-file-status-font-weight, inherit);
|
|
68
|
+
line-height: var(--vaadin-upload-file-status-line-height, inherit);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
[part='error'] {
|
|
72
|
+
color: var(--vaadin-upload-file-error-color, var(--vaadin-text-color));
|
|
73
|
+
font-size: var(--vaadin-upload-file-error-font-size, inherit);
|
|
74
|
+
font-weight: var(--vaadin-upload-file-error-font-weight, inherit);
|
|
75
|
+
line-height: var(--vaadin-upload-file-error-line-height, inherit);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
button {
|
|
79
|
+
background: var(--vaadin-upload-file-button-background, transparent);
|
|
80
|
+
border: var(
|
|
81
|
+
--vaadin-upload-file-button-border,
|
|
82
|
+
var(--vaadin-upload-file-button-border-width, 1px) solid
|
|
83
|
+
var(--vaadin-upload-file-button-border-color, transparent)
|
|
84
|
+
);
|
|
85
|
+
border-radius: var(--vaadin-upload-file-button-border-radius, var(--vaadin-radius-m));
|
|
86
|
+
color: var(--vaadin-upload-file-button-text-color, var(--vaadin-text-color));
|
|
87
|
+
cursor: var(--vaadin-clickable-cursor);
|
|
88
|
+
flex-shrink: 0;
|
|
89
|
+
font-family: var(--vaadin-upload-file-button-font-family, inherit);
|
|
90
|
+
font-size: var(--vaadin-upload-file-button-font-size, inherit);
|
|
91
|
+
font-weight: var(--vaadin-upload-file-button-font-weight, 500);
|
|
92
|
+
height: var(--vaadin-upload-file-button-height, auto);
|
|
93
|
+
line-height: var(--vaadin-upload-file-button-line-height, inherit);
|
|
94
|
+
padding: var(--vaadin-upload-file-button-padding, var(--vaadin-padding-container));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
button:focus-visible {
|
|
98
|
+
outline: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[part='start-button']::before,
|
|
102
|
+
[part='retry-button']::before,
|
|
103
|
+
[part='remove-button']::before {
|
|
104
|
+
background: currentColor;
|
|
105
|
+
content: '';
|
|
106
|
+
display: block;
|
|
107
|
+
height: var(--vaadin-icon-size, 1lh);
|
|
108
|
+
width: var(--vaadin-icon-size, 1lh);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
[part='start-button']::before {
|
|
112
|
+
mask-image: var(--_vaadin-icon-play);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
[part='retry-button']::before {
|
|
116
|
+
mask-image: var(--_vaadin-icon-refresh);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[part='remove-button']::before {
|
|
120
|
+
mask-image: var(--_vaadin-icon-cross);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
::slotted([slot='progress']) {
|
|
124
|
+
grid-column: 2 / -1;
|
|
125
|
+
width: auto;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
:host([complete]) ::slotted([slot='progress']),
|
|
129
|
+
:host([error]) ::slotted([slot='progress']) {
|
|
130
|
+
display: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@media (forced-colors: active) {
|
|
134
|
+
:is([part$='icon'], [part$='button'])::before {
|
|
135
|
+
background: CanvasText;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
`;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import '@vaadin/component-base/src/styles/style-props.js';
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
|
|
9
|
+
export const uploadFileListStyles = css`
|
|
10
|
+
:host {
|
|
11
|
+
display: block;
|
|
12
|
+
overflow: auto;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:host([hidden]) {
|
|
16
|
+
display: none !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[part='list'] {
|
|
20
|
+
list-style-type: none;
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
::slotted(:first-child) {
|
|
26
|
+
margin-top: var(--vaadin-upload-gap, var(--vaadin-gap-s));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
::slotted(li:not(:last-of-type)) {
|
|
30
|
+
border-bottom: var(
|
|
31
|
+
--vaadin-upload-file-list-border,
|
|
32
|
+
var(--vaadin-upload-file-list-border-width, 1px) solid
|
|
33
|
+
var(--vaadin-upload-file-list-border-color, var(--vaadin-border-color-secondary))
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import '@vaadin/component-base/src/styles/style-props.js';
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
|
|
9
|
+
export const uploadIconStyles = css`
|
|
10
|
+
:host {
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:host::before {
|
|
15
|
+
background: var(--vaadin-upload-icon-color, currentColor);
|
|
16
|
+
content: '';
|
|
17
|
+
display: inline-block;
|
|
18
|
+
flex: none;
|
|
19
|
+
height: var(--vaadin-icon-size, 1lh);
|
|
20
|
+
mask-image: var(--_vaadin-icon-upload);
|
|
21
|
+
width: var(--vaadin-icon-size, 1lh);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:host([hidden]) {
|
|
25
|
+
display: none !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@media (forced-colors: active) {
|
|
29
|
+
:host::before {
|
|
30
|
+
background: CanvasText;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
`;
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import './vaadin-upload-file.js';
|
|
7
|
-
import {
|
|
7
|
+
import { html, LitElement } from 'lit';
|
|
8
8
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
9
9
|
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
10
10
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
11
|
+
import { uploadFileListStyles } from './styles/vaadin-upload-file-list-base-styles.js';
|
|
11
12
|
import { UploadFileListMixin } from './vaadin-upload-file-list-mixin.js';
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -25,21 +26,7 @@ class UploadFileList extends UploadFileListMixin(ThemableMixin(PolylitMixin(LitE
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
static get styles() {
|
|
28
|
-
return
|
|
29
|
-
:host {
|
|
30
|
-
display: block;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
:host([hidden]) {
|
|
34
|
-
display: none !important;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
[part='list'] {
|
|
38
|
-
padding: 0;
|
|
39
|
-
margin: 0;
|
|
40
|
-
list-style-type: none;
|
|
41
|
-
}
|
|
42
|
-
`;
|
|
29
|
+
return uploadFileListStyles;
|
|
43
30
|
}
|
|
44
31
|
|
|
45
32
|
/** @protected */
|
|
@@ -42,8 +42,6 @@ export interface UploadFileEventMap extends HTMLElementEventMap, UploadFileCusto
|
|
|
42
42
|
*
|
|
43
43
|
* Part name | Description
|
|
44
44
|
* -----------------|-------------
|
|
45
|
-
* `row` | File container
|
|
46
|
-
* `info` | Container for file status icon, file name, status and error messages
|
|
47
45
|
* `done-icon` | File done status icon
|
|
48
46
|
* `warning-icon` | File warning status icon
|
|
49
47
|
* `meta` | Container for file name, status and error messages
|
|
@@ -8,9 +8,10 @@ import './vaadin-upload-icons.js';
|
|
|
8
8
|
import { html, LitElement, nothing } from 'lit';
|
|
9
9
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
10
10
|
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
11
|
+
import { LumoInjectionMixin } from '@vaadin/vaadin-themable-mixin/lumo-injection-mixin.js';
|
|
11
12
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
13
|
+
import { uploadFileStyles } from './styles/vaadin-upload-file-base-styles.js';
|
|
12
14
|
import { UploadFileMixin } from './vaadin-upload-file-mixin.js';
|
|
13
|
-
import { uploadFileStyles } from './vaadin-upload-file-styles.js';
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* `<vaadin-upload-file>` element represents a file in the file list of `<vaadin-upload>`.
|
|
@@ -21,8 +22,6 @@ import { uploadFileStyles } from './vaadin-upload-file-styles.js';
|
|
|
21
22
|
*
|
|
22
23
|
* Part name | Description
|
|
23
24
|
* -----------------|-------------
|
|
24
|
-
* `row` | File container
|
|
25
|
-
* `info` | Container for file status icon, file name, status and error messages
|
|
26
25
|
* `done-icon` | File done status icon
|
|
27
26
|
* `warning-icon` | File warning status icon
|
|
28
27
|
* `meta` | Container for file name, status and error messages
|
|
@@ -53,7 +52,7 @@ import { uploadFileStyles } from './vaadin-upload-file-styles.js';
|
|
|
53
52
|
* @mixes UploadFileMixin
|
|
54
53
|
* @mixes ThemableMixin
|
|
55
54
|
*/
|
|
56
|
-
class UploadFile extends UploadFileMixin(ThemableMixin(PolylitMixin(LitElement))) {
|
|
55
|
+
class UploadFile extends UploadFileMixin(ThemableMixin(PolylitMixin(LumoInjectionMixin(LitElement)))) {
|
|
57
56
|
static get is() {
|
|
58
57
|
return 'vaadin-upload-file';
|
|
59
58
|
}
|
|
@@ -62,51 +61,54 @@ class UploadFile extends UploadFileMixin(ThemableMixin(PolylitMixin(LitElement))
|
|
|
62
61
|
return uploadFileStyles;
|
|
63
62
|
}
|
|
64
63
|
|
|
64
|
+
static get lumoInjector() {
|
|
65
|
+
return {
|
|
66
|
+
includeBaseStyles: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
65
70
|
/** @protected */
|
|
66
71
|
render() {
|
|
67
72
|
return html`
|
|
68
|
-
<div part="
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
<div part="done-icon" ?hidden="${!this.complete}" aria-hidden="true"></div>
|
|
74
|
+
<div part="warning-icon" ?hidden="${!this.errorMessage}" aria-hidden="true"></div>
|
|
75
|
+
|
|
76
|
+
<div part="meta">
|
|
77
|
+
<div part="name" id="name">${this.fileName}</div>
|
|
78
|
+
<div part="status" ?hidden="${!this.status}" id="status">${this.status}</div>
|
|
79
|
+
<div part="error" id="error" ?hidden="${!this.errorMessage}">${this.errorMessage}</div>
|
|
80
|
+
</div>
|
|
72
81
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
file-event="file-abort"
|
|
104
|
-
@click="${this._fireFileEvent}"
|
|
105
|
-
?disabled="${this.disabled}"
|
|
106
|
-
aria-label="${this.i18n ? this.i18n.file.remove : nothing}"
|
|
107
|
-
aria-describedby="name"
|
|
108
|
-
></button>
|
|
109
|
-
</div>
|
|
82
|
+
<div part="commands">
|
|
83
|
+
<button
|
|
84
|
+
type="button"
|
|
85
|
+
part="start-button"
|
|
86
|
+
file-event="file-start"
|
|
87
|
+
@click="${this._fireFileEvent}"
|
|
88
|
+
?hidden="${!this.held}"
|
|
89
|
+
?disabled="${this.disabled}"
|
|
90
|
+
aria-label="${this.i18n ? this.i18n.file.start : nothing}"
|
|
91
|
+
aria-describedby="name"
|
|
92
|
+
></button>
|
|
93
|
+
<button
|
|
94
|
+
type="button"
|
|
95
|
+
part="retry-button"
|
|
96
|
+
file-event="file-retry"
|
|
97
|
+
@click="${this._fireFileEvent}"
|
|
98
|
+
?hidden="${!this.errorMessage}"
|
|
99
|
+
?disabled="${this.disabled}"
|
|
100
|
+
aria-label="${this.i18n ? this.i18n.file.retry : nothing}"
|
|
101
|
+
aria-describedby="name"
|
|
102
|
+
></button>
|
|
103
|
+
<button
|
|
104
|
+
type="button"
|
|
105
|
+
part="remove-button"
|
|
106
|
+
file-event="file-abort"
|
|
107
|
+
@click="${this._fireFileEvent}"
|
|
108
|
+
?disabled="${this.disabled}"
|
|
109
|
+
aria-label="${this.i18n ? this.i18n.file.remove : nothing}"
|
|
110
|
+
aria-describedby="name"
|
|
111
|
+
></button>
|
|
110
112
|
</div>
|
|
111
113
|
|
|
112
114
|
<slot name="progress"></slot>
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { html, LitElement } from 'lit';
|
|
7
7
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
8
|
+
import { LumoInjectionMixin } from '@vaadin/vaadin-themable-mixin/lumo-injection-mixin.js';
|
|
8
9
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
10
|
+
import { uploadIconStyles } from './styles/vaadin-upload-icon-base-styles.js';
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* An element used internally by `<vaadin-upload>`. Not intended to be used separately.
|
|
@@ -14,21 +16,19 @@ import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mix
|
|
|
14
16
|
* @extends HTMLElement
|
|
15
17
|
* @private
|
|
16
18
|
*/
|
|
17
|
-
class UploadIcon extends ThemableMixin(LitElement) {
|
|
19
|
+
class UploadIcon extends ThemableMixin(LumoInjectionMixin(LitElement)) {
|
|
18
20
|
static get is() {
|
|
19
21
|
return 'vaadin-upload-icon';
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
static get styles() {
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
display: inline-block;
|
|
26
|
-
}
|
|
25
|
+
return uploadIconStyles;
|
|
26
|
+
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
static get lumoInjector() {
|
|
29
|
+
return {
|
|
30
|
+
includeBaseStyles: true,
|
|
31
|
+
};
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/** @protected */
|
|
@@ -101,7 +101,7 @@ export declare class UploadMixinClass {
|
|
|
101
101
|
/**
|
|
102
102
|
* Key-Value map to send to the server. If you set this property as an
|
|
103
103
|
* attribute, use a valid JSON string, for example:
|
|
104
|
-
* ```
|
|
104
|
+
* ```html
|
|
105
105
|
* <vaadin-upload headers='{"X-Foo": "Bar"}'></vaadin-upload>
|
|
106
106
|
* ```
|
|
107
107
|
*/
|
|
@@ -201,7 +201,7 @@ export declare class UploadMixinClass {
|
|
|
201
201
|
*
|
|
202
202
|
* The object has the following JSON structure and default values:
|
|
203
203
|
*
|
|
204
|
-
* ```
|
|
204
|
+
* ```js
|
|
205
205
|
* {
|
|
206
206
|
* dropFiles: {
|
|
207
207
|
* one: 'Drop file here',
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import { announce } from '@vaadin/a11y-base/src/announce.js';
|
|
7
|
+
import { isKeyboardActive } from '@vaadin/a11y-base/src/focus-utils.js';
|
|
7
8
|
import { isTouch } from '@vaadin/component-base/src/browser-utils.js';
|
|
8
9
|
import { I18nMixin } from '@vaadin/component-base/src/i18n-mixin.js';
|
|
9
10
|
import { SlotController } from '@vaadin/component-base/src/slot-controller.js';
|
|
@@ -157,7 +158,7 @@ export const UploadMixin = (superClass) =>
|
|
|
157
158
|
/**
|
|
158
159
|
* Key-Value map to send to the server. If you set this property as an
|
|
159
160
|
* attribute, use a valid JSON string, for example:
|
|
160
|
-
* ```
|
|
161
|
+
* ```html
|
|
161
162
|
* <vaadin-upload headers='{"X-Foo": "Bar"}'></vaadin-upload>
|
|
162
163
|
* ```
|
|
163
164
|
* @type {object | string}
|
|
@@ -352,7 +353,7 @@ export const UploadMixin = (superClass) =>
|
|
|
352
353
|
*
|
|
353
354
|
* The object has the following JSON structure and default values:
|
|
354
355
|
*
|
|
355
|
-
* ```
|
|
356
|
+
* ```js
|
|
356
357
|
* {
|
|
357
358
|
* dropFiles: {
|
|
358
359
|
* one: 'Drop file here',
|
|
@@ -894,14 +895,14 @@ export const UploadMixin = (superClass) =>
|
|
|
894
895
|
/** @private */
|
|
895
896
|
_updateFocus(fileIndex) {
|
|
896
897
|
if (this.files.length === 0) {
|
|
897
|
-
this._addButton.focus();
|
|
898
|
+
this._addButton.focus({ focusVisible: isKeyboardActive() });
|
|
898
899
|
return;
|
|
899
900
|
}
|
|
900
901
|
const lastFileRemoved = fileIndex === this.files.length;
|
|
901
902
|
if (lastFileRemoved) {
|
|
902
903
|
fileIndex -= 1;
|
|
903
904
|
}
|
|
904
|
-
this._fileList.children[fileIndex].firstElementChild.focus();
|
|
905
|
+
this._fileList.children[fileIndex].firstElementChild.focus({ focusVisible: isKeyboardActive() });
|
|
905
906
|
}
|
|
906
907
|
|
|
907
908
|
/**
|
package/src/vaadin-upload.d.ts
CHANGED
|
@@ -118,7 +118,7 @@ export interface UploadEventMap extends HTMLElementEventMap, UploadCustomEventMa
|
|
|
118
118
|
*
|
|
119
119
|
* Example:
|
|
120
120
|
*
|
|
121
|
-
* ```
|
|
121
|
+
* ```html
|
|
122
122
|
* <vaadin-upload></vaadin-upload>
|
|
123
123
|
* ```
|
|
124
124
|
*
|
|
@@ -133,13 +133,13 @@ export interface UploadEventMap extends HTMLElementEventMap, UploadCustomEventMa
|
|
|
133
133
|
*
|
|
134
134
|
* The following state attributes are available for styling:
|
|
135
135
|
*
|
|
136
|
-
* Attribute
|
|
137
|
-
*
|
|
138
|
-
* `disabled`
|
|
139
|
-
* `nodrop`
|
|
140
|
-
* `dragover`
|
|
141
|
-
* `dragover-valid`
|
|
142
|
-
* `max-files-reached`
|
|
136
|
+
* Attribute | Description
|
|
137
|
+
* ---------------------|---------------------------------
|
|
138
|
+
* `disabled` | Set when the element is disabled
|
|
139
|
+
* `nodrop` | Set when drag and drop is disabled (e.g., on touch devices)
|
|
140
|
+
* `dragover` | Set when the file is being dragged over the element
|
|
141
|
+
* `dragover-valid` | Set when the dragged file is valid with `maxFiles` and `accept` criteria
|
|
142
|
+
* `max-files-reached` | Set when maximum number of files that the user is allowed to add has been reached
|
|
143
143
|
*
|
|
144
144
|
* See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.
|
|
145
145
|
*
|
package/src/vaadin-upload.js
CHANGED
|
@@ -7,12 +7,14 @@ import '@vaadin/button/src/vaadin-button.js';
|
|
|
7
7
|
import './vaadin-upload-icon.js';
|
|
8
8
|
import './vaadin-upload-icons.js';
|
|
9
9
|
import './vaadin-upload-file-list.js';
|
|
10
|
-
import {
|
|
10
|
+
import { html, LitElement } from 'lit';
|
|
11
11
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
12
12
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
13
13
|
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
14
14
|
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
|
|
15
|
+
import { LumoInjectionMixin } from '@vaadin/vaadin-themable-mixin/lumo-injection-mixin.js';
|
|
15
16
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
17
|
+
import { uploadStyles } from './styles/vaadin-upload-base-styles.js';
|
|
16
18
|
import { UploadMixin } from './vaadin-upload-mixin.js';
|
|
17
19
|
|
|
18
20
|
/**
|
|
@@ -20,7 +22,7 @@ import { UploadMixin } from './vaadin-upload-mixin.js';
|
|
|
20
22
|
*
|
|
21
23
|
* Example:
|
|
22
24
|
*
|
|
23
|
-
* ```
|
|
25
|
+
* ```html
|
|
24
26
|
* <vaadin-upload></vaadin-upload>
|
|
25
27
|
* ```
|
|
26
28
|
*
|
|
@@ -35,13 +37,13 @@ import { UploadMixin } from './vaadin-upload-mixin.js';
|
|
|
35
37
|
*
|
|
36
38
|
* The following state attributes are available for styling:
|
|
37
39
|
*
|
|
38
|
-
* Attribute
|
|
39
|
-
*
|
|
40
|
-
* `disabled`
|
|
41
|
-
* `nodrop`
|
|
42
|
-
* `dragover`
|
|
43
|
-
* `dragover-valid`
|
|
44
|
-
* `max-files-reached`
|
|
40
|
+
* Attribute | Description
|
|
41
|
+
* ---------------------|---------------------------------
|
|
42
|
+
* `disabled` | Set when the element is disabled
|
|
43
|
+
* `nodrop` | Set when drag and drop is disabled (e.g., on touch devices)
|
|
44
|
+
* `dragover` | Set when the file is being dragged over the element
|
|
45
|
+
* `dragover-valid` | Set when the dragged file is valid with `maxFiles` and `accept` criteria
|
|
46
|
+
* `max-files-reached` | Set when maximum number of files that the user is allowed to add has been reached
|
|
45
47
|
*
|
|
46
48
|
* See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.
|
|
47
49
|
*
|
|
@@ -64,27 +66,13 @@ import { UploadMixin } from './vaadin-upload-mixin.js';
|
|
|
64
66
|
* @mixes ElementMixin
|
|
65
67
|
* @mixes UploadMixin
|
|
66
68
|
*/
|
|
67
|
-
class Upload extends UploadMixin(ElementMixin(ThemableMixin(PolylitMixin(LitElement)))) {
|
|
69
|
+
class Upload extends UploadMixin(ElementMixin(ThemableMixin(PolylitMixin(LumoInjectionMixin(LitElement))))) {
|
|
68
70
|
static get is() {
|
|
69
71
|
return 'vaadin-upload';
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
static get styles() {
|
|
73
|
-
return
|
|
74
|
-
:host {
|
|
75
|
-
display: block;
|
|
76
|
-
position: relative;
|
|
77
|
-
box-sizing: border-box;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
:host([hidden]) {
|
|
81
|
-
display: none !important;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
[hidden] {
|
|
85
|
-
display: none !important;
|
|
86
|
-
}
|
|
87
|
-
`;
|
|
75
|
+
return uploadStyles;
|
|
88
76
|
}
|
|
89
77
|
|
|
90
78
|
/** @protected */
|
package/vaadin-upload.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import './
|
|
1
|
+
import './src/vaadin-upload.js';
|
|
2
2
|
export * from './src/vaadin-upload.js';
|
package/web-types.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/upload",
|
|
4
|
-
"version": "25.0.0-
|
|
4
|
+
"version": "25.0.0-alpha20",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
8
8
|
"elements": [
|
|
9
9
|
{
|
|
10
10
|
"name": "vaadin-upload-file",
|
|
11
|
-
"description": "`<vaadin-upload-file>` element represents a file in the file list of `<vaadin-upload>`.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-----------------|-------------\n`
|
|
11
|
+
"description": "`<vaadin-upload-file>` element represents a file in the file list of `<vaadin-upload>`.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-----------------|-------------\n`done-icon` | File done status icon\n`warning-icon` | File warning status icon\n`meta` | Container for file name, status and error messages\n`name` | File name\n`error` | Error message, shown when error happens\n`status` | Status message\n`commands` | Container for file command buttons\n`start-button` | Start file upload button\n`retry-button` | Retry file upload button\n`remove-button` | Remove file button\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|-------------\n`disabled` | Set when the element is disabled\n`focus-ring` | Set when the element is focused using the keyboard.\n`focused` | Set when the element is focused.\n`error` | An error has happened during uploading.\n`indeterminate` | Uploading is in progress, but the progress value is unknown.\n`uploading` | Uploading is in progress.\n`complete` | Uploading has finished successfully.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
12
12
|
"attributes": [
|
|
13
13
|
{
|
|
14
14
|
"name": "disabled",
|
|
@@ -263,7 +263,7 @@
|
|
|
263
263
|
},
|
|
264
264
|
{
|
|
265
265
|
"name": "vaadin-upload",
|
|
266
|
-
"description": "`<vaadin-upload>` is a Web Component for uploading multiple files with drag and drop support.\n\nExample:\n\n
|
|
266
|
+
"description": "`<vaadin-upload>` is a Web Component for uploading multiple files with drag and drop support.\n\nExample:\n\n```html\n<vaadin-upload></vaadin-upload>\n```\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-------------------|-------------------------------------\n`primary-buttons` | Upload container\n`drop-label` | Element wrapping drop label and icon\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n---------------------|---------------------------------\n`disabled` | Set when the element is disabled\n`nodrop` | Set when drag and drop is disabled (e.g., on touch devices)\n`dragover` | Set when the file is being dragged over the element\n`dragover-valid` | Set when the dragged file is valid with `maxFiles` and `accept` criteria\n`max-files-reached` | Set when maximum number of files that the user is allowed to add has been reached\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
267
267
|
"attributes": [
|
|
268
268
|
{
|
|
269
269
|
"name": "disabled",
|
|
@@ -391,7 +391,7 @@
|
|
|
391
391
|
"properties": [
|
|
392
392
|
{
|
|
393
393
|
"name": "i18n",
|
|
394
|
-
"description": "The object used to localize this component. To change the default\nlocalization, replace this with an object that provides all properties, or\njust the individual properties you want to change.\n\nThe object has the following JSON structure and default values:\n\n
|
|
394
|
+
"description": "The object used to localize this component. To change the default\nlocalization, replace this with an object that provides all properties, or\njust the individual properties you want to change.\n\nThe object has the following JSON structure and default values:\n\n```js\n{\n dropFiles: {\n one: 'Drop file here',\n many: 'Drop files here'\n },\n addFiles: {\n one: 'Upload File...',\n many: 'Upload Files...'\n },\n error: {\n tooManyFiles: 'Too Many Files.',\n fileIsTooBig: 'File is Too Big.',\n incorrectFileType: 'Incorrect File Type.'\n },\n uploading: {\n status: {\n connecting: 'Connecting...',\n stalled: 'Stalled',\n processing: 'Processing File...',\n held: 'Queued'\n },\n remainingTime: {\n prefix: 'remaining time: ',\n unknown: 'unknown remaining time'\n },\n error: {\n serverUnavailable: 'Upload failed, please try again later',\n unexpectedServerError: 'Upload failed due to server error',\n forbidden: 'Upload forbidden'\n }\n },\n file: {\n retry: 'Retry',\n start: 'Start',\n remove: 'Remove'\n },\n units: {\n size: ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n sizeBase: 1000\n },\n formatSize: function(bytes) {\n // returns the size followed by the best suitable unit\n },\n formatTime: function(seconds, [secs, mins, hours]) {\n // returns a 'HH:MM:SS' string\n }\n}\n```",
|
|
395
395
|
"value": {
|
|
396
396
|
"type": [
|
|
397
397
|
"UploadI18n"
|
|
@@ -436,7 +436,7 @@
|
|
|
436
436
|
},
|
|
437
437
|
{
|
|
438
438
|
"name": "headers",
|
|
439
|
-
"description": "Key-Value map to send to the server. If you set this property as an\nattribute, use a valid JSON string, for example:\n
|
|
439
|
+
"description": "Key-Value map to send to the server. If you set this property as an\nattribute, use a valid JSON string, for example:\n```html\n<vaadin-upload headers='{\"X-Foo\": \"Bar\"}'></vaadin-upload>\n```",
|
|
440
440
|
"value": {
|
|
441
441
|
"type": [
|
|
442
442
|
"object",
|
package/web-types.lit.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/upload",
|
|
4
|
-
"version": "25.0.0-
|
|
4
|
+
"version": "25.0.0-alpha20",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"framework": "lit",
|
|
7
7
|
"framework-config": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"elements": [
|
|
17
17
|
{
|
|
18
18
|
"name": "vaadin-upload-file",
|
|
19
|
-
"description": "`<vaadin-upload-file>` element represents a file in the file list of `<vaadin-upload>`.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-----------------|-------------\n`
|
|
19
|
+
"description": "`<vaadin-upload-file>` element represents a file in the file list of `<vaadin-upload>`.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-----------------|-------------\n`done-icon` | File done status icon\n`warning-icon` | File warning status icon\n`meta` | Container for file name, status and error messages\n`name` | File name\n`error` | Error message, shown when error happens\n`status` | Status message\n`commands` | Container for file command buttons\n`start-button` | Start file upload button\n`retry-button` | Retry file upload button\n`remove-button` | Remove file button\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|-------------\n`disabled` | Set when the element is disabled\n`focus-ring` | Set when the element is focused using the keyboard.\n`focused` | Set when the element is focused.\n`error` | An error has happened during uploading.\n`indeterminate` | Uploading is in progress, but the progress value is unknown.\n`uploading` | Uploading is in progress.\n`complete` | Uploading has finished successfully.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
20
20
|
"extension": true,
|
|
21
21
|
"attributes": [
|
|
22
22
|
{
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
"name": "vaadin-upload",
|
|
124
|
-
"description": "`<vaadin-upload>` is a Web Component for uploading multiple files with drag and drop support.\n\nExample:\n\n
|
|
124
|
+
"description": "`<vaadin-upload>` is a Web Component for uploading multiple files with drag and drop support.\n\nExample:\n\n```html\n<vaadin-upload></vaadin-upload>\n```\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n-------------------|-------------------------------------\n`primary-buttons` | Upload container\n`drop-label` | Element wrapping drop label and icon\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n---------------------|---------------------------------\n`disabled` | Set when the element is disabled\n`nodrop` | Set when drag and drop is disabled (e.g., on touch devices)\n`dragover` | Set when the file is being dragged over the element\n`dragover-valid` | Set when the dragged file is valid with `maxFiles` and `accept` criteria\n`max-files-reached` | Set when maximum number of files that the user is allowed to add has been reached\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
125
125
|
"extension": true,
|
|
126
126
|
"attributes": [
|
|
127
127
|
{
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
"name": ".i18n",
|
|
157
|
-
"description": "The object used to localize this component. To change the default\nlocalization, replace this with an object that provides all properties, or\njust the individual properties you want to change.\n\nThe object has the following JSON structure and default values:\n\n
|
|
157
|
+
"description": "The object used to localize this component. To change the default\nlocalization, replace this with an object that provides all properties, or\njust the individual properties you want to change.\n\nThe object has the following JSON structure and default values:\n\n```js\n{\n dropFiles: {\n one: 'Drop file here',\n many: 'Drop files here'\n },\n addFiles: {\n one: 'Upload File...',\n many: 'Upload Files...'\n },\n error: {\n tooManyFiles: 'Too Many Files.',\n fileIsTooBig: 'File is Too Big.',\n incorrectFileType: 'Incorrect File Type.'\n },\n uploading: {\n status: {\n connecting: 'Connecting...',\n stalled: 'Stalled',\n processing: 'Processing File...',\n held: 'Queued'\n },\n remainingTime: {\n prefix: 'remaining time: ',\n unknown: 'unknown remaining time'\n },\n error: {\n serverUnavailable: 'Upload failed, please try again later',\n unexpectedServerError: 'Upload failed due to server error',\n forbidden: 'Upload forbidden'\n }\n },\n file: {\n retry: 'Retry',\n start: 'Start',\n remove: 'Remove'\n },\n units: {\n size: ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n sizeBase: 1000\n },\n formatSize: function(bytes) {\n // returns the size followed by the best suitable unit\n },\n formatTime: function(seconds, [secs, mins, hours]) {\n // returns a 'HH:MM:SS' string\n }\n}\n```",
|
|
158
158
|
"value": {
|
|
159
159
|
"kind": "expression"
|
|
160
160
|
}
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
"name": ".headers",
|
|
178
|
-
"description": "Key-Value map to send to the server. If you set this property as an\nattribute, use a valid JSON string, for example:\n
|
|
178
|
+
"description": "Key-Value map to send to the server. If you set this property as an\nattribute, use a valid JSON string, for example:\n```html\n<vaadin-upload headers='{\"X-Foo\": \"Bar\"}'></vaadin-upload>\n```",
|
|
179
179
|
"value": {
|
|
180
180
|
"kind": "expression"
|
|
181
181
|
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright (c) 2016 - 2025 Vaadin Ltd.
|
|
4
|
-
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
-
*/
|
|
6
|
-
import { css } from 'lit';
|
|
7
|
-
|
|
8
|
-
export const uploadFileStyles = css`
|
|
9
|
-
:host {
|
|
10
|
-
display: block;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
[hidden] {
|
|
14
|
-
display: none;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
[part='row'] {
|
|
18
|
-
list-style-type: none;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
button {
|
|
22
|
-
background: transparent;
|
|
23
|
-
padding: 0;
|
|
24
|
-
border: none;
|
|
25
|
-
box-shadow: none;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
:host([complete]) ::slotted([slot='progress']),
|
|
29
|
-
:host([error]) ::slotted([slot='progress']) {
|
|
30
|
-
display: none !important;
|
|
31
|
-
}
|
|
32
|
-
`;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import '@vaadin/vaadin-lumo-styles/font-icons.js';
|
|
2
|
-
import '@vaadin/vaadin-lumo-styles/color.js';
|
|
3
|
-
import '@vaadin/vaadin-lumo-styles/sizing.js';
|
|
4
|
-
import '@vaadin/vaadin-lumo-styles/spacing.js';
|
|
5
|
-
import '@vaadin/vaadin-lumo-styles/style.js';
|
|
6
|
-
import '@vaadin/vaadin-lumo-styles/typography.js';
|
|
7
|
-
import '@vaadin/button/theme/lumo/vaadin-button-styles.js';
|
|
8
|
-
import '@vaadin/progress-bar/theme/lumo/vaadin-progress-bar-styles.js';
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import '@vaadin/vaadin-lumo-styles/font-icons.js';
|
|
2
|
-
import '@vaadin/vaadin-lumo-styles/color.js';
|
|
3
|
-
import '@vaadin/vaadin-lumo-styles/sizing.js';
|
|
4
|
-
import '@vaadin/vaadin-lumo-styles/spacing.js';
|
|
5
|
-
import '@vaadin/vaadin-lumo-styles/style.js';
|
|
6
|
-
import '@vaadin/vaadin-lumo-styles/typography.js';
|
|
7
|
-
import '@vaadin/button/theme/lumo/vaadin-button-styles.js';
|
|
8
|
-
import '@vaadin/progress-bar/theme/lumo/vaadin-progress-bar-styles.js';
|
|
9
|
-
import { fieldButton } from '@vaadin/vaadin-lumo-styles/mixins/field-button.js';
|
|
10
|
-
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
11
|
-
|
|
12
|
-
registerStyles(
|
|
13
|
-
'vaadin-upload',
|
|
14
|
-
css`
|
|
15
|
-
:host {
|
|
16
|
-
line-height: var(--lumo-line-height-m);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
:host(:not([nodrop])) {
|
|
20
|
-
overflow: hidden;
|
|
21
|
-
border: 1px dashed var(--lumo-contrast-20pct);
|
|
22
|
-
border-radius: var(--lumo-border-radius-l);
|
|
23
|
-
padding: var(--lumo-space-m);
|
|
24
|
-
transition:
|
|
25
|
-
background-color 0.6s,
|
|
26
|
-
border-color 0.6s;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
[part='drop-label'] {
|
|
30
|
-
display: inline-block;
|
|
31
|
-
white-space: normal;
|
|
32
|
-
padding: 0 var(--lumo-space-s);
|
|
33
|
-
color: var(--lumo-secondary-text-color);
|
|
34
|
-
font-family: var(--lumo-font-family);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
:host([dragover-valid]) {
|
|
38
|
-
border-color: var(--lumo-primary-color-50pct);
|
|
39
|
-
background: var(--lumo-primary-color-10pct);
|
|
40
|
-
transition:
|
|
41
|
-
background-color 0.1s,
|
|
42
|
-
border-color 0.1s;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
:host([dragover-valid]) [part='drop-label'] {
|
|
46
|
-
color: var(--lumo-primary-text-color);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
:host([disabled]) [part='drop-label'],
|
|
50
|
-
:host([max-files-reached]) [part='drop-label'] {
|
|
51
|
-
color: var(--lumo-disabled-text-color);
|
|
52
|
-
}
|
|
53
|
-
`,
|
|
54
|
-
{ moduleId: 'lumo-upload' },
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
registerStyles(
|
|
58
|
-
'vaadin-upload-icon',
|
|
59
|
-
css`
|
|
60
|
-
:host::before {
|
|
61
|
-
content: var(--lumo-icons-upload);
|
|
62
|
-
font-family: lumo-icons;
|
|
63
|
-
font-size: var(--lumo-icon-size-m);
|
|
64
|
-
line-height: 1;
|
|
65
|
-
vertical-align: -0.25em;
|
|
66
|
-
}
|
|
67
|
-
`,
|
|
68
|
-
{ moduleId: 'lumo-upload-icon' },
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
registerStyles(
|
|
72
|
-
'vaadin-upload-file-list',
|
|
73
|
-
css`
|
|
74
|
-
::slotted(li:not(:first-of-type)) {
|
|
75
|
-
border-top: 1px solid var(--lumo-contrast-10pct);
|
|
76
|
-
}
|
|
77
|
-
`,
|
|
78
|
-
{ moduleId: 'lumo-upload-file-list' },
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
const uploadFile = css`
|
|
82
|
-
:host {
|
|
83
|
-
padding: var(--lumo-space-s) 0;
|
|
84
|
-
outline: none;
|
|
85
|
-
--_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));
|
|
86
|
-
--_focus-ring-width: var(--vaadin-focus-ring-width, 2px);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
:host([focus-ring]) [part='row'] {
|
|
90
|
-
border-radius: var(--lumo-border-radius-s);
|
|
91
|
-
box-shadow: 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
[part='row'] {
|
|
95
|
-
display: flex;
|
|
96
|
-
align-items: baseline;
|
|
97
|
-
justify-content: space-between;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
[part='status'],
|
|
101
|
-
[part='error'] {
|
|
102
|
-
color: var(--lumo-secondary-text-color);
|
|
103
|
-
font-size: var(--lumo-font-size-s);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
[part='info'] {
|
|
107
|
-
display: flex;
|
|
108
|
-
align-items: baseline;
|
|
109
|
-
flex: auto;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
[part='meta'] {
|
|
113
|
-
width: 0.001px;
|
|
114
|
-
flex: 1 1 auto;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
[part='name'] {
|
|
118
|
-
white-space: nowrap;
|
|
119
|
-
overflow: hidden;
|
|
120
|
-
text-overflow: ellipsis;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
[part='commands'] {
|
|
124
|
-
display: flex;
|
|
125
|
-
align-items: baseline;
|
|
126
|
-
flex: none;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
[part$='icon'] {
|
|
130
|
-
margin-right: var(--lumo-space-xs);
|
|
131
|
-
font-size: var(--lumo-icon-size-m);
|
|
132
|
-
font-family: 'lumo-icons';
|
|
133
|
-
line-height: 1;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/* When both icons are hidden, let us keep space for one */
|
|
137
|
-
[part='done-icon'][hidden] + [part='warning-icon'][hidden] {
|
|
138
|
-
display: block !important;
|
|
139
|
-
visibility: hidden;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
[part$='button'] {
|
|
143
|
-
flex: none;
|
|
144
|
-
margin-left: var(--lumo-space-xs);
|
|
145
|
-
cursor: var(--lumo-clickable-cursor);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
[part$='button']:focus {
|
|
149
|
-
outline: none;
|
|
150
|
-
border-radius: var(--lumo-border-radius-s);
|
|
151
|
-
box-shadow: 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
[part$='icon']::before,
|
|
155
|
-
[part$='button']::before {
|
|
156
|
-
vertical-align: -0.25em;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
[part='done-icon']::before {
|
|
160
|
-
content: var(--lumo-icons-checkmark);
|
|
161
|
-
color: var(--lumo-primary-text-color);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
[part='warning-icon']::before {
|
|
165
|
-
content: var(--lumo-icons-error);
|
|
166
|
-
color: var(--lumo-error-text-color);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
[part='start-button']::before {
|
|
170
|
-
content: var(--lumo-icons-play);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
[part='retry-button']::before {
|
|
174
|
-
content: var(--lumo-icons-reload);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
[part='remove-button']::before {
|
|
178
|
-
content: var(--lumo-icons-cross);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
[part='error'] {
|
|
182
|
-
color: var(--lumo-error-text-color);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
::slotted([slot='progress']) {
|
|
186
|
-
width: auto;
|
|
187
|
-
margin-left: calc(var(--lumo-icon-size-m) + var(--lumo-space-xs));
|
|
188
|
-
margin-right: calc(var(--lumo-icon-size-m) + var(--lumo-space-xs));
|
|
189
|
-
}
|
|
190
|
-
`;
|
|
191
|
-
|
|
192
|
-
registerStyles('vaadin-upload-file', [fieldButton, uploadFile], { moduleId: 'lumo-upload-file' });
|
|
File without changes
|