lightning-base-components 1.18.3-alpha → 1.18.4-alpha
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 +1 -1
- package/src/lightning/primitiveInputCheckbox/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputCheckbox/input-checkbox.slds.css +395 -0
- package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.css +3 -0
- package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.html +48 -0
- package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.js +139 -0
- package/src/lightning/primitiveInputCheckboxButton/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputCheckboxButton/input-checkbox-button.slds.css +126 -0
- package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.css +6 -0
- package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.html +24 -0
- package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.js +176 -0
- package/src/lightning/primitiveInputColor/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputColor/input-color.slds.css +35 -0
- package/src/lightning/primitiveInputColor/input-text.slds.css +398 -0
- package/src/lightning/primitiveInputColor/primitiveInputColor.css +4 -0
- package/src/lightning/primitiveInputColor/primitiveInputColor.html +50 -0
- package/src/lightning/primitiveInputColor/primitiveInputColor.js +184 -0
- package/src/lightning/primitiveInputFile/button.slds.css +527 -0
- package/src/lightning/primitiveInputFile/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputFile/input-file.slds.css +62 -0
- package/src/lightning/primitiveInputFile/primitiveInputFile.css +5 -0
- package/src/lightning/primitiveInputFile/primitiveInputFile.html +45 -0
- package/src/lightning/primitiveInputFile/primitiveInputFile.js +111 -0
- package/src/lightning/primitiveInputRadio/primitiveInputRadio.html +24 -0
- package/src/lightning/primitiveInputRadio/primitiveInputRadio.js +103 -0
- package/src/lightning/primitiveInputSimple/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputSimple/input-text.slds.css +398 -0
- package/src/lightning/primitiveInputSimple/normalize.js +6 -0
- package/src/lightning/primitiveInputSimple/primitiveInputSimple.css +9 -0
- package/src/lightning/primitiveInputSimple/primitiveInputSimple.html +65 -0
- package/src/lightning/primitiveInputSimple/primitiveInputSimple.js +585 -0
- package/src/lightning/primitiveInputSimple/selection.js +131 -0
- package/src/lightning/primitiveInputToggle/form-element.slds.css +281 -0
- package/src/lightning/primitiveInputToggle/input-toggle.slds.css +170 -0
- package/src/lightning/primitiveInputToggle/primitiveInputToggle.css +3 -0
- package/src/lightning/primitiveInputToggle/primitiveInputToggle.html +34 -0
- package/src/lightning/primitiveInputToggle/primitiveInputToggle.js +164 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
|
|
2
|
+
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
|
|
3
|
+
Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
|
|
4
|
+
@supports (--styling-hooks: '') {
|
|
5
|
+
/* TODO: Swap with utility classes */
|
|
6
|
+
:host([data-render-mode="shadow"]) fieldset {
|
|
7
|
+
border: 0;
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* FORM ELEMENT: BASE */
|
|
13
|
+
:host([data-render-mode="shadow"]) .slds-form-element {
|
|
14
|
+
position: relative;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:host([data-render-mode="shadow"]) .slds-form-element__label {
|
|
19
|
+
overflow-wrap: break-word;
|
|
20
|
+
word-wrap: break-word;
|
|
21
|
+
hyphens: auto;
|
|
22
|
+
display: inline-block;
|
|
23
|
+
color: var(--sds-g-color-neutral-base-30, #444444);
|
|
24
|
+
font-size: var(--sds-g-font-scale-neg-3, 0.75rem);
|
|
25
|
+
padding-inline-end: var(--sds-g-spacing-2, 0.5rem);
|
|
26
|
+
padding-block-start: var(--sds-g-spacing-1, 0.25rem);
|
|
27
|
+
margin-block-end: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:host([data-render-mode="shadow"]) .slds-form-element__label:empty {
|
|
31
|
+
margin: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:host([data-render-mode="shadow"]) .slds-form-element__control {
|
|
35
|
+
clear: left; /* NOTE: Ideally we want left to be inline-start but browser support is not ready for that value. We need to figure out better RTL support */
|
|
36
|
+
position: relative;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:host([data-render-mode="shadow"]) .slds-form-element__icon {
|
|
40
|
+
display: inline-block;
|
|
41
|
+
position: relative;
|
|
42
|
+
padding-block-start: var(--sds-g-spacing-1, 0.25rem);
|
|
43
|
+
vertical-align: top;
|
|
44
|
+
line-height: var(--sds-g-font-lineheight-1, 1);
|
|
45
|
+
z-index: 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:host([data-render-mode="shadow"]) .slds-form-element__icon .slds-button_icon {
|
|
49
|
+
position: relative;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host([data-render-mode="shadow"]) .slds-form-element__help,:host([data-render-mode="shadow"])
|
|
53
|
+
.slds-form-element__helper {
|
|
54
|
+
font-size: var(--sds-g-font-scale-neg-3, 0.75rem);
|
|
55
|
+
margin-block-start: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
56
|
+
display: block;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:host([data-render-mode="shadow"]) .slds-form-element_edit .slds-form-element__static {
|
|
60
|
+
width: calc(100% - var(--sds-g-sizing-7, 1.5rem));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:host([data-render-mode="shadow"]) .slds-form-element_readonly {
|
|
64
|
+
flex-basis: 0%;
|
|
65
|
+
border-bottom: var(--sds-g-sizing-border-1, 1px) solid var(--sds-g-color-neutral-base-90, #e5e5e5);
|
|
66
|
+
margin-block-end: 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
:host([data-render-mode="shadow"]) .slds-form-element_readonly .slds-form-element__control {
|
|
70
|
+
padding-block-start: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
71
|
+
padding-block-end: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:host([data-render-mode="shadow"]) .slds-form-element_readonly .slds-form-element__label {
|
|
75
|
+
margin-block-end: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
:host([data-render-mode="shadow"]) .slds-form-element__legend {
|
|
79
|
+
font-weight: var(--sds-g-font-weight-7, 700);
|
|
80
|
+
float: left;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
:host([data-render-mode="shadow"]) .slds-form-element__addon {
|
|
84
|
+
display: inline-block;
|
|
85
|
+
margin-block-start: 0;
|
|
86
|
+
margin-block-end: 0;
|
|
87
|
+
margin-inline-start: var(--sds-g-spacing-2, 0.5rem);
|
|
88
|
+
margin-inline-end: var(--sds-g-spacing-2, 0.5rem);
|
|
89
|
+
align-self: center;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
:host([data-render-mode="shadow"]) .slds-form-element__static {
|
|
93
|
+
overflow-wrap: break-word;
|
|
94
|
+
word-wrap: break-word;
|
|
95
|
+
word-break: break-word;
|
|
96
|
+
display: inline-block;
|
|
97
|
+
font-size: var(--sds-g-font-scale-neg-1, 0.875rem);
|
|
98
|
+
font-weight: var(--sds-g-font-weight-4, 400);
|
|
99
|
+
color: var(--sds-g-color-neutral-base-10, #181818);
|
|
100
|
+
width: 100%;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
:host([data-render-mode="shadow"]) .slds-form-element__static.slds-text-longform *:last-child {
|
|
104
|
+
margin-block-end: 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
:host([data-render-mode="shadow"]) .slds-form-element__static:empty {
|
|
108
|
+
min-height: calc(var(--sds-g-sizing-6, 1.25rem) + 1px);
|
|
109
|
+
vertical-align: bottom;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
:host([data-render-mode="shadow"]) .slds-form-element__static--edit {
|
|
113
|
+
width: calc(100% - var(--sds-g-sizing-7, 1.5rem));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
:host([data-render-mode="shadow"]) .slds-required {
|
|
117
|
+
color: var(--sds-g-color-error-base-50, #ea001e);
|
|
118
|
+
margin-block-start: 0;
|
|
119
|
+
margin-block-end: 0;
|
|
120
|
+
margin-inline-start: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
121
|
+
margin-inline-end: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
:host([data-render-mode="shadow"]) .slds-has-error .slds-form-element__help {
|
|
125
|
+
color: var(--sds-g-color-error-base-50, #ea001e);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
:host([data-render-mode="shadow"][invalid]) .slds-form-element__help {
|
|
129
|
+
color: var(--sds-g-color-error-base-50, #ea001e);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* --------------------------------------- */
|
|
133
|
+
|
|
134
|
+
/* FORM ELEMENT: STACKED */
|
|
135
|
+
|
|
136
|
+
:host([data-render-mode="shadow"][variant~='label-stacked']) {
|
|
137
|
+
display: block;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* TODO: Using `:not` is currently not working, and it could break the build because of issues with the dist script */
|
|
141
|
+
|
|
142
|
+
/* :host([variant~='label-stacked']):not(.slds-form-element_readonly) {
|
|
143
|
+
margin-block-end: var(--sds-g-spacing-2);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
:host([variant~='label-stacked']):not(.slds-is-editing) {
|
|
147
|
+
padding: 0 var(--sds-g-spacing-1);
|
|
148
|
+
} */
|
|
149
|
+
|
|
150
|
+
/* :host([variant~='label-stacked']):not([class*="slds-size"]) {
|
|
151
|
+
width: 100%;
|
|
152
|
+
flex-basis: 100%;
|
|
153
|
+
} */
|
|
154
|
+
|
|
155
|
+
:host([data-render-mode="shadow"][variant~='label-stacked']) .slds-form-element {
|
|
156
|
+
padding: 0;
|
|
157
|
+
margin-block-end: 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
:host([data-render-mode="shadow"][variant~='label-stacked']) .slds-form-element__label,:host([data-render-mode="shadow"][variant~='label-stacked']) .slds-form-element__control {
|
|
161
|
+
border-bottom: 0; /* Remove border when using legacy version of slds-form-element */
|
|
162
|
+
padding-inline-start: 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
:host([data-render-mode="shadow"][variant~='label-stacked']) .slds-form-element__control {
|
|
166
|
+
width: 100%;
|
|
167
|
+
flex-basis: 100%;
|
|
168
|
+
clear: left;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
:host([data-render-mode="shadow"][variant~='label-stacked']) .slds-form-element__icon {
|
|
172
|
+
float: none;
|
|
173
|
+
padding-block-start: var(--sds-g-spacing-1, 0.25rem);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* --------------------------------------- */
|
|
177
|
+
|
|
178
|
+
/* FORM ELEMENT: INLINE */
|
|
179
|
+
|
|
180
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) {
|
|
181
|
+
display: block;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/*
|
|
185
|
+
we have to combine with slds class here to avoid duplication
|
|
186
|
+
of this rule in child elements who import this stylesheet
|
|
187
|
+
in lighting-input this slds class is synonymous with the variant
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
:host([data-render-mode="shadow"][variant~='label-inline'].slds-form-element_horizontal) {
|
|
191
|
+
padding: var(--sds-g-spacing-1, 0.25rem);
|
|
192
|
+
margin-block-end: var(--sds-g-spacing-2, 0.5rem);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* TODO: Using `:not` is currently not working, and it could break the build because of issues with the dist script */
|
|
196
|
+
|
|
197
|
+
/* :host([variant~='label-inline']):not(.slds-form-element_readonly) {
|
|
198
|
+
margin-block-end: var(--sds-g-spacing-2);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
:host([variant~='label-inline']):not([class*="slds-size"]) {
|
|
202
|
+
width: 100%;
|
|
203
|
+
flex-basis: 100%;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
:host([variant~='label-inline']:not(.slds-is-editing)) {
|
|
207
|
+
padding: var(--sds-g-spacing-1);
|
|
208
|
+
} */
|
|
209
|
+
|
|
210
|
+
:host([data-render-mode="shadow"][variant~='label-inline']).slds-is-edited {
|
|
211
|
+
padding-block-start: var(--sds-g-sizing-6, 1.25rem)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
@media (min-width: 48em) {
|
|
215
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-form-element__label {
|
|
216
|
+
float: left;
|
|
217
|
+
max-width: calc(33% - var(--sds-g-sizing-6, 1.25rem)); /* Removing icon width for when the help-text icon is present */
|
|
218
|
+
flex-basis: calc(33% - var(--sds-g-sizing-6, 1.25rem)); /* Some form element controls are set to display:flex */
|
|
219
|
+
flex-grow: 1; /* For IE and Safari which didn't auto expand to the available space */
|
|
220
|
+
margin-block-end: 0;
|
|
221
|
+
position: relative;
|
|
222
|
+
z-index: 1;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) lightning-helptext {
|
|
226
|
+
float: left;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-form-element__control {
|
|
230
|
+
margin-inline-start: 33%;
|
|
231
|
+
clear: none; /* Reset clear: left when switching to horizontal form layout */
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-form-element__control .slds-form-element__control {
|
|
235
|
+
padding-inline-start: 0; /* Remove left padding on nested form controls, due to issues related to lightning-form components */
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-dueling-list__column .slds-form-element__label {
|
|
239
|
+
width: auto;
|
|
240
|
+
max-width: 100%;
|
|
241
|
+
-ms-flex-preferred-size: auto;
|
|
242
|
+
flex-basis: auto;
|
|
243
|
+
float: none;
|
|
244
|
+
position: relative;
|
|
245
|
+
padding-inline-start: 0;
|
|
246
|
+
margin-block-end: 0;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-form-element__help {
|
|
250
|
+
margin-inline-start: 33%;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
:host([data-render-mode="shadow"][variant~='label-inline']) .slds-dueling-list {
|
|
254
|
+
clear: none;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/* --------------------------------------- */
|
|
259
|
+
|
|
260
|
+
/* FORM ELEMENT: COMPOUND */
|
|
261
|
+
|
|
262
|
+
:host([data-render-mode="shadow"]) .slds-form-element_compound .slds-form-element__row {
|
|
263
|
+
display: flex;
|
|
264
|
+
margin-bottom: var(--sds-g-spacing-1, 0.25rem);
|
|
265
|
+
margin-left: calc(var(--sds-g-spacing-1, 0.25rem) * -1);
|
|
266
|
+
margin-right: calc(var(--sds-g-spacing-1, 0.25rem) * -1);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
:host([data-render-mode="shadow"]) .slds-form-element_compound .slds-form-element__row .slds-form-element__label {
|
|
270
|
+
padding-top: 0;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
:host([data-render-mode="shadow"]) .slds-form-element_compound .slds-form-element {
|
|
274
|
+
padding-left: var(--sds-g-spacing-1, 0.25rem);
|
|
275
|
+
padding-right: var(--sds-g-spacing-1, 0.25rem);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
:host([data-render-mode="shadow"]) .slds-form-element_address .slds-form-element__row {
|
|
279
|
+
align-items: flex-end;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
@supports (--styling-hooks: '') {
|
|
3
|
+
|
|
4
|
+
:host([data-render-mode="shadow"]) [part~="file-selector"] {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
:host([data-render-mode="shadow"]) .slds-file-selector__dropzone {
|
|
9
|
+
padding: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
|
|
10
|
+
border: var(--sds-g-sizing-border-1, 1px) dashed var(--slds-g-color-border-base-4, var(--sds-g-color-neutral-base-90, #e5e5e5));
|
|
11
|
+
border-radius: var(--sds-g-radius-border-2, 0.25rem);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:host([data-render-mode="shadow"]) .slds-has-drag-over {
|
|
15
|
+
outline: 0;
|
|
16
|
+
border-color: var(--slds-g-color-brand-base-60, var(--sds-g-color-brand-base-50, #0176d3));
|
|
17
|
+
box-shadow: 0 0 var(--sds-g-sizing-border-3, 3px) var(--sds-g-color-brand-base-50, #0176d3);
|
|
18
|
+
border-style: solid;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:host([data-render-mode="shadow"]) [part~='input']:focus ~ .slds-file-selector__body > .slds-file-selector__button {
|
|
22
|
+
box-shadow: 0 0 var(--sds-g-sizing-border-3, 3px) var(--sds-g-color-brand-base-50, #0176d3);
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:host([data-render-mode="shadow"]) [part~='input'][disabled] ~ .slds-file-selector__body {
|
|
27
|
+
color: var(--slds-g-color-neutral-base-10, var(--sds-g-color-palette-neutral-80, #c9c9c9));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
:host([data-render-mode="shadow"]) [part~='input'][disabled] ~ .slds-file-selector__body > .slds-file-selector__button {
|
|
31
|
+
background: var(--slds-g-color-neutral-base-95, var(--sds-g-color-neutral-base-95, #f3f3f3));
|
|
32
|
+
border-color: var(--slds-g-color-neutral-base-80, var(--sds-g-color-neutral-base-100, #ffffff));
|
|
33
|
+
color: var(--slds-g-color-neutral-base-30, var(--sds-g-color-neutral-base-100, #ffffff));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
:host([data-render-mode="shadow"]) [part~='input'][disabled] ~ .slds-file-selector__body > .slds-file-selector__body-icon {
|
|
37
|
+
fill: currentColor;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
:host([data-render-mode="shadow"]) .slds-file-selector_files .slds-file-selector__body {
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:host([data-render-mode="shadow"]) .slds-file-selector_files .slds-file-selector__text {
|
|
46
|
+
margin-left: var(--sds-g-spacing-2, 0.5rem);
|
|
47
|
+
margin-right: var(--sds-g-spacing-3, 0.75rem);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:host([data-render-mode="shadow"]) .slds-file-selector__button {
|
|
51
|
+
display: inline-flex;
|
|
52
|
+
align-items: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* TODO: Replace this with utility classes when available */
|
|
56
|
+
@media (max-width: 768px) {
|
|
57
|
+
:host([data-render-mode="shadow"]) .slds-medium-show {
|
|
58
|
+
display: none;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<span id="form-label" class={labelClass} data-form-label>
|
|
3
|
+
<template if:true={required}>
|
|
4
|
+
<abbr class="slds-required" title={i18n.required}>*</abbr>
|
|
5
|
+
</template>
|
|
6
|
+
{label}
|
|
7
|
+
</span>
|
|
8
|
+
<div class="slds-form-element__control">
|
|
9
|
+
<div class="slds-file-selector slds-file-selector_files" ondrop={handleDropFiles} part="file-selector">
|
|
10
|
+
<lightning-primitive-file-droppable-zone multiple={multiple} disabled={disabled}>
|
|
11
|
+
<input type="file" id="input-file"
|
|
12
|
+
aria-label={ariaLabel}
|
|
13
|
+
aria-invalid={ariaInvalid}
|
|
14
|
+
accesskey={accessKey}
|
|
15
|
+
class="slds-file-selector__input slds-assistive-text"
|
|
16
|
+
onblur={handleBlur}
|
|
17
|
+
onfocus={handleFocus}
|
|
18
|
+
onchange={handleChange}
|
|
19
|
+
accept={accept}
|
|
20
|
+
multiple={multiple}
|
|
21
|
+
name={name}
|
|
22
|
+
required={required}
|
|
23
|
+
readonly={readOnly}
|
|
24
|
+
disabled={disabled}
|
|
25
|
+
part="input">
|
|
26
|
+
<label id="file-selector-label" data-file-selector-label for="input-file" aria-hidden="true"
|
|
27
|
+
class="slds-file-selector__body">
|
|
28
|
+
<!-- chose to use this span over a lightning-button to match the SLDS blueprint. this uses the part=button to
|
|
29
|
+
get the styles from lightning-button to this span -->
|
|
30
|
+
<span class="slds-file-selector__button slds-button slds-button_neutral" part="button">
|
|
31
|
+
<lightning-primitive-icon icon-name="utility:upload" variant="bare" svg-class="slds-button__icon slds-button__icon_left">
|
|
32
|
+
</lightning-primitive-icon>
|
|
33
|
+
{i18n.inputFileButtonLabel}
|
|
34
|
+
</span>
|
|
35
|
+
<span class="slds-file-selector__text slds-medium-show">
|
|
36
|
+
{i18n.inputFileBodyText}
|
|
37
|
+
</span>
|
|
38
|
+
</label>
|
|
39
|
+
</lightning-primitive-file-droppable-zone>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<template if:true={_helpMessage}>
|
|
43
|
+
<div id="help-message" class="slds-form-element__help" data-help-message role="alert" part="help-text">{_helpMessage}</div>
|
|
44
|
+
</template>
|
|
45
|
+
</template>
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { api } from 'lwc';
|
|
2
|
+
import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
|
|
3
|
+
import { isNativeComponent, reflectAttribute } from 'lightning/utilsPrivate';
|
|
4
|
+
import labelRequired from '@salesforce/label/LightningControl.required';
|
|
5
|
+
import labelInputFileBodyText from '@salesforce/label/LightningInputFile.bodyText';
|
|
6
|
+
import labelInputFileButtonLabel from '@salesforce/label/LightningInputFile.buttonLabel';
|
|
7
|
+
|
|
8
|
+
const i18n = {
|
|
9
|
+
required: labelRequired,
|
|
10
|
+
inputFileBodyText: labelInputFileBodyText,
|
|
11
|
+
inputFileButtonLabel: labelInputFileButtonLabel,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default class LightningPrimitiveInputFile extends LightningShadowBaseClass {
|
|
15
|
+
_files = null;
|
|
16
|
+
_helpMessage = '';
|
|
17
|
+
|
|
18
|
+
/************************* PUBLIC PROPERTIES *************************/
|
|
19
|
+
|
|
20
|
+
@api accept;
|
|
21
|
+
@api accessKey;
|
|
22
|
+
@api ariaInvalid;
|
|
23
|
+
@api disabled;
|
|
24
|
+
@api label;
|
|
25
|
+
@api labelClass;
|
|
26
|
+
@api multiple;
|
|
27
|
+
@api name;
|
|
28
|
+
@api readOnly;
|
|
29
|
+
@api required;
|
|
30
|
+
@api ariaLabel;
|
|
31
|
+
|
|
32
|
+
@api
|
|
33
|
+
get files() {
|
|
34
|
+
return this._files;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@api
|
|
38
|
+
get inputElement() {
|
|
39
|
+
return this.template.querySelector('input');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@api
|
|
43
|
+
get ariaDescribedByElements() {
|
|
44
|
+
return this.template.querySelector('[data-help-message]');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@api
|
|
48
|
+
get ariaLabelledByElements() {
|
|
49
|
+
return [
|
|
50
|
+
this.template.querySelector('[data-form-label]'),
|
|
51
|
+
this.template.querySelector('[data-file-selector-label]'),
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@api
|
|
56
|
+
get isNativeShadow() {
|
|
57
|
+
return this._isNativeShadow;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@api
|
|
61
|
+
get helpMessage() {
|
|
62
|
+
return this._helpMessage;
|
|
63
|
+
}
|
|
64
|
+
set helpMessage(message) {
|
|
65
|
+
this._helpMessage = message;
|
|
66
|
+
reflectAttribute(this, 'invalid', !!message);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/************************* PRIVATE GETTERS *************************/
|
|
70
|
+
|
|
71
|
+
get i18n() {
|
|
72
|
+
return i18n;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/************************** EVENT HANDLERS **************************/
|
|
76
|
+
|
|
77
|
+
handleDropFiles(event) {
|
|
78
|
+
this._files = event.dataTransfer && event.dataTransfer.files;
|
|
79
|
+
this.dispatchEvent(new CustomEvent('change'));
|
|
80
|
+
// drop doesn't trigger focus/blur, so use event
|
|
81
|
+
// to call reportValidity instead of interacting state
|
|
82
|
+
this.dispatchEvent(new CustomEvent('reportvalidity'));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
handleBlur() {
|
|
86
|
+
this.dispatchEvent(new CustomEvent('blur'));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
handleFocus() {
|
|
90
|
+
this.dispatchEvent(new CustomEvent('focus'));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
handleChange() {
|
|
94
|
+
this._files = this.inputElement.files;
|
|
95
|
+
this.dispatchEvent(new CustomEvent('change'));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/************************** LIFECYCLE HOOKS **************************/
|
|
99
|
+
|
|
100
|
+
connectedCallback() {
|
|
101
|
+
super.connectedCallback();
|
|
102
|
+
this._isNativeShadow = isNativeComponent(this);
|
|
103
|
+
this.dispatchEvent(
|
|
104
|
+
new CustomEvent('privateprimitiveconnected', {
|
|
105
|
+
detail: {
|
|
106
|
+
isNativeShadow: this.isNativeShadow,
|
|
107
|
+
},
|
|
108
|
+
})
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="slds-form-element__control">
|
|
3
|
+
<span class="slds-radio">
|
|
4
|
+
<input type="radio" id="radio"
|
|
5
|
+
aria-invalid={ariaInvalid}
|
|
6
|
+
accesskey={accessKey}
|
|
7
|
+
onblur={handleBlur}
|
|
8
|
+
onfocus={handleFocus}
|
|
9
|
+
onchange={handleChange}
|
|
10
|
+
name={name}
|
|
11
|
+
required={required}
|
|
12
|
+
readonly={readOnly}
|
|
13
|
+
disabled={disabled}
|
|
14
|
+
aria-label={ariaLabel}>
|
|
15
|
+
<label for="radio" class="slds-radio__label">
|
|
16
|
+
<span class="slds-radio_faux"></span>
|
|
17
|
+
<span class={computedLabelClass}>{label}</span>
|
|
18
|
+
</label>
|
|
19
|
+
</span>
|
|
20
|
+
</div>
|
|
21
|
+
<template if:true={helpMessage}>
|
|
22
|
+
<div id="help-message" class="slds-form-element__help" data-help-message role="alert" part="help-text">{helpMessage}</div>
|
|
23
|
+
</template>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { LightningElement, api } from 'lwc';
|
|
2
|
+
import { classSet } from 'lightning/utils';
|
|
3
|
+
import { VARIANT } from 'lightning/inputUtils';
|
|
4
|
+
import { isNativeComponent } from 'lightning/utilsPrivate';
|
|
5
|
+
|
|
6
|
+
export default class LightningPrimitiveInputRadio extends LightningElement {
|
|
7
|
+
@api variant;
|
|
8
|
+
@api ariaInvalid;
|
|
9
|
+
@api accessKey;
|
|
10
|
+
@api name;
|
|
11
|
+
@api required;
|
|
12
|
+
@api readOnly;
|
|
13
|
+
@api disabled;
|
|
14
|
+
@api label;
|
|
15
|
+
@api ariaLabel;
|
|
16
|
+
@api helpMessage;
|
|
17
|
+
|
|
18
|
+
@api
|
|
19
|
+
get checked() {
|
|
20
|
+
return this._checked;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Sets the checked state of the input and reflects the attribute if required.
|
|
25
|
+
*/
|
|
26
|
+
set checked(value) {
|
|
27
|
+
this._setChecked(value);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@api
|
|
31
|
+
get ariaDescribedByElements() {
|
|
32
|
+
return this.template.querySelector('[data-help-message]');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@api
|
|
36
|
+
get isNativeShadow() {
|
|
37
|
+
return this._isNativeShadow;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@api
|
|
41
|
+
get inputElement() {
|
|
42
|
+
if (!this._cachedInputElement) {
|
|
43
|
+
let inputElement = this.template.querySelector('input');
|
|
44
|
+
this._cachedInputElement = inputElement;
|
|
45
|
+
}
|
|
46
|
+
return this._cachedInputElement;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get isLabelHidden() {
|
|
50
|
+
return this.variant === VARIANT.LABEL_HIDDEN;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get computedLabelClass() {
|
|
54
|
+
return classSet('slds-form-element__label')
|
|
55
|
+
.add({ 'slds-assistive-text': this.isLabelHidden })
|
|
56
|
+
.toString();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
_setChecked(value) {
|
|
60
|
+
value = Boolean(value);
|
|
61
|
+
this._checked = value;
|
|
62
|
+
if (this.rendered && this.inputElement.checked !== this._checked) {
|
|
63
|
+
this.inputElement.checked = this._checked;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
handleBlur() {
|
|
68
|
+
this.dispatchEvent(new CustomEvent('blur'));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
handleFocus() {
|
|
72
|
+
this.dispatchEvent(new CustomEvent('focus'));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
handleChange(event) {
|
|
76
|
+
this._setChecked(event.target.checked);
|
|
77
|
+
|
|
78
|
+
const changeEvent = new CustomEvent('change', {
|
|
79
|
+
bubbles: true,
|
|
80
|
+
composed: true,
|
|
81
|
+
detail: {
|
|
82
|
+
checked: event.target.checked,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
this.dispatchEvent(changeEvent);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
connectedCallback() {
|
|
89
|
+
this._isNativeShadow = isNativeComponent(this);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
renderedCallback() {
|
|
93
|
+
if (!this.rendered) {
|
|
94
|
+
this.inputElement.checked = this.checked;
|
|
95
|
+
}
|
|
96
|
+
this.rendered = true;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
disconnectedCallback() {
|
|
100
|
+
this._cachedInputElement = undefined;
|
|
101
|
+
this.rendered = false;
|
|
102
|
+
}
|
|
103
|
+
}
|