lightning-base-components 1.18.3-alpha → 1.18.5-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.
Files changed (52) hide show
  1. package/metadata/raptor.json +21 -0
  2. package/package.json +3 -2
  3. package/src/lightning/baseCombobox/baseCombobox.js +20 -14
  4. package/src/lightning/buttonIcon/buttonIcon.js +19 -16
  5. package/src/lightning/combobox/combobox.js +17 -16
  6. package/src/lightning/primitiveInputCheckbox/form-element.slds.css +281 -0
  7. package/src/lightning/primitiveInputCheckbox/input-checkbox.slds.css +395 -0
  8. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.css +3 -0
  9. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.html +48 -0
  10. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.js +139 -0
  11. package/src/lightning/primitiveInputCheckboxButton/form-element.slds.css +281 -0
  12. package/src/lightning/primitiveInputCheckboxButton/input-checkbox-button.slds.css +126 -0
  13. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.css +6 -0
  14. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.html +24 -0
  15. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.js +176 -0
  16. package/src/lightning/primitiveInputColor/form-element.slds.css +281 -0
  17. package/src/lightning/primitiveInputColor/input-color.slds.css +35 -0
  18. package/src/lightning/primitiveInputColor/input-text.slds.css +398 -0
  19. package/src/lightning/primitiveInputColor/primitiveInputColor.css +4 -0
  20. package/src/lightning/primitiveInputColor/primitiveInputColor.html +50 -0
  21. package/src/lightning/primitiveInputColor/primitiveInputColor.js +184 -0
  22. package/src/lightning/primitiveInputFile/button.slds.css +527 -0
  23. package/src/lightning/primitiveInputFile/form-element.slds.css +281 -0
  24. package/src/lightning/primitiveInputFile/input-file.slds.css +62 -0
  25. package/src/lightning/primitiveInputFile/primitiveInputFile.css +5 -0
  26. package/src/lightning/primitiveInputFile/primitiveInputFile.html +45 -0
  27. package/src/lightning/primitiveInputFile/primitiveInputFile.js +111 -0
  28. package/src/lightning/primitiveInputRadio/primitiveInputRadio.html +24 -0
  29. package/src/lightning/primitiveInputRadio/primitiveInputRadio.js +103 -0
  30. package/src/lightning/primitiveInputSimple/form-element.slds.css +281 -0
  31. package/src/lightning/primitiveInputSimple/input-text.slds.css +398 -0
  32. package/src/lightning/primitiveInputSimple/normalize.js +6 -0
  33. package/src/lightning/primitiveInputSimple/primitiveInputSimple.css +9 -0
  34. package/src/lightning/primitiveInputSimple/primitiveInputSimple.html +65 -0
  35. package/src/lightning/primitiveInputSimple/primitiveInputSimple.js +585 -0
  36. package/src/lightning/primitiveInputSimple/selection.js +131 -0
  37. package/src/lightning/primitiveInputToggle/form-element.slds.css +281 -0
  38. package/src/lightning/primitiveInputToggle/input-toggle.slds.css +170 -0
  39. package/src/lightning/primitiveInputToggle/primitiveInputToggle.css +3 -0
  40. package/src/lightning/primitiveInputToggle/primitiveInputToggle.html +34 -0
  41. package/src/lightning/primitiveInputToggle/primitiveInputToggle.js +164 -0
  42. package/src/lightning/tab/tab.css +2 -0
  43. package/src/lightning/tab/tab.js +22 -14
  44. package/src/lightning/tab/tab.slds.css +47 -0
  45. package/src/lightning/tabset/tabset.css +10 -0
  46. package/src/lightning/tabset/tabset.js +28 -10
  47. package/src/lightning/button/__wdio__/utam/utam.html +0 -3
  48. package/src/lightning/button/__wdio__/utam/utam.js +0 -3
  49. package/src/lightning/button/__wdio__/utam/utam.spec.js +0 -20
  50. package/src/lightning/datatable/__wdio__/utam/utam.html +0 -32
  51. package/src/lightning/datatable/__wdio__/utam/utam.js +0 -91
  52. package/src/lightning/datatable/__wdio__/utam/utam.spec.js +0 -214
@@ -0,0 +1,395 @@
1
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
2
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
3
+
4
+ :host([data-render-mode="shadow"]) {
5
+ /**
6
+ * Host mapping to composed sds-icon
7
+ *
8
+ * Static fallbacks in place for accessibility
9
+ */
10
+ --sds-c-icon-color-background: var(
11
+ --sds-c-inputcheckbox-color-background,
12
+ var(--sds-s-input-color-background, var(--sds-g-color-neutral-base-1))
13
+ );
14
+ --sds-c-icon-color-foreground: var(--sds-c-inputcheckbox-mark-color-foreground, transparent);
15
+ --sds-c-icon-color-border: var(
16
+ --sds-c-inputcheckbox-color-border,
17
+ var(--sds-s-input-color-border, var(--sds-g-color-neutral-base-contrast-4))
18
+ );
19
+ --sds-c-icon-sizing: var(--sds-c-inputcheckbox-sizing, 1rem);
20
+ --sds-c-icon-spacing: var(--sds-c-inputcheckbox-spacing);
21
+ --sds-c-icon-radius-border: var(--sds-c-inputcheckbox-radius-border, var(--sds-s-input-radius-border));
22
+ }
23
+
24
+ :host([data-render-mode="shadow"]:hover) {
25
+ --sds-c-inputcheckbox-mark-color-foreground: var(--sds-c-inputcheckbox-mark-color-foreground-hover);
26
+ --sds-c-inputcheckbox-color-background: var(
27
+ --sds-c-inputcheckbox-color-background-hover,
28
+ var(--sds-s-input-color-background-hover)
29
+ );
30
+ --sds-c-inputcheckbox-color-border: var(
31
+ --sds-c-inputcheckbox-color-border-hover,
32
+ var(--sds-s-input-color-border-hover)
33
+ );
34
+ --sds-c-inputcheckbox-label-color: var(--sds-c-inputcheckbox-label-color-hover);
35
+ }
36
+
37
+ :host([data-render-mode="shadow"][checked]) {
38
+ --sds-c-inputcheckbox-mark-color-foreground: var(
39
+ --sds-c-inputcheckbox-mark-color-foreground-checked,
40
+ var(--sds-g-color-neutral-base-1)
41
+ );
42
+ --sds-c-inputcheckbox-color-background: var(
43
+ --sds-c-inputcheckbox-color-background-checked,
44
+ var(--sds-g-color-neutral-base-contrast-4)
45
+ );
46
+ --sds-c-inputcheckbox-color-border: var(
47
+ --sds-c-inputcheckbox-color-border-checked,
48
+ var(--sds-g-color-neutral-base-contrast-4)
49
+ );
50
+ --sds-c-inputcheckbox-label-color: var(--sds-c-inputcheckbox-label-color-checked);
51
+ }
52
+
53
+ :host([data-render-mode="shadow"][checked]:hover) {
54
+ --sds-c-inputcheckbox-mark-color-foreground-checked: var(
55
+ --sds-c-inputcheckbox-mark-color-foreground-checked-hover
56
+ );
57
+ --sds-c-inputcheckbox-color-background-checked: var(--sds-c-inputcheckbox-color-background-checked-hover);
58
+ --sds-c-inputcheckbox-color-border-checked: var(--sds-c-inputcheckbox-color-border-checked-hover);
59
+ --sds-c-inputcheckbox-label-color-checked: var(
60
+ --sds-c-inputcheckbox-label-color-checked-hover,
61
+ var(--sds-c-inputcheckbox-label-color-hover)
62
+ );
63
+ }
64
+
65
+ :host([data-render-mode="shadow"][indeterminate]) {
66
+ --sds-c-inputcheckbox-mark-color-foreground: var(
67
+ --sds-c-inputcheckbox-mark-color-foreground-indeterminate,
68
+ #fff
69
+ );
70
+ --sds-c-inputcheckbox-color-background: var(
71
+ --sds-c-inputcheckbox-color-background-indeterminate,
72
+ var(--sds-s-input-color-background, #111)
73
+ );
74
+ --sds-c-inputcheckbox-color-border: var(
75
+ --sds-c-inputcheckbox-color-border-indeterminate,
76
+ var(--sds-s-input-color-border, #111)
77
+ );
78
+ --sds-c-inputcheckbox-label-color: var(--sds-c-inputcheckbox-label-color-indeterminate);
79
+ }
80
+
81
+ :host([data-render-mode="shadow"][indeterminate]:hover) {
82
+ --sds-c-inputcheckbox-mark-color-foreground-indeterminate: var(
83
+ --sds-c-inputcheckbox-mark-color-foreground-indeterminate-hover
84
+ );
85
+ --sds-c-inputcheckbox-color-background-indeterminate: var(
86
+ --sds-c-inputcheckbox-color-background-indeterminate-hover
87
+ );
88
+ --sds-c-inputcheckbox-color-border-indeterminate: var(
89
+ --sds-c-inputcheckbox-color-border-indeterminate-hover
90
+ );
91
+ --sds-c-inputcheckbox-label-color-indeterminate: var(
92
+ --sds-c-inputcheckbox-label-color-indeterminate-hover,
93
+ var(--sds-c-inputcheckbox-label-color-hover)
94
+ );
95
+ }
96
+
97
+ :host([data-render-mode="shadow"][focus-visible]) {
98
+ --sds-c-inputcheckbox-shadow: var(
99
+ --sds-c-inputcheckbox-shadow-focus,
100
+ var(--sds-s-input-shadow-focus, 0 0 4px 1px var(--sds-g-color-palette-blue-50, #0176d3))
101
+ );
102
+ }
103
+
104
+ :host([data-render-mode="shadow"][disabled]) {
105
+ --sds-c-inputcheckbox-color-background: var(
106
+ --sds-c-inputcheckbox-color-background-disabled,
107
+ var(--sds-s-input-color-background-disabled, #efefef)
108
+ );
109
+
110
+ /* TODO: Add shared border hook when available: https://github.com/salesforce-ux/salesforce-design-system/issues/272 */
111
+ --sds-c-inputcheckbox-color-border: var(--sds-c-inputcheckbox-color-border-disabled, #666);
112
+ --sds-c-inputcheckbox-label-color: var(--sds-c-inputcheckbox-label-color-disabled);
113
+ }
114
+
115
+ :host([data-render-mode="shadow"][error]) {
116
+ --sds-c-inputcheckbox-mark-color-foreground: var(--sds-c-inputcheckbox-mark-color-foreground-error);
117
+ --sds-c-inputcheckbox-color-background: var(--sds-c-inputcheckbox-color-background-error);
118
+ --sds-c-inputcheckbox-color-border: var(--sds-c-inputcheckbox-color-border-error);
119
+ --sds-c-inputcheckbox-label-color: var(--sds-c-inputcheckbox-label-color-error);
120
+ }
121
+
122
+ :host([data-render-mode="shadow"][disabled][checked]) {
123
+ --sds-c-inputcheckbox-mark-color-foreground: var(
124
+ --sds-c-inputcheckbox-mark-color-foreground-disabled,
125
+ #666
126
+ );
127
+ }
128
+
129
+ :host([data-render-mode="shadow"][error][focus-visible]) {
130
+ --sds-c-inputcheckbox-shadow: var(
131
+ --sds-c-inputcheckbox-shadow-error-focus,
132
+ 0 0 4px 1px var(--sds-g-color-palette-blue-50, #0176d3)
133
+ );
134
+ }
135
+
136
+ :host([data-render-mode="shadow"]) [part~='input-checkbox'] {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ }
140
+
141
+ :host([data-render-mode="shadow"]) [part~='indicator'] {
142
+ display: inline-flex;
143
+ align-items: center;
144
+ box-shadow: var(--sds-c-inputcheckbox-shadow, var(--sds-s-input-shadow));
145
+ }
146
+
147
+ /**
148
+ * Size and position the input on top of our icon for accessibility
149
+ */
150
+
151
+ :host([data-render-mode="shadow"]) [part~='checkbox'] {
152
+ position: absolute;
153
+ height: calc(
154
+ var(--sds-c-inputcheckbox-sizing, 1rem) + (var(--sds-c-inputcheckbox-sizing-border, 1px) * 2) +
155
+ var(--sds-c-inputcheckbox-spacing, 0px)
156
+ );
157
+ width: calc(
158
+ var(--sds-c-inputcheckbox-sizing, 1rem) + (var(--sds-c-inputcheckbox-sizing-border, 1px) * 2) +
159
+ var(--sds-c-inputcheckbox-spacing, 0px)
160
+ );
161
+ opacity: 0.00001;
162
+ }
163
+
164
+ :host([data-render-mode="shadow"]) [part~='label'] {
165
+ padding-inline-start: var(--sds-c-inputcheckbox-label-spacing-inline-start);
166
+ color: var(--sds-c-inputcheckbox-label-color);
167
+ }
168
+
169
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
170
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
171
+
172
+ @supports (--styling-hooks: '') {
173
+ /**
174
+ * Base
175
+ */
176
+ :host([data-render-mode="shadow"]) [part~='input-checkbox'] {
177
+ /* Label */
178
+ --sds-c-inputcheckbox-label-spacing-inline-start: var(
179
+ --slds-c-inputcheckbox-label-spacing-inline-start,
180
+ var(--sds-g-spacing-2, 0.5rem)
181
+ );
182
+
183
+ /* We need 'flex' instead of SDS's 'inline-flex' for the responsive label-inline variant */
184
+ display: flex;
185
+ }
186
+
187
+ /**
188
+ * Label Container
189
+ */
190
+ :host([data-render-mode="shadow"]) [part~='label-container'] {
191
+ display: inline-flex;
192
+ align-items: center;
193
+
194
+ /* Accounts for help-text in same row as label */
195
+ padding-inline-end: var(--sds-g-spacing-1, 0.25rem);
196
+ }
197
+
198
+ /**
199
+ * Label
200
+ *
201
+ * Add [part~='input-checkbox'] to increase specificity and
202
+ * avoid collisions with other components using [part~='label'] (e.g. slds-input-text)
203
+ */
204
+ :host([data-render-mode="shadow"]) [part~='input-checkbox'] [part~='label'] {
205
+ color: var(--slds-c-inputcheckbox-label-color, var(--sds-g-color-neutral-base-30, #444444));
206
+ font-size: var(--sds-g-font-scale-neg-2, 0.8125rem);
207
+ margin-block-end: 0;
208
+ padding-block-start: calc(var(--sds-g-spacing-1, 0.25rem) / 2);
209
+ }
210
+
211
+ /**
212
+ * Checkbox
213
+ *
214
+ * Hidden from view, see Indicator for visual faux checkbox.
215
+ */
216
+ :host([data-render-mode="shadow"]) [part~='checkbox'] {
217
+ width: 1px;
218
+ height: 1px;
219
+ border: 0;
220
+ clip: rect(0 0 0 0);
221
+ margin: -1px;
222
+ overflow: hidden;
223
+ padding: 0;
224
+ position: absolute;
225
+ pointer-events: auto;
226
+ }
227
+
228
+ /**
229
+ * Checkbox Indicator
230
+ *
231
+ * ┌────────────────────┐ ┌─────────────────────┐
232
+ * │ sds-icon │ │ Faux via <span> │
233
+ * └────────────────────┘ └─────────────────────┘
234
+ * ▲ ▲
235
+ * ┌────────────────────┐ ┌─────────────────────┐
236
+ * │ sds-input-checkbox │ │ slds-input-checkbox │
237
+ * └────────────────────┘ └─────────────────────┘
238
+ *
239
+ * sds-input-checkbox uses sds-icon for its visual checkbox indicator. SLDS
240
+ * + LBC uses a styled <span>. Due to this divergence, we require custom CSS.
241
+ */
242
+ :host([data-render-mode="shadow"]) [part~='indicator'] {
243
+ position: relative;
244
+ width: var(--slds-c-inputcheckbox-sizing, 1rem);
245
+ height: var(--slds-c-inputcheckbox-sizing, 1rem);
246
+ border-radius: var(--slds-c-inputcheckbox-radius-border, var(--sds-g-radius-border-1, 0.125rem));
247
+ border: var(--slds-c-inputcheckbox-sizing-border, var(--sds-g-sizing-border-1, 1px)) solid
248
+ var(--slds-c-inputcheckbox-color-border, var(--sds-g-color-neutral-base-80, #c9c9c9));
249
+ background-color: var(--slds-c-inputcheckbox-color-background, var(--sds-g-color-neutral-base-100, #ffffff));
250
+ box-shadow: var(--slds-c-inputcheckbox-shadow);
251
+ transition: border 0.1s linear, background-color 0.1s linear;
252
+ }
253
+
254
+ /**
255
+ * Checked
256
+ */
257
+ :host([data-render-mode="shadow"][checked]) [part~='indicator']::after {
258
+ content: '';
259
+ height: calc(var(--slds-c-inputcheckbox-sizing, 1rem) / 4);
260
+ width: calc(var(--slds-c-inputcheckbox-sizing, 1rem) / 2);
261
+ position: absolute;
262
+ top: 50%;
263
+ left: 50%;
264
+ transform: translate3d(-50%, -50%, 0) rotate(-45deg);
265
+ border-bottom: 2px solid
266
+ var(--slds-c-inputcheckbox-mark-color-foreground, var(--sds-g-color-brand-base-50, #0176d3));
267
+ border-left: 2px solid var(--slds-c-inputcheckbox-mark-color-foreground, var(--sds-g-color-brand-base-50, #0176d3));
268
+ }
269
+
270
+ :host([data-render-mode="shadow"][checked]) [part~='indicator'] {
271
+ --slds-c-inputcheckbox-color-background: var(--slds-c-inputcheckbox-color-background-checked);
272
+ --slds-c-inputcheckbox-color-border: var(--slds-c-inputcheckbox-color-border-checked);
273
+ }
274
+
275
+ /**
276
+ * Disabled
277
+ */
278
+ :host([data-render-mode="shadow"][disabled]) [part~='indicator'] {
279
+ --slds-c-inputcheckbox-color-background: var(
280
+ --slds-c-inputcheckbox-color-background-disabled,
281
+ var(--sds-g-color-neutral-base-95, #f3f3f3)
282
+ );
283
+ --slds-c-inputcheckbox-color-border: var(--slds-c-inputcheckbox-color-border-disabled);
284
+ --slds-c-inputcheckbox-mark-color-foreground: var(
285
+ --slds-c-inputcheckbox-mark-color-foreground-disabled,
286
+ var(--sds-g-color-neutral-base-60, #939393)
287
+ );
288
+ }
289
+
290
+ /**
291
+ * Focused
292
+ */
293
+ :host([data-render-mode="shadow"]:focus-within) [part~='indicator'] {
294
+ --slds-c-inputcheckbox-color-background: var(--slds-c-inputcheckbox-color-background-focus);
295
+ --slds-c-inputcheckbox-color-border: var(
296
+ --slds-c-inputcheckbox-color-border-focus,
297
+ var(--sds-g-color-brand-base-50, #0176d3)
298
+ );
299
+ --slds-c-inputcheckbox-shadow: var(
300
+ --slds-c-inputcheckbox-shadow-focus,
301
+ 0 0 3px var(--sds-g-color-brand-base-50, #0176d3)
302
+ );
303
+ }
304
+
305
+ /**
306
+ * Invalid
307
+ */
308
+ :host([data-render-mode="shadow"][invalid]) [part~='indicator'] {
309
+ --slds-c-inputcheckbox-color-background: var(--slds-c-inputcheckbox-color-background-invalid);
310
+ --slds-c-inputcheckbox-sizing-border: var(
311
+ --slds-c-inputcheckbox-sizing-border-invalid,
312
+ var(--sds-g-sizing-border-2, 2px)
313
+ );
314
+ --slds-c-inputcheckbox-color-border: var(
315
+ --slds-c-inputcheckbox-color-border-invalid,
316
+ var(--sds-g-color-error-base-50, #ea001e)
317
+ );
318
+ --slds-c-inputcheckbox-mark-color-foreground: var(
319
+ --slds-c-inputcheckbox-mark-color-foreground-invalid,
320
+ var(--sds-g-color-error-base-50, #ea001e)
321
+ );
322
+ }
323
+
324
+ :host([data-render-mode="shadow"][invalid]) [part~='help-text'] {
325
+ color: var(--slds-c-inputcheckbox-helptext-color-invalid, var(--sds-g-color-error-base-50, #ea001e));
326
+ }
327
+
328
+ /**
329
+ * Label Inline Variant
330
+ *
331
+ * @TODO: Remove magic number for MQ
332
+ */
333
+ @media (min-width: 48em) {
334
+ :host([data-render-mode="shadow"][variant~='label-inline']) [part~='label-container'] {
335
+ float: left;
336
+
337
+ /* TODO: Get rid of these magic numbers */
338
+ max-width: calc(33% - 1.125rem);
339
+ padding-block-start: var(--sds-g-spacing-1, 0.25rem);
340
+ padding-inline-start: var(--sds-g-spacing-1, 0.25rem);
341
+ }
342
+
343
+ :host([data-render-mode="shadow"][variant~='label-inline']) [part~='input-checkbox'] {
344
+ display: block;
345
+ margin-inline-start: 33%;
346
+ padding-block: var(--sds-g-spacing-1, 0.25rem);
347
+ margin-block-end: var(--sds-g-spacing-2, 0.5rem);
348
+ }
349
+
350
+ :host([data-render-mode="shadow"][variant~='label-inline']) [part~='inline-help'] {
351
+ float: left;
352
+ padding-block-start: var(--sds-g-spacing-1, 0.25rem);
353
+ }
354
+
355
+ :host([data-render-mode="shadow"][variant~='label-inline']) [part~='indicator'] {
356
+ /* @TODO: add change to SDS, removes line-height from display inline */
357
+ display: block;
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Standalone Checkbox
363
+ *
364
+ * label-inline & label-stacked uses the "standalone" checkbox that lives outside the label
365
+ */
366
+ :host([data-render-mode="shadow"][variant~='label-inline']) [part~='checkbox'],:host([data-render-mode="shadow"][variant~='label-stacked']) [part~='checkbox'] {
367
+ width: 1rem;
368
+ height: 1rem;
369
+ margin: 0;
370
+ clip: auto;
371
+ opacity: 0;
372
+ z-index: 1;
373
+ }
374
+ }
375
+
376
+ /**
377
+ * A temporarily baked-in utility class until SLDS gets a proper utility package.
378
+ *
379
+ * This is a hybrid patch between synthetic and native shadow. The ideal final
380
+ * outcome is the removal of this class and replacing the class with the SLDS
381
+ * utility package solution.
382
+ */
383
+
384
+ :host([data-render-mode="shadow"]) .slds-assistive-text {
385
+ position: absolute !important;
386
+ margin: -1px !important;
387
+ border: 0 !important;
388
+ padding: 0 !important;
389
+ width: 1px !important;
390
+ height: 1px !important;
391
+ overflow: hidden !important;
392
+ clip: rect(0 0 0 0) !important;
393
+ text-transform: none !important;
394
+ white-space: nowrap !important;
395
+ }
@@ -0,0 +1,3 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './input-checkbox.slds.css';
3
+ @import './form-element.slds.css';
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <template if:false={isStandardVariant}>
3
+ <label for="checkbox" part="label-container" class="slds-checkbox__label">
4
+ <template if:true={required}>
5
+ <abbr class="slds-required" title={labelRequired}>*</abbr>
6
+ </template>
7
+ <span class={computedLabelClass}>{label}</span>
8
+ </label>
9
+ <lightning-helptext if:true={fieldLevelHelp} content={fieldLevelHelp} alternative-text={helptextAlternativeText}></lightning-helptext>
10
+ </template>
11
+ <div class="slds-form-element__control slds-grow">
12
+ <span part="input-checkbox" class={computedCheckboxClass}>
13
+ <template if:true={isStandardVariant}>
14
+ <template if:true={required}>
15
+ <abbr class="slds-required" title={labelRequired}>*</abbr>
16
+ </template>
17
+ </template>
18
+ <input
19
+ type="checkbox"
20
+ part="checkbox"
21
+ id="checkbox"
22
+ aria-label={ariaLabel}
23
+ aria-invalid={ariaInvalid}
24
+ accesskey={accessKey}
25
+ onblur={handleBlur}
26
+ onfocus={handleFocus}
27
+ onchange={handleChange}
28
+ onclick={handleClick}
29
+ name={name}
30
+ required={required}
31
+ readonly={readOnly}
32
+ disabled={disabled}>
33
+ <template if:false={isStandardVariant}>
34
+ <span part="indicator" class="slds-checkbox_faux"></span>
35
+ </template>
36
+ <template if:true={isStandardVariant}>
37
+ <label for="checkbox" part="label-container" class="slds-checkbox__label">
38
+ <span part="indicator" class="slds-checkbox_faux"></span>
39
+ <span part="label" class={computedLabelClass}>{label}</span>
40
+ </label>
41
+ <lightning-helptext if:true={fieldLevelHelp} content={fieldLevelHelp} alternative-text={helptextAlternativeText}></lightning-helptext>
42
+ </template>
43
+ </span>
44
+ </div>
45
+ <template if:true={helpMessage}>
46
+ <div id="help-message" class="slds-form-element__help" data-help-message role="alert" part="help-text">{helpMessage}</div>
47
+ </template>
48
+ </template>
@@ -0,0 +1,139 @@
1
+ import { classSet } from 'lightning/utils';
2
+ import { VARIANT } from 'lightning/inputUtils';
3
+ import labelRequired from '@salesforce/label/LightningControl.required';
4
+ import { api } from 'lwc';
5
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
6
+
7
+ import { isNativeComponent, reflectAttribute } from 'lightning/utilsPrivate';
8
+
9
+ export default class LightningPrimitiveInputCheckbox extends LightningShadowBaseClass {
10
+ @api required;
11
+ @api readOnly;
12
+ @api label;
13
+ @api labelHidden;
14
+ @api helptextAlternativeText;
15
+ @api fieldLevelHelp;
16
+ @api ariaInvalid;
17
+ @api ariaLabel;
18
+ @api accessKey;
19
+ @api name;
20
+ @api disabled;
21
+ @api variant;
22
+
23
+ @api
24
+ get checked() {
25
+ return this._checked;
26
+ }
27
+ set checked(value) {
28
+ this._setChecked(value);
29
+ }
30
+
31
+ @api
32
+ get helpMessage() {
33
+ return this._helpMessage;
34
+ }
35
+
36
+ set helpMessage(message) {
37
+ this._helpMessage = message;
38
+ reflectAttribute(this, 'invalid', !!message);
39
+ }
40
+
41
+ @api
42
+ get inputElement() {
43
+ if (!this.cachedInputElement) {
44
+ let inputElement = this.template.querySelector('input');
45
+ this.cachedInputElement = inputElement;
46
+ }
47
+ return this.cachedInputElement;
48
+ }
49
+
50
+ @api
51
+ get describedByElements() {
52
+ return this.template.querySelector('[data-help-message]');
53
+ }
54
+
55
+ @api
56
+ get isNativeShadow() {
57
+ return this._isNativeShadow;
58
+ }
59
+
60
+ labelRequired = labelRequired;
61
+ _helpMessage;
62
+
63
+ get isStandardVariant() {
64
+ return (
65
+ this.variant === VARIANT.STANDARD ||
66
+ this.variant === VARIANT.LABEL_HIDDEN
67
+ );
68
+ }
69
+
70
+ get isLabelHidden() {
71
+ return this.variant === VARIANT.LABEL_HIDDEN;
72
+ }
73
+
74
+ get computedCheckboxClass() {
75
+ return classSet('slds-checkbox')
76
+ .add({ 'slds-checkbox_standalone': !this.isStandardVariant })
77
+ .toString();
78
+ }
79
+
80
+ get computedLabelClass() {
81
+ return classSet('slds-form-element__label')
82
+ .add({ 'slds-assistive-text': this.isLabelHidden })
83
+ .toString();
84
+ }
85
+
86
+ handleBlur() {
87
+ this.dispatchEvent(new CustomEvent('blur'));
88
+ }
89
+
90
+ handleFocus() {
91
+ this.dispatchEvent(new CustomEvent('focus'));
92
+ }
93
+
94
+ _setChecked(value) {
95
+ value = Boolean(value);
96
+ this._checked = value;
97
+ reflectAttribute(this, 'checked', this.checked);
98
+ if (this.rendered && this.inputElement.checked !== value) {
99
+ this.inputElement.checked = this._checked;
100
+ }
101
+ }
102
+
103
+ handleChange(event) {
104
+ this._setChecked(event.target.checked);
105
+
106
+ const changeEvent = new CustomEvent('change', {
107
+ detail: {
108
+ composed: true,
109
+ bubbles: true,
110
+ checked: event.target.checked,
111
+ },
112
+ });
113
+ this.dispatchEvent(changeEvent);
114
+ }
115
+
116
+ handleClick() {
117
+ if (this.template.activeElement === null) {
118
+ this.template.querySelector("[type='checkbox']").focus();
119
+ }
120
+ }
121
+
122
+ connectedCallback() {
123
+ super.connectedCallback();
124
+ this._isNativeShadow = isNativeComponent(this);
125
+ }
126
+
127
+ renderedCallback() {
128
+ if (!this.rendered) {
129
+ this.inputElement.checked = this.checked;
130
+ }
131
+ reflectAttribute(this, 'disabled', this.disabled);
132
+ this.rendered = true;
133
+ }
134
+
135
+ disconnectedCallback() {
136
+ this.cachedInputElement = undefined;
137
+ this.rendered = false;
138
+ }
139
+ }