lightning-base-components 1.16.8-alpha → 1.17.1-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/scopedImports/@salesforce-internal-core.appVersion.js +1 -1
- package/scopedImports/@salesforce-label-LightningLookup.messageWhenMissingInformation.js +1 -1
- package/src/lightning/button/button.html +3 -5
- package/src/lightning/button/button.js +0 -33
- package/src/lightning/buttonGroup/buttonGroup.css +2 -2
- package/src/lightning/buttonIcon/buttonIcon.css +2 -2
- package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -2
- package/src/lightning/buttonMenu/buttonMenu.css +2 -2
- package/src/lightning/buttonMenu/buttonMenu.html +2 -5
- package/src/lightning/buttonMenu/buttonMenu.js +1 -4
- package/src/lightning/buttonStateful/buttonStateful.css +2 -2
- package/src/lightning/card/card.css +2 -2
- package/src/lightning/carousel/carousel.html +1 -1
- package/src/lightning/colorPickerCustom/colorPickerCustom.css +2 -2
- package/src/lightning/colorPickerPanel/colorPickerPanel.css +2 -2
- package/src/lightning/dualListbox/dualListbox.css +2 -2
- package/src/lightning/helptext/helptext.css +2 -2
- package/src/lightning/icon/icon.css +2 -2
- package/src/lightning/icon/icon.js +0 -1
- package/src/lightning/input/input.css +2 -2
- package/src/lightning/primitiveBubble/primitiveBubble.css +2 -2
- package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +2 -2
- package/src/lightning/primitiveIcon/primitiveIcon.css +0 -3
- package/src/lightning/primitiveIcon/primitiveIcon.html +1 -1
- package/src/lightning/primitiveIcon/primitiveIcon.js +11 -19
- package/src/lightning/radioGroup/radioGroup.css +1 -1
- package/src/lightning/spinner/spinner.css +2 -2
- package/src/lightning/tooltipLibrary/tooltipLibrary.js +20 -28
- package/src/lightning/utilsPrivate/url.js +16 -1
- package/src/lightning/ariaObserver/__component__/ariaObserver.spec.js +0 -112
- package/src/lightning/button/button.css +0 -2
- package/src/lightning/button/button.slds.css +0 -425
- package/src/lightning/primitiveIcon/icon.slds.css +0 -197
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '
|
|
1
|
+
export default '242';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '
|
|
1
|
+
export default 'Review this lookup configuration. Your Salesforce admin can help with this.';
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
value={value}
|
|
10
10
|
onfocus={handleButtonFocus}
|
|
11
11
|
onblur={handleButtonBlur}
|
|
12
|
-
onclick={handleButtonClick}
|
|
13
12
|
aria-atomic={computedAriaAtomic}
|
|
14
13
|
aria-busy={computedAriaBusy}
|
|
15
14
|
aria-label={ariaLabel}
|
|
@@ -17,16 +16,15 @@
|
|
|
17
16
|
aria-haspopup={computedAriaHasPopup}
|
|
18
17
|
aria-live={computedAriaLive}
|
|
19
18
|
aria-pressed={computedAriaPressed}
|
|
20
|
-
aria-relevant={computedAriaRelevant}
|
|
21
|
-
part={computedPart}>
|
|
19
|
+
aria-relevant={computedAriaRelevant}>
|
|
22
20
|
<template if:true={showIconLeft}>
|
|
23
|
-
<lightning-primitive-icon
|
|
21
|
+
<lightning-primitive-icon icon-name={iconName} svg-class={computedIconClass} variant="bare"></lightning-primitive-icon>
|
|
24
22
|
</template>
|
|
25
23
|
|
|
26
24
|
{label}
|
|
27
25
|
|
|
28
26
|
<template if:true={showIconRight}>
|
|
29
|
-
<lightning-primitive-icon
|
|
27
|
+
<lightning-primitive-icon icon-name={iconName} svg-class={computedIconClass} variant="bare"></lightning-primitive-icon>
|
|
30
28
|
</template>
|
|
31
29
|
</button>
|
|
32
30
|
</template>
|
|
@@ -3,7 +3,6 @@ import { classSet } from 'lightning/utils';
|
|
|
3
3
|
import {
|
|
4
4
|
normalizeString as normalize,
|
|
5
5
|
normalizeBoolean,
|
|
6
|
-
reflectAttribute,
|
|
7
6
|
} from 'lightning/utilsPrivate';
|
|
8
7
|
import LightningPrimitiveButton from 'lightning/primitiveButton';
|
|
9
8
|
import template from './button.html';
|
|
@@ -13,7 +12,6 @@ import template from './button.html';
|
|
|
13
12
|
*/
|
|
14
13
|
export default class LightningButton extends LightningPrimitiveButton {
|
|
15
14
|
static delegatesFocus = true;
|
|
16
|
-
static shadowSupportMode = 'any';
|
|
17
15
|
_normalizedVariant = 'neutral';
|
|
18
16
|
_stretch = false;
|
|
19
17
|
|
|
@@ -68,8 +66,6 @@ export default class LightningButton extends LightningPrimitiveButton {
|
|
|
68
66
|
'success',
|
|
69
67
|
],
|
|
70
68
|
});
|
|
71
|
-
|
|
72
|
-
reflectAttribute(this, 'variant', this._normalizedVariant);
|
|
73
69
|
}
|
|
74
70
|
|
|
75
71
|
/**
|
|
@@ -108,8 +104,6 @@ export default class LightningButton extends LightningPrimitiveButton {
|
|
|
108
104
|
set stretch(value) {
|
|
109
105
|
this._originalStretch = value;
|
|
110
106
|
this._normalizedStretch = normalizeBoolean(value);
|
|
111
|
-
|
|
112
|
-
reflectAttribute(this, 'stretch', this._normalizedStretch);
|
|
113
107
|
}
|
|
114
108
|
|
|
115
109
|
/**
|
|
@@ -191,18 +185,6 @@ export default class LightningButton extends LightningPrimitiveButton {
|
|
|
191
185
|
this.dispatchEvent(new CustomEvent('blur'));
|
|
192
186
|
}
|
|
193
187
|
|
|
194
|
-
handleButtonClick() {
|
|
195
|
-
// In native shadow mode, parent form can't be submitted from within the
|
|
196
|
-
// shadow boundary, so we need to manually find the parent form and submit.
|
|
197
|
-
// Once TD-0118070 is delivered, we can access the parent form using `elementInternals.form`
|
|
198
|
-
if (!this.template.synthetic && this.normalizedType === 'submit') {
|
|
199
|
-
const form = this.template.host.closest('form');
|
|
200
|
-
if (form) {
|
|
201
|
-
form.requestSubmit();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
188
|
/**
|
|
207
189
|
* Sets focus on the button.
|
|
208
190
|
*/
|
|
@@ -232,13 +214,7 @@ export default class LightningButton extends LightningPrimitiveButton {
|
|
|
232
214
|
* the buttons.
|
|
233
215
|
*/
|
|
234
216
|
connectedCallback() {
|
|
235
|
-
// Set `data-render-mode` attribute in native shadow mode
|
|
236
|
-
if (!this.template.synthetic) {
|
|
237
|
-
this.template.host.setAttribute('data-render-mode', 'shadow');
|
|
238
|
-
}
|
|
239
|
-
|
|
240
217
|
if (!this._connected) {
|
|
241
|
-
reflectAttribute(this, 'variant', this._normalizedVariant);
|
|
242
218
|
this._connected = true;
|
|
243
219
|
}
|
|
244
220
|
}
|
|
@@ -252,17 +228,8 @@ export default class LightningButton extends LightningPrimitiveButton {
|
|
|
252
228
|
}
|
|
253
229
|
|
|
254
230
|
disconnectedCallback() {
|
|
255
|
-
super.disconnectedCallback();
|
|
256
231
|
this._connected = false;
|
|
257
232
|
}
|
|
258
|
-
|
|
259
|
-
get computedPart() {
|
|
260
|
-
if (!this.template.synthetic) {
|
|
261
|
-
return 'button';
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
return undefined;
|
|
265
|
-
}
|
|
266
233
|
}
|
|
267
234
|
|
|
268
235
|
LightningButton.interopMap = {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './button-group.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './button-group.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './button-icon.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './button-icon.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './button-icon-stateful.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './button-icon-stateful.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import "./dropdown.slds.css";
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import "./dropdown.slds.css"; */
|
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
onblur={handleBlur}
|
|
12
12
|
onfocus={handleFocus}
|
|
13
13
|
type="button"
|
|
14
|
-
aria-controls="lgt-button-menu-dropdown"
|
|
15
|
-
id="lgt-button-menu"
|
|
16
14
|
onmousedown={handleButtonMouseDown}
|
|
17
15
|
tabindex={tabIndex}
|
|
18
16
|
part="button button-icon">
|
|
@@ -40,10 +38,9 @@
|
|
|
40
38
|
<lightning-spinner size="small" alternative-text={computedLoadingStateAlternativeText}></lightning-spinner>
|
|
41
39
|
</template>
|
|
42
40
|
<template if:false={isLoading}>
|
|
43
|
-
<div
|
|
44
|
-
|
|
41
|
+
<div
|
|
42
|
+
class="slds-dropdown__list slds-dropdown_length-with-icon-10"
|
|
45
43
|
role="menu"
|
|
46
|
-
aria-labelledby="lgt-button-menu"
|
|
47
44
|
onprivateselect={handleMenuItemPrivateSelect}
|
|
48
45
|
onprivateblur={handlePrivateBlur}
|
|
49
46
|
onprivatefocus={handlePrivateFocus}
|
|
@@ -772,10 +772,7 @@ export default class LightningButtonMenu extends LightningElement {
|
|
|
772
772
|
// prevent blur during a non-blurring focus change
|
|
773
773
|
// set lock so that while focusing on menutitem, menu doesnt close
|
|
774
774
|
this.cancelBlur();
|
|
775
|
-
|
|
776
|
-
requestAnimationFrame(() => {
|
|
777
|
-
menuItem.focus();
|
|
778
|
-
});
|
|
775
|
+
menuItem.focus();
|
|
779
776
|
}
|
|
780
777
|
// allowBlur is called when the menu items receives focus
|
|
781
778
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './button-stateful.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './button-stateful.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './card.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './card.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './color-picker-custom.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './color-picker-custom.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './help-text.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './help-text.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import "lightning/sldsCommon";
|
|
2
|
-
@import "./icon.slds.css";
|
|
1
|
+
/* @import "lightning/sldsCommon";
|
|
2
|
+
@import "./icon.slds.css"; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './tooltip.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './tooltip.slds.css'; */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './color-picker-button.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './color-picker-button.slds.css'; */
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { api } from 'lwc';
|
|
1
|
+
import { LightningElement, api } from 'lwc';
|
|
3
2
|
import { classSet } from 'lightning/utils';
|
|
4
3
|
import { normalizeString as normalize } from 'lightning/utilsPrivate';
|
|
5
4
|
|
|
6
5
|
import standardTemplate from './primitiveIcon.html';
|
|
7
|
-
import iconStylesheets from './primitiveIcon.css';
|
|
8
6
|
|
|
9
7
|
import { getName, isValidName, polyfill } from 'lightning/iconUtils';
|
|
10
8
|
import dir from '@salesforce/i18n/dir';
|
|
11
9
|
import { fetchIconLibrary, hasIconLibrary, getIconLibrary } from './fetch';
|
|
12
10
|
|
|
13
|
-
export default class LightningPrimitiveIcon extends
|
|
11
|
+
export default class LightningPrimitiveIcon extends LightningElement {
|
|
14
12
|
@api src;
|
|
15
13
|
@api svgClass;
|
|
16
14
|
_size = 'medium';
|
|
@@ -25,7 +23,6 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
25
23
|
}
|
|
26
24
|
set size(val) {
|
|
27
25
|
this._size = val;
|
|
28
|
-
this.setAttribute('size', this.normalizeSize(this._size));
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
@api
|
|
@@ -34,7 +31,6 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
34
31
|
}
|
|
35
32
|
set variant(val) {
|
|
36
33
|
this._variant = val;
|
|
37
|
-
this.setAttribute('variant', this.normalizeVariant(this._variant));
|
|
38
34
|
}
|
|
39
35
|
|
|
40
36
|
@api
|
|
@@ -99,11 +95,6 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
99
95
|
this._iconLibrary[`${spriteName}_${iconName}`];
|
|
100
96
|
|
|
101
97
|
if (template) {
|
|
102
|
-
// manually attach the stylesheets in native shadow mode
|
|
103
|
-
if (!this.template.synthetic) {
|
|
104
|
-
template.stylesheets = iconStylesheets;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
98
|
return template;
|
|
108
99
|
}
|
|
109
100
|
}
|
|
@@ -120,14 +111,14 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
120
111
|
return getName(this.iconName);
|
|
121
112
|
}
|
|
122
113
|
|
|
123
|
-
|
|
124
|
-
return normalize(
|
|
114
|
+
get normalizedSize() {
|
|
115
|
+
return normalize(this._size, {
|
|
125
116
|
fallbackValue: 'medium',
|
|
126
117
|
validValues: ['xx-small', 'x-small', 'small', 'medium', 'large'],
|
|
127
118
|
});
|
|
128
119
|
}
|
|
129
120
|
|
|
130
|
-
|
|
121
|
+
get normalizedVariant() {
|
|
131
122
|
// NOTE: Leaving a note here because I just wasted a bunch of time
|
|
132
123
|
// investigating why both 'bare' and 'inverse' are supported in
|
|
133
124
|
// lightning-primitive-icon. lightning-icon also has a deprecated
|
|
@@ -135,7 +126,7 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
135
126
|
// that no classes should be applied. So this component needs to
|
|
136
127
|
// support both 'bare' and 'inverse' while lightning-icon only needs to
|
|
137
128
|
// support 'inverse'.
|
|
138
|
-
return normalize(
|
|
129
|
+
return normalize(this._variant, {
|
|
139
130
|
fallbackValue: '',
|
|
140
131
|
validValues: ['bare', 'error', 'inverse', 'warning', 'success'],
|
|
141
132
|
});
|
|
@@ -143,12 +134,13 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
143
134
|
|
|
144
135
|
get computedClass() {
|
|
145
136
|
const classes = classSet(this.svgClass);
|
|
137
|
+
const { normalizedSize, normalizedVariant } = this;
|
|
146
138
|
|
|
147
|
-
if (
|
|
139
|
+
if (normalizedVariant !== 'bare') {
|
|
148
140
|
classes.add('slds-icon');
|
|
149
141
|
}
|
|
150
142
|
|
|
151
|
-
switch (
|
|
143
|
+
switch (normalizedVariant) {
|
|
152
144
|
case 'error':
|
|
153
145
|
classes.add('slds-icon-text-error');
|
|
154
146
|
break;
|
|
@@ -169,8 +161,8 @@ export default class LightningPrimitiveIcon extends LightningShadowBaseClass {
|
|
|
169
161
|
}
|
|
170
162
|
}
|
|
171
163
|
|
|
172
|
-
if (
|
|
173
|
-
classes.add(`slds-icon_${
|
|
164
|
+
if (normalizedSize !== 'medium') {
|
|
165
|
+
classes.add(`slds-icon_${normalizedSize}`);
|
|
174
166
|
}
|
|
175
167
|
|
|
176
168
|
return classes.toString();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@import 'lightning/sldsCommon';
|
|
2
|
-
@import './spinner.slds.css';
|
|
1
|
+
/* @import 'lightning/sldsCommon';
|
|
2
|
+
@import './spinner.slds.css'; */
|
|
@@ -85,6 +85,7 @@ export class Tooltip {
|
|
|
85
85
|
_disabled = true;
|
|
86
86
|
_initialized = false;
|
|
87
87
|
_visible = false;
|
|
88
|
+
_isFocusEvent = false;
|
|
88
89
|
|
|
89
90
|
_config = {};
|
|
90
91
|
|
|
@@ -171,7 +172,7 @@ export class Tooltip {
|
|
|
171
172
|
target.addEventListener(name, () => this.show())
|
|
172
173
|
);
|
|
173
174
|
// Unlike the tooltip in Aura, we want clicks and keys to dismiss the tooltip.
|
|
174
|
-
['mouseleave', 'blur', 'click'].forEach((name) =>
|
|
175
|
+
['mouseleave', 'blur', 'click', 'keydown'].forEach((name) =>
|
|
175
176
|
target.addEventListener(name, (event) =>
|
|
176
177
|
this.hideIfNotSelfCover(event)
|
|
177
178
|
)
|
|
@@ -180,34 +181,24 @@ export class Tooltip {
|
|
|
180
181
|
}
|
|
181
182
|
|
|
182
183
|
hideIfNotSelfCover(event) {
|
|
183
|
-
if (
|
|
184
|
-
if
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const elementMouseIsOver = document.elementFromPoint
|
|
194
|
-
? document.elementFromPoint(
|
|
195
|
-
event.clientX,
|
|
196
|
-
event.clientY
|
|
197
|
-
)
|
|
198
|
-
: null;
|
|
199
|
-
if (elementMouseIsOver === this._element()) {
|
|
200
|
-
if (!isResizeObserverSupported()) {
|
|
201
|
-
this.startPositioning();
|
|
202
|
-
}
|
|
203
|
-
return;
|
|
184
|
+
if (event.type === 'mouseleave' && event.clientX && event.clientY) {
|
|
185
|
+
// In any chance, if mouseleave is caused by tooltip itself, it would means
|
|
186
|
+
// tooltip cover the target which mostly caused by dynamic resize of tooltip by CSS or JS.
|
|
187
|
+
try {
|
|
188
|
+
const elementMouseIsOver = document.elementFromPoint
|
|
189
|
+
? document.elementFromPoint(event.clientX, event.clientY)
|
|
190
|
+
: null;
|
|
191
|
+
if (elementMouseIsOver === this._element()) {
|
|
192
|
+
if (!isResizeObserverSupported()) {
|
|
193
|
+
this.startPositioning();
|
|
204
194
|
}
|
|
205
|
-
|
|
206
|
-
// Jest Throw Exception
|
|
195
|
+
return;
|
|
207
196
|
}
|
|
197
|
+
} catch (ex) {
|
|
198
|
+
// Jest Throw Exception
|
|
208
199
|
}
|
|
209
|
-
this.hide();
|
|
210
200
|
}
|
|
201
|
+
this.hide();
|
|
211
202
|
}
|
|
212
203
|
|
|
213
204
|
handleDocumentTouch() {
|
|
@@ -224,7 +215,7 @@ export class Tooltip {
|
|
|
224
215
|
this.toggle();
|
|
225
216
|
});
|
|
226
217
|
['mouseenter', 'focus'].forEach((name) =>
|
|
227
|
-
target.addEventListener(name, () => this.show())
|
|
218
|
+
target.addEventListener(name, (event) => this.show(event))
|
|
228
219
|
);
|
|
229
220
|
['mouseleave', 'blur'].forEach((name) =>
|
|
230
221
|
target.addEventListener(name, (event) =>
|
|
@@ -234,7 +225,7 @@ export class Tooltip {
|
|
|
234
225
|
}
|
|
235
226
|
}
|
|
236
227
|
handleEscape(e) {
|
|
237
|
-
if (e.key === 'Escape') {
|
|
228
|
+
if (e.key === 'Escape' && this._isFocusEvent) {
|
|
238
229
|
e.stopPropagation();
|
|
239
230
|
this.hideIfNotSelfCover(e);
|
|
240
231
|
}
|
|
@@ -251,10 +242,11 @@ export class Tooltip {
|
|
|
251
242
|
return this._resizeObserver;
|
|
252
243
|
}
|
|
253
244
|
|
|
254
|
-
show() {
|
|
245
|
+
show(ev) {
|
|
255
246
|
if (this._disabled) {
|
|
256
247
|
return;
|
|
257
248
|
}
|
|
249
|
+
this._isFocusEvent = ev && (ev.type === 'focus' ? true : false);
|
|
258
250
|
|
|
259
251
|
this._visible = true;
|
|
260
252
|
const tooltip = this._element();
|
|
@@ -11,14 +11,29 @@ export function makeAbsoluteUrl(url) {
|
|
|
11
11
|
|
|
12
12
|
export const FALLBACK_URL = 'about:blank';
|
|
13
13
|
const IS_SCRIPT_OR_DATA = /^(?:\w+script|data):/i;
|
|
14
|
+
const IS_HTML_ENTITY = /&#(\w+)(^\w|;)?/g;
|
|
15
|
+
const htmlCtrlEntityRegex = /&(newline|tab);/gi;
|
|
16
|
+
const ctrlCharactersRegex =
|
|
17
|
+
// eslint-disable-next-line no-control-regex
|
|
18
|
+
/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
|
|
14
19
|
|
|
20
|
+
function decodeHtmlCharacters(str) {
|
|
21
|
+
return str.replace(IS_HTML_ENTITY, (match, dec) => {
|
|
22
|
+
return String.fromCharCode(dec);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
15
25
|
/**
|
|
16
26
|
* Mark sure to preventDefault, when sanitized url matches FALLBACK_URL
|
|
17
27
|
* W-12029667 - Making FALLBACK_URL as '#' causes click action to fail on tests
|
|
18
28
|
* */
|
|
19
29
|
export function sanitizeURL(url) {
|
|
20
30
|
if (url) {
|
|
21
|
-
|
|
31
|
+
// remove html entity characters from url
|
|
32
|
+
const sanitizedUrl = decodeHtmlCharacters(url)
|
|
33
|
+
.replace(htmlCtrlEntityRegex, '')
|
|
34
|
+
.replace(ctrlCharactersRegex, '')
|
|
35
|
+
.trim();
|
|
36
|
+
return sanitizedUrl.match(IS_SCRIPT_OR_DATA) ? FALLBACK_URL : url;
|
|
22
37
|
}
|
|
23
38
|
return FALLBACK_URL;
|
|
24
39
|
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { createElement } from 'lwc';
|
|
2
|
-
import AriaObserverContainer from 'lightningtest/ariaObserverContainer';
|
|
3
|
-
|
|
4
|
-
function createTestElement(props = {}) {
|
|
5
|
-
const element = createElement('lightningtest-aria-observer-container', {
|
|
6
|
-
is: AriaObserverContainer,
|
|
7
|
-
});
|
|
8
|
-
Object.assign(element, props);
|
|
9
|
-
document.body.appendChild(element);
|
|
10
|
-
|
|
11
|
-
return element;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
describe('AriaObserver', () => {
|
|
15
|
-
if (process.env.NATIVE_SHADOW) {
|
|
16
|
-
describe('native shadow', () => {
|
|
17
|
-
it('should copy the label content over and set aria-labelledby to be the internal label element', () => {
|
|
18
|
-
const container = createTestElement();
|
|
19
|
-
const testElement = container.testElement;
|
|
20
|
-
|
|
21
|
-
expect(container.labelContent).toEqual(
|
|
22
|
-
testElement.labelContent
|
|
23
|
-
);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('should react to label id changes', async () => {
|
|
27
|
-
const container = createTestElement();
|
|
28
|
-
const oldLabelContent = container.labelContent;
|
|
29
|
-
|
|
30
|
-
container.updateAriaLabelledby('alt-label-id');
|
|
31
|
-
await Promise.resolve();
|
|
32
|
-
|
|
33
|
-
const testElement = container.testElement;
|
|
34
|
-
|
|
35
|
-
expect(container.labelContent).not.toEqual(oldLabelContent);
|
|
36
|
-
expect(container.labelContent).toEqual(
|
|
37
|
-
testElement.labelContent
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should work with multiple label ids', async () => {
|
|
42
|
-
const container = createTestElement();
|
|
43
|
-
container.updateAriaLabelledby('id-label alt-label-id');
|
|
44
|
-
await Promise.resolve();
|
|
45
|
-
|
|
46
|
-
const testElement = container.testElement;
|
|
47
|
-
expect(testElement.labelContent).toEqual('Foo\nBar');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('should work with label ids appearing in the opposite of document order', async () => {
|
|
51
|
-
const container = createTestElement();
|
|
52
|
-
container.updateAriaLabelledby('alt-label-id id-label');
|
|
53
|
-
await Promise.resolve();
|
|
54
|
-
|
|
55
|
-
const testElement = container.testElement;
|
|
56
|
-
expect(testElement.labelContent).toEqual('Bar\nFoo');
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should update the internal label content when external content changes', async () => {
|
|
60
|
-
const container = createTestElement();
|
|
61
|
-
container.updateLabelContent();
|
|
62
|
-
|
|
63
|
-
// wait for component rehydration
|
|
64
|
-
await Promise.resolve();
|
|
65
|
-
// wait for mutation observer callback
|
|
66
|
-
await Promise.resolve();
|
|
67
|
-
|
|
68
|
-
const testElement = container.testElement;
|
|
69
|
-
expect(container.labelContent).toEqual(
|
|
70
|
-
testElement.labelContent
|
|
71
|
-
);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
} else {
|
|
75
|
-
describe('synthetic shadow', () => {
|
|
76
|
-
it('should set aria-labelledby to be the external label id', () => {
|
|
77
|
-
const container = createTestElement();
|
|
78
|
-
const testElement = container.testElement;
|
|
79
|
-
|
|
80
|
-
expect(container.labelId).toEqual(testElement.labelId);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should react to label id changes', async () => {
|
|
84
|
-
const container = createTestElement();
|
|
85
|
-
const oldLabelId = container.labelId;
|
|
86
|
-
|
|
87
|
-
container.updateAriaLabelledby('alt-label-id');
|
|
88
|
-
await Promise.resolve();
|
|
89
|
-
|
|
90
|
-
const testElement = container.testElement;
|
|
91
|
-
|
|
92
|
-
expect(container.labelId).not.toEqual(oldLabelId);
|
|
93
|
-
expect(container.labelId).toEqual(testElement.labelId);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('should keep the label id unchanged when the label content changes', async () => {
|
|
97
|
-
const container = createTestElement();
|
|
98
|
-
container.updateLabelContent();
|
|
99
|
-
await Promise.resolve();
|
|
100
|
-
|
|
101
|
-
const testElement = container.testElement;
|
|
102
|
-
expect(container.labelId).toEqual(testElement.labelId);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should keep track of the live id', () => {
|
|
106
|
-
const container = createTestElement();
|
|
107
|
-
const testElement = container.testElement;
|
|
108
|
-
expect(testElement.labelId).toEqual(testElement.liveId);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
});
|
|
@@ -1,425 +0,0 @@
|
|
|
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"]:focus) {
|
|
5
|
-
outline: 0;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
:host([data-render-mode="shadow"]) [part~='button'] {
|
|
9
|
-
display: inline-flex;
|
|
10
|
-
position: relative;
|
|
11
|
-
background: none;
|
|
12
|
-
background-color: var(--sds-c-button-color-background, var(--sds-s-button-color-background, transparent));
|
|
13
|
-
background-clip: border-box;
|
|
14
|
-
color: var(--sds-c-button-text-color, var(--sds-s-button-text-color, inherit));
|
|
15
|
-
padding-left: var(
|
|
16
|
-
--sds-c-button-spacing-inline-start,
|
|
17
|
-
var(--sds-c-button-spacing-inline, var(--sds-s-button-spacing-inline))
|
|
18
|
-
);
|
|
19
|
-
padding-right: var(
|
|
20
|
-
--sds-c-button-spacing-inline-end,
|
|
21
|
-
var(--sds-c-button-spacing-inline, var(--sds-s-button-spacing-inline))
|
|
22
|
-
);
|
|
23
|
-
padding-top: var(
|
|
24
|
-
--sds-c-button-spacing-block-start,
|
|
25
|
-
var(--sds-c-button-spacing-block, var(--sds-s-button-spacing-block))
|
|
26
|
-
);
|
|
27
|
-
padding-bottom: var(
|
|
28
|
-
--sds-c-button-spacing-block-start,
|
|
29
|
-
var(--sds-c-button-spacing-block, var(--sds-s-button-spacing-block))
|
|
30
|
-
);
|
|
31
|
-
border-width: var(--sds-c-button-sizing-border, var(--sds-s-button-sizing-border, 1px));
|
|
32
|
-
border-style: solid;
|
|
33
|
-
border-color: var(--sds-c-button-color-border, var(--sds-s-button-color-border, transparent));
|
|
34
|
-
border-start-start-radius: var(
|
|
35
|
-
--sds-c-button-radius-border-startstart,
|
|
36
|
-
var(
|
|
37
|
-
--sds-c-button-radius-border,
|
|
38
|
-
var(
|
|
39
|
-
--sds-s-button-radius-border-startstart,
|
|
40
|
-
var(--sds-s-button-radius-border, var(--sds-g-radius-border-2, 0.25rem))
|
|
41
|
-
)
|
|
42
|
-
)
|
|
43
|
-
);
|
|
44
|
-
border-start-end-radius: var(
|
|
45
|
-
--sds-c-button-radius-border-startend,
|
|
46
|
-
var(
|
|
47
|
-
--sds-c-button-radius-border,
|
|
48
|
-
var(
|
|
49
|
-
--sds-s-button-radius-border-startend,
|
|
50
|
-
var(--sds-s-button-radius-border, var(--sds-g-radius-border-2, 0.25rem))
|
|
51
|
-
)
|
|
52
|
-
)
|
|
53
|
-
);
|
|
54
|
-
border-end-start-radius: var(
|
|
55
|
-
--sds-c-button-radius-border-endstart,
|
|
56
|
-
var(
|
|
57
|
-
--sds-c-button-radius-border,
|
|
58
|
-
var(
|
|
59
|
-
--sds-s-button-radius-border-endstart,
|
|
60
|
-
var(--sds-s-button-radius-border, var(--sds-g-radius-border-2, 0.25rem))
|
|
61
|
-
)
|
|
62
|
-
)
|
|
63
|
-
);
|
|
64
|
-
border-end-end-radius: var(
|
|
65
|
-
--sds-c-button-radius-border-endend,
|
|
66
|
-
var(
|
|
67
|
-
--sds-c-button-radius-border,
|
|
68
|
-
var(
|
|
69
|
-
--sds-s-button-radius-border-endend,
|
|
70
|
-
var(--sds-s-button-radius-border, var(--sds-g-radius-border-2, 0.25rem))
|
|
71
|
-
)
|
|
72
|
-
)
|
|
73
|
-
);
|
|
74
|
-
box-shadow: var(--sds-c-button-shadow, var(--sds-s-button-shadow));
|
|
75
|
-
width: var(--sds-c-button-sizing-width);
|
|
76
|
-
|
|
77
|
-
/* this line height hook is incorrect but is used in core - need to get teams to change */
|
|
78
|
-
/* stylelint-disable-next-line sds-stylelint-plugin/styling-hooks-pattern */
|
|
79
|
-
line-height: var(--sds-c-button-line-height);
|
|
80
|
-
white-space: normal;
|
|
81
|
-
user-select: none;
|
|
82
|
-
align-items: center;
|
|
83
|
-
text-decoration: var(--sds-c-button-font-decoration, none);
|
|
84
|
-
appearance: none;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
:host([data-render-mode="shadow"]) [part~='button']:hover {
|
|
88
|
-
--sds-c-button-text-color: var(
|
|
89
|
-
--sds-c-button-text-color-hover,
|
|
90
|
-
var(--sds-s-button-text-color-hover, #0176d3)
|
|
91
|
-
);
|
|
92
|
-
--sds-c-button-color-background: var(
|
|
93
|
-
--sds-c-button-color-background-hover,
|
|
94
|
-
var(--sds-s-button-color-background-hover)
|
|
95
|
-
);
|
|
96
|
-
--sds-c-button-color-border: var(--sds-c-button-color-border-hover, var(--sds-s-button-color-border-hover));
|
|
97
|
-
|
|
98
|
-
cursor: pointer;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
:host([data-render-mode="shadow"]) [part~='button']:focus {
|
|
102
|
-
--sds-c-button-color-background: var(
|
|
103
|
-
--sds-c-button-color-background-focus,
|
|
104
|
-
var(--sds-s-button-color-background-focus)
|
|
105
|
-
);
|
|
106
|
-
--sds-c-button-color-border: var(
|
|
107
|
-
--sds-c-button-color-border-focus,
|
|
108
|
-
var(--sds-s-button-color-border-focus, #0176d3)
|
|
109
|
-
);
|
|
110
|
-
--sds-c-button-text-color: var(
|
|
111
|
-
--sds-c-button-text-color-focus,
|
|
112
|
-
var(--sds-s-button-text-color-focus, #0176d3)
|
|
113
|
-
);
|
|
114
|
-
--sds-c-button-shadow: var(--sds-c-button-shadow-focus, var(--sds-s-button-shadow-focus, #0176d3 0 0 3px));
|
|
115
|
-
|
|
116
|
-
outline: 0;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
:host([data-render-mode="shadow"]) [part~='button']:active {
|
|
120
|
-
--sds-c-button-text-color: var(
|
|
121
|
-
--sds-c-button-text-color-active,
|
|
122
|
-
var(--sds-s-button-text-color-active, currentColor)
|
|
123
|
-
);
|
|
124
|
-
--sds-c-button-color-background: var(
|
|
125
|
-
--sds-c-button-color-background-active,
|
|
126
|
-
var(--sds-s-button-color-background-active)
|
|
127
|
-
);
|
|
128
|
-
--sds-c-button-color-border: var(
|
|
129
|
-
--sds-c-button-color-border-active,
|
|
130
|
-
var(--sds-s-button-color-border-active, #0176d3)
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
:host([data-render-mode="shadow"]) [part~='button']:disabled {
|
|
135
|
-
--sds-c-button-text-color: var(--sds-c-button-text-color-disabled, #939393);
|
|
136
|
-
--sds-c-button-color-background: var(--sds-c-button-color-background-disabled);
|
|
137
|
-
--sds-c-button-color-border: var(--sds-c-button-color-border-disabled);
|
|
138
|
-
|
|
139
|
-
pointer-events: none;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
:host([data-render-mode="shadow"]) [part~='button']:disabled * {
|
|
143
|
-
pointer-events: none;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
|
|
147
|
-
Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
|
|
148
|
-
|
|
149
|
-
@supports (--styling-hooks: '') {
|
|
150
|
-
/**
|
|
151
|
-
* LBC default is the 'neutral' variant.
|
|
152
|
-
*
|
|
153
|
-
* We retain the 'neutral' variant in the hook names for interoperability
|
|
154
|
-
* with SLDS light DOM blueprints which do explicitly define a 'neutral'
|
|
155
|
-
* variant which is not the default.
|
|
156
|
-
*
|
|
157
|
-
* See 'base' variant below.
|
|
158
|
-
*
|
|
159
|
-
*/
|
|
160
|
-
|
|
161
|
-
:host([data-render-mode="shadow"]) [part='button'] {
|
|
162
|
-
/* slds-icon mapping */
|
|
163
|
-
--slds-c-icon-sizing-border: 0;
|
|
164
|
-
--slds-c-icon-sizing: 0.875rem;
|
|
165
|
-
--slds-c-icon-color-foreground: var(--slds-c-button-icon-color-foreground, currentColor);
|
|
166
|
-
|
|
167
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
168
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
169
|
-
|
|
170
|
-
/* Border radius - shared */
|
|
171
|
-
--sds-c-button-radius-border-startstart: var(
|
|
172
|
-
--slds-c-button-neutral-radius-border-startstart,
|
|
173
|
-
var(
|
|
174
|
-
--slds-c-button-neutral-radius-border,
|
|
175
|
-
var(--slds-s-button-radius-border-startstart, var(--slds-s-button-radius-border))
|
|
176
|
-
)
|
|
177
|
-
);
|
|
178
|
-
--sds-c-button-radius-border-endstart: var(
|
|
179
|
-
--slds-c-button-radius-border-endstart,
|
|
180
|
-
var(
|
|
181
|
-
--slds-c-button-neutral-radius-border,
|
|
182
|
-
var(--slds-s-button-radius-border-endstart, var(--slds-s-button-radius-border))
|
|
183
|
-
)
|
|
184
|
-
);
|
|
185
|
-
--sds-c-button-radius-border-startend: var(
|
|
186
|
-
--slds-c-button-radius-border-startend,
|
|
187
|
-
var(
|
|
188
|
-
--slds-c-button-neutral-radius-border,
|
|
189
|
-
var(--slds-s-button-radius-border-startend, var(--slds-s-button-radius-border))
|
|
190
|
-
)
|
|
191
|
-
);
|
|
192
|
-
--sds-c-button-radius-border-endend: var(
|
|
193
|
-
--slds-c-button-radius-border-endend,
|
|
194
|
-
var(
|
|
195
|
-
--slds-c-button-neutral-radius-border,
|
|
196
|
-
var(--slds-s-button-radius-border-endend, var(--slds-s-button-radius-border))
|
|
197
|
-
)
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
/* Background color */
|
|
201
|
-
--sds-c-button-color-background: var(
|
|
202
|
-
--slds-c-button-neutral-color-background,
|
|
203
|
-
var(--sds-g-color-neutral-base-100, #ffffff)
|
|
204
|
-
);
|
|
205
|
-
--sds-c-button-color-background-hover: var(
|
|
206
|
-
--slds-c-button-neutral-color-background-hover,
|
|
207
|
-
var(--sds-g-color-neutral-base-95, #f3f3f3)
|
|
208
|
-
);
|
|
209
|
-
--sds-c-button-color-background-focus: var(
|
|
210
|
-
--slds-c-button-neutral-color-background-focus,
|
|
211
|
-
var(--sds-c-button-color-background-hover)
|
|
212
|
-
);
|
|
213
|
-
--sds-c-button-color-background-active: var(
|
|
214
|
-
--slds-c-button-neutral-color-background-active,
|
|
215
|
-
var(--sds-g-color-neutral-base-90, #e5e5e5)
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
/* Border color */
|
|
219
|
-
--sds-c-button-color-border: var(
|
|
220
|
-
--slds-c-button-neutral-color-border,
|
|
221
|
-
var(--sds-g-color-neutral-base-80, #c9c9c9)
|
|
222
|
-
);
|
|
223
|
-
--sds-c-button-color-border-hover: var(
|
|
224
|
-
--slds-c-button-neutral-color-border-hover,
|
|
225
|
-
var(--sds-g-color-neutral-base-80, #c9c9c9)
|
|
226
|
-
);
|
|
227
|
-
--sds-c-button-color-border-focus: var(
|
|
228
|
-
--slds-c-button-neutral-color-border-focus,
|
|
229
|
-
var(--sds-c-button-color-border-hover)
|
|
230
|
-
);
|
|
231
|
-
--sds-c-button-color-border-active: var(--slds-c-button-neutral-color-border-active);
|
|
232
|
-
|
|
233
|
-
/* Text color */
|
|
234
|
-
--sds-c-button-text-color: var(--slds-c-button-neutral-text-color, var(--sds-g-color-brand-base-40, #0b5cab));
|
|
235
|
-
--sds-c-button-text-color-hover: var(
|
|
236
|
-
--slds-c-button-neutral-text-color-hover,
|
|
237
|
-
var(--sds-g-color-brand-base-10, #001639)
|
|
238
|
-
);
|
|
239
|
-
--sds-c-button-text-color-focus: var(--slds-c-button-neutral-text-color-focus);
|
|
240
|
-
--sds-c-button-text-color-active: var(
|
|
241
|
-
--slds-c-button-neutral-text-color-active,
|
|
242
|
-
var(--sds-g-color-brand-base-10, #001639)
|
|
243
|
-
);
|
|
244
|
-
|
|
245
|
-
/* Shadow */
|
|
246
|
-
--sds-c-button-shadow: var(--slds-c-button-neutral-shadow);
|
|
247
|
-
--sds-c-button-shadow-focus: var(--slds-c-button-neutral-shadow-focus);
|
|
248
|
-
|
|
249
|
-
/* Disabled */
|
|
250
|
-
--sds-c-button-color-border-disabled: var(
|
|
251
|
-
--slds-c-button-neutral-color-border-disabled,
|
|
252
|
-
var(--sds-g-color-neutral-base-90, #e5e5e5)
|
|
253
|
-
);
|
|
254
|
-
--sds-c-button-text-color-disabled: var(--slds-c-button-neutral-text-color-disabled);
|
|
255
|
-
--sds-c-button-color-background-disabled: var(--slds-c-button-neutral-color-background-disabled);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
:host([data-render-mode="shadow"][variant='brand'])::part(button) {
|
|
259
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
260
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
261
|
-
--sds-c-button-color-background: var(
|
|
262
|
-
--slds-c-button-brand-color-background,
|
|
263
|
-
var(--sds-g-color-brand-base-50, #0176d3)
|
|
264
|
-
);
|
|
265
|
-
--sds-c-button-color-border: var(--slds-c-button-brand-color-border, var(--sds-g-color-brand-base-50, #0176d3));
|
|
266
|
-
--sds-c-button-color-border-hover: var(
|
|
267
|
-
--slds-c-button-brand-color-border-hover,
|
|
268
|
-
var(--sds-g-color-brand-base-40, #0b5cab)
|
|
269
|
-
);
|
|
270
|
-
--sds-c-button-color-border-focus: var(
|
|
271
|
-
--slds-c-button-brand-color-border-focus,
|
|
272
|
-
var(--slds-c-button-brand-color-border-hover)
|
|
273
|
-
);
|
|
274
|
-
--sds-c-button-color-border-active: var(
|
|
275
|
-
--slds-c-button-brand-color-border-active,
|
|
276
|
-
var(--slds-c-button-brand-color-background-active)
|
|
277
|
-
);
|
|
278
|
-
--sds-c-button-text-color: var(--slds-c-button-brand-text-color, var(--sds-g-color-brand-base-100, #ffffff));
|
|
279
|
-
--sds-c-button-color-background-hover: var(
|
|
280
|
-
--slds-c-button-brand-color-background-hover,
|
|
281
|
-
var(--sds-g-color-brand-base-40, #0b5cab)
|
|
282
|
-
);
|
|
283
|
-
--sds-c-button-color-background-focus: var(
|
|
284
|
-
--slds-c-button-brand-color-background-focus,
|
|
285
|
-
var(--sds-g-color-brand-base-40, #0b5cab)
|
|
286
|
-
);
|
|
287
|
-
--sds-c-button-color-background-active: var(
|
|
288
|
-
--slds-c-button-brand-color-background-active,
|
|
289
|
-
var(--sds-g-color-brand-base-10, #001639)
|
|
290
|
-
);
|
|
291
|
-
--sds-c-button-text-color-hover: var(
|
|
292
|
-
--slds-c-button-brand-text-color-hover,
|
|
293
|
-
var(--sds-g-color-brand-base-100, #ffffff)
|
|
294
|
-
);
|
|
295
|
-
--sds-c-button-text-color-active: var(
|
|
296
|
-
--slds-c-button-brand-text-color-active,
|
|
297
|
-
var(--sds-g-color-brand-base-100, #ffffff)
|
|
298
|
-
);
|
|
299
|
-
--sds-c-button-text-color-focus: var(
|
|
300
|
-
--slds-c-button-brand-text-color-focus,
|
|
301
|
-
var(--slds-c-button-brand-text-color-hover)
|
|
302
|
-
);
|
|
303
|
-
--sds-c-button-color-background-disabled: var(--sds-g-color-neutral-base-80, #c9c9c9);
|
|
304
|
-
--sds-c-button-color-border-disabled: var(--sds-c-button-color-background-disabled);
|
|
305
|
-
--sds-c-button-text-color-disabled: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
:host([data-render-mode="shadow"][variant='brand-outline'])::part(button) {
|
|
309
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
310
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
311
|
-
--sds-c-button-color-background: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
312
|
-
--sds-c-button-color-border: var(--sds-g-color-brand-base-50, #0176d3);
|
|
313
|
-
--sds-c-button-text-color: var(--sds-g-color-brand-base-40, #0b5cab);
|
|
314
|
-
--sds-c-button-color-border-hover: var(--sds-g-color-brand-base-50, #0176d3);
|
|
315
|
-
--sds-c-button-color-background-hover: var(--sds-g-color-neutral-base-95, #f3f3f3);
|
|
316
|
-
--sds-c-button-color-background-focus: var(--sds-g-color-neutral-base-95, #f3f3f3);
|
|
317
|
-
--sds-c-button-color-background-active: var(--sds-g-color-neutral-base-90, #e5e5e5);
|
|
318
|
-
--sds-c-button-text-color-hover: var(--sds-g-color-brand-base-40, #0b5cab);
|
|
319
|
-
--sds-c-button-text-color-active: var(--sds-g-color-brand-base-40, #0b5cab);
|
|
320
|
-
--sds-c-button-color-border-disabled: var(--sds-g-color-neutral-base-90, #e5e5e5);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
:host([data-render-mode="shadow"][variant='inverse'])::part(button) {
|
|
324
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
325
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
326
|
-
--sds-c-button-color-background: transparent;
|
|
327
|
-
--sds-c-button-color-background-hover: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
328
|
-
--sds-c-button-color-background-focus: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
329
|
-
--sds-c-button-color-background-active: var(--sds-g-color-neutral-base-95, #f3f3f3);
|
|
330
|
-
--sds-c-button-color-border: var(--sds-g-color-brand-base-100, #ffffff);
|
|
331
|
-
--sds-c-button-text-color: var(--sds-g-color-brand-base-100, #ffffff);
|
|
332
|
-
--sds-c-button-text-color-hover: var(--sds-g-color-brand-base-50, #0176d3);
|
|
333
|
-
--sds-c-button-text-color-active: var(--sds-g-color-brand-base-50, #0176d3);
|
|
334
|
-
--sds-c-button-color-border-hover: var(--sds-g-color-brand-base-100, #ffffff);
|
|
335
|
-
--sds-c-button-color-border-disabled: var(--sds-g-color-neutral-base-60, #939393);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
:host([data-render-mode="shadow"][variant='destructive'])::part(button) {
|
|
339
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
340
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
341
|
-
--sds-c-button-color-background: var(--sds-g-color-error-base-40, #ba0517);
|
|
342
|
-
--sds-c-button-color-border: var(--sds-g-color-error-base-40, #ba0517);
|
|
343
|
-
--sds-c-button-color-border-hover: var(--sds-g-color-error-base-40, #ba0517);
|
|
344
|
-
--sds-c-button-text-color: var(--sds-g-color-error-base-100, #ffffff);
|
|
345
|
-
--sds-c-button-color-background-hover: var(--sds-g-color-error-base-30, #8e030f);
|
|
346
|
-
--sds-c-button-color-background-focus: var(--sds-g-color-error-base-30, #8e030f);
|
|
347
|
-
--sds-c-button-color-background-active: var(--sds-g-color-error-base-20, #640103);
|
|
348
|
-
--sds-c-button-text-color-hover: var(--sds-g-color-error-base-100, #ffffff);
|
|
349
|
-
--sds-c-button-text-color-active: var(--sds-g-color-error-base-100, #ffffff);
|
|
350
|
-
--sds-c-button-color-background-disabled: var(--sds-g-color-neutral-base-80, #c9c9c9);
|
|
351
|
-
--sds-c-button-color-border-disabled: var(--sds-c-button-color-background-disabled);
|
|
352
|
-
--sds-c-button-text-color-disabled: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
:host([data-render-mode="shadow"][variant='success'])::part(button) {
|
|
356
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
357
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
358
|
-
--sds-c-button-color-background: var(--sds-g-color-success-base-50, #2e844a);
|
|
359
|
-
--sds-c-button-color-border: var(--sds-g-color-success-base-50, #2e844a);
|
|
360
|
-
--sds-c-button-color-border-hover: var(--sds-g-color-success-base-50, #2e844a);
|
|
361
|
-
--sds-c-button-text-color: var(--sds-g-color-success-base-100, #ffffff);
|
|
362
|
-
--sds-c-button-color-background-hover: var(--sds-g-color-success-base-40, #22683e);
|
|
363
|
-
--sds-c-button-color-background-focus: var(--sds-g-color-success-base-40, #22683e);
|
|
364
|
-
--sds-c-button-color-background-active: var(--sds-g-color-success-base-30, #194e31);
|
|
365
|
-
--sds-c-button-text-color-hover: var(--sds-g-color-success-base-100, #ffffff);
|
|
366
|
-
--sds-c-button-text-color-active: var(--sds-g-color-success-base-100, #ffffff);
|
|
367
|
-
--sds-c-button-color-background-disabled: var(--sds-g-color-neutral-base-80, #c9c9c9);
|
|
368
|
-
--sds-c-button-color-border-disabled: var(--sds-c-button-color-background-disabled);
|
|
369
|
-
--sds-c-button-text-color-disabled: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
:host([data-render-mode="shadow"][variant='destructive-text'])::part(button) {
|
|
373
|
-
--sds-c-button-line-height: var(--slds-s-button-font-lineheight, 1.875rem);
|
|
374
|
-
--sds-c-button-spacing-inline: var(--slds-s-button-spacing-inline, 1rem);
|
|
375
|
-
--sds-c-button-color-background: var(--sds-g-color-neutral-base-100, #ffffff);
|
|
376
|
-
--sds-c-button-color-border: var(--sds-g-color-neutral-base-80, #c9c9c9);
|
|
377
|
-
--sds-c-button-text-color: var(--sds-g-color-error-base-50, #ea001e);
|
|
378
|
-
--sds-c-button-color-border-hover: var(--sds-g-color-neutral-base-80, #c9c9c9);
|
|
379
|
-
--sds-c-button-color-background-hover: var(--sds-g-color-neutral-base-95, #f3f3f3);
|
|
380
|
-
--sds-c-button-color-background-focus: var(--sds-g-color-neutral-base-95, #f3f3f3);
|
|
381
|
-
--sds-c-button-color-background-active: var(--sds-g-color-neutral-base-90, #e5e5e5);
|
|
382
|
-
--sds-c-button-text-color-hover: var(--sds-g-color-error-base-40, #ba0517);
|
|
383
|
-
--sds-c-button-text-color-active: var(--sds-g-color-error-base-40, #ba0517);
|
|
384
|
-
--sds-c-button-color-border-disabled: var(--sds-g-color-neutral-base-90, #e5e5e5);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
* 'base' variant is not the default in LBC. It is the default in the light
|
|
389
|
-
* DOM version of SLDS.
|
|
390
|
-
*
|
|
391
|
-
* So even though this is a non-default variant in this context, the hooks
|
|
392
|
-
* for this variant are written as the default for interoperability with
|
|
393
|
-
* SLDS light DOM.
|
|
394
|
-
*
|
|
395
|
-
* E.g. --slds-c-button-color-background
|
|
396
|
-
*/
|
|
397
|
-
:host([data-render-mode="shadow"][variant='base'])::part(button),:host([data-render-mode="shadow"][variant='text'])::part(button) {
|
|
398
|
-
--sds-c-button-spacing-inline: 0.25rem;
|
|
399
|
-
--sds-c-button-text-color: var(--sds-g-color-brand-base-40, #0b5cab);
|
|
400
|
-
--sds-c-button-color-border: transparent;
|
|
401
|
-
--sds-c-button-color-border-hover: transparent;
|
|
402
|
-
--sds-c-button-color-border-focus: transparent;
|
|
403
|
-
--sds-c-button-color-background-hover: transparent;
|
|
404
|
-
--sds-c-button-color-background-active: transparent;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
:host([data-render-mode="shadow"][stretch])::part(button) {
|
|
408
|
-
--sds-c-button-width: 100%;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/* center button except on base/text variant */
|
|
412
|
-
:host(:not([variant='base'], [variant='text']))::part(button) {
|
|
413
|
-
justify-content: center;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
:host([data-render-mode="shadow"])::part(start) {
|
|
417
|
-
display: inline-flex;
|
|
418
|
-
padding-inline-end: var(--sds-g-spacing-2, 0.5rem);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
:host([data-render-mode="shadow"])::part(end) {
|
|
422
|
-
display: inline-flex;
|
|
423
|
-
padding-inline-start: var(--sds-g-spacing-2, 0.5rem);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
@@ -1,197 +0,0 @@
|
|
|
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
|
-
* Establish independent formatting context, we don't want ancestor rules affecting our layout.
|
|
7
|
-
* This assumes there will not be a direct, child inline-level element.
|
|
8
|
-
* See https://www.w3.org/TR/css-display-3/#establish-an-independent-formatting-context
|
|
9
|
-
*/
|
|
10
|
-
display: inline-flex;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
:host([data-render-mode="shadow"]) [part~='boundary'] {
|
|
14
|
-
padding-block-start: var(--sds-c-icon-spacing-block-start, var(--sds-c-icon-spacing));
|
|
15
|
-
padding-block-end: var(--sds-c-icon-spacing-block-end, var(--sds-c-icon-spacing));
|
|
16
|
-
padding-inline-start: var(--sds-c-icon-spacing-inline-start, var(--sds-c-icon-spacing));
|
|
17
|
-
padding-inline-end: var(--sds-c-icon-spacing-inline-end, var(--sds-c-icon-spacing));
|
|
18
|
-
border-radius: var(--sds-c-icon-radius-border);
|
|
19
|
-
border-width: var(--sds-c-icon-sizing-border, 1px);
|
|
20
|
-
border-style: solid;
|
|
21
|
-
border-color: var(--sds-c-icon-color-border, transparent);
|
|
22
|
-
background-color: var(--sds-c-icon-color-background);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
:host([data-render-mode="shadow"]) [part~='icon'] {
|
|
26
|
-
display: flex; /* See line #5 */
|
|
27
|
-
height: var(--sds-c-icon-sizing-height, var(--sds-c-icon-sizing));
|
|
28
|
-
width: var(--sds-c-icon-sizing-width, var(--sds-c-icon-sizing));
|
|
29
|
-
color: var(--sds-c-icon-color-foreground);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Normalize svgs and control width/height with Styling Hooks
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
:host([data-render-mode="shadow"]) svg {
|
|
37
|
-
width: 100%;
|
|
38
|
-
height: 100%;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @Note: Static fallbacks are in place until SLDS adopts SDS. Without static
|
|
43
|
-
* fallbacks, styles will regress due to invalid CSS variables from
|
|
44
|
-
* missing SLDS shared and globals.
|
|
45
|
-
*
|
|
46
|
-
* Additionally, LBC are currently relying on 'part' attributes to
|
|
47
|
-
* receive styling. Authoring styles that rely on slots is not recommended.
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
|
-
@supports (--styling-hooks: '') {
|
|
51
|
-
:host([data-render-mode="shadow"][size~='xxx-small']) {
|
|
52
|
-
--slds-c-icon-sizing: 0.5rem;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
:host([data-render-mode="shadow"][size~='xx-small']) {
|
|
56
|
-
--slds-c-icon-sizing: 0.875rem;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
:host([data-render-mode="shadow"][size~='x-small']) {
|
|
60
|
-
--slds-c-icon-sizing: 1rem;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
:host([data-render-mode="shadow"][size~='small']) {
|
|
64
|
-
--slds-c-icon-sizing: 1.5rem;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
:host([data-render-mode="shadow"][size~='large']) {
|
|
68
|
-
--slds-c-icon-sizing: 3rem;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
:host([data-render-mode="shadow"][variant~='warning']) {
|
|
72
|
-
--slds-c-icon-color-foreground: var(--sds-g-color-warning-base-4);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
:host([data-render-mode="shadow"][variant~='success']) {
|
|
76
|
-
--slds-c-icon-color-foreground: var(--sds-g-color-success-base-contrast-1);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
:host([data-render-mode="shadow"][variant~='error']) {
|
|
80
|
-
--slds-c-icon-color-foreground: var(--sds-g-color-error-base-contrast-1);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
:host([data-render-mode="shadow"][variant~='light']) {
|
|
84
|
-
--slds-c-icon-color-foreground: var(--sds-g-color-neutral-base-contrast-1);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
:host([data-render-mode="shadow"]) [part~='boundary'] {
|
|
88
|
-
/* --sds-c-icon-color-background: var(--slds-c-icon-color-background); */
|
|
89
|
-
--sds-c-icon-radius-border: var(--slds-c-icon-radius-border, var(--sds-g-radius-border-2, 0.25rem));
|
|
90
|
-
--sds-c-icon-sizing-border: var(--slds-c-icon-sizing-border);
|
|
91
|
-
--sds-c-icon-color-border: var(--slds-c-icon-color-border);
|
|
92
|
-
--sds-c-icon-spacing-block-start: var(
|
|
93
|
-
--slds-c-icon-spacing-block-start,
|
|
94
|
-
var(--slds-c-icon-spacing-block)
|
|
95
|
-
);
|
|
96
|
-
--sds-c-icon-spacing-block-end: var(--slds-c-icon-spacing-block-end, var(--slds-c-icon-spacing-block));
|
|
97
|
-
--sds-c-icon-spacing-inline-start: var(
|
|
98
|
-
--slds-c-icon-spacing-inline-start,
|
|
99
|
-
var(--slds-c-icon-spacing-inline)
|
|
100
|
-
);
|
|
101
|
-
--sds-c-icon-spacing-inline-end: var(--slds-c-icon-spacing-inline-end, var(--slds-c-icon-spacing-inline));
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* There's a divergence in LBC that we have to support here: LBC splits their
|
|
105
|
-
* icon implementation into two components: lightning-icon and lightning-primitive-icon.
|
|
106
|
-
* slds-icon is consumed within both with no issues except that the presence of an
|
|
107
|
-
* additional custom element (primitive-icon) creates an unexpected inline-level
|
|
108
|
-
* element and breaks our formatting context. tl;dr, we have to reset the formatting
|
|
109
|
-
* context of the boundary or else we'll inherit line-height from an ancestor and
|
|
110
|
-
* get visual regressions.
|
|
111
|
-
*
|
|
112
|
-
* If lightning-icon is refactored into a single component, this line can be removed.
|
|
113
|
-
*/
|
|
114
|
-
display: inline-flex;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
:host([data-render-mode="shadow"]) [part~='icon'] {
|
|
118
|
-
--sds-c-icon-color-foreground: var(--slds-c-icon-color-foreground, var(--sds-g-color-neutral-base-1));
|
|
119
|
-
--sds-c-icon-sizing-height: var(--slds-c-icon-sizing-height, var(--slds-c-icon-sizing, 2rem));
|
|
120
|
-
--sds-c-icon-sizing-width: var(--slds-c-icon-sizing-width, var(--slds-c-icon-sizing, 2rem));
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
:host([data-render-mode="shadow"][icon-name*='action']) {
|
|
124
|
-
--slds-c-icon-spacing-block: 0.5rem;
|
|
125
|
-
--slds-c-icon-spacing-inline: 0.5rem;
|
|
126
|
-
--slds-c-icon-radius-border: 50%;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* P R I V A T E
|
|
132
|
-
*
|
|
133
|
-
* The following styling is implemented by classes within the shadow DOM.
|
|
134
|
-
* They're expected to be private to the component and not for external use.
|
|
135
|
-
*
|
|
136
|
-
* See notes for each class for the rationale behind their inclusion.
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Utility icons traditionally added a class to change the default foreground
|
|
141
|
-
* color (white) to a grey. This was done implicitly whereas other color changes
|
|
142
|
-
* were done explicitly through the 'variant' attribute. So this is an outlier
|
|
143
|
-
* to the overall pattern. Leaving it as-is since an update would require an
|
|
144
|
-
* API change or more investigating.
|
|
145
|
-
*
|
|
146
|
-
* This is a hybrid patch between synthetic and native shadow. The ideal final
|
|
147
|
-
* outcome is the removal of this class and the default utility styling would
|
|
148
|
-
* be implemented through an attribute or some other class-less solution.
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
:host([data-render-mode="shadow"]) .slds-icon-text-default {
|
|
152
|
-
/*! @css-var-fallback fill */
|
|
153
|
-
--slds-c-icon-color-foreground: var(
|
|
154
|
-
--slds-c-icon-color-foreground-default,
|
|
155
|
-
var(--sds-c-icon-color-foreground-default, #706e6b)
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
:host([data-render-mode="shadow"]) .slds-icon-text-default.slds-is-disabled {
|
|
160
|
-
fill: #dddbda;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* A temporarily baked-in utility class until SLDS gets a proper utility package.
|
|
165
|
-
*
|
|
166
|
-
* This is a hybrid patch between synthetic and native shadow. The ideal final
|
|
167
|
-
* outcome is the removal of this class and replacing the class with the SLDS
|
|
168
|
-
* utility package solution.
|
|
169
|
-
*/
|
|
170
|
-
|
|
171
|
-
:host([data-render-mode="shadow"]) .slds-assistive-text {
|
|
172
|
-
position: absolute !important;
|
|
173
|
-
margin: -1px !important;
|
|
174
|
-
border: 0 !important;
|
|
175
|
-
padding: 0 !important;
|
|
176
|
-
width: 1px !important;
|
|
177
|
-
height: 1px !important;
|
|
178
|
-
overflow: hidden !important;
|
|
179
|
-
clip: rect(0 0 0 0) !important;
|
|
180
|
-
text-transform: none !important;
|
|
181
|
-
white-space: nowrap !important;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* For the initial alpha version, we're hardcoding in the various unique icon styles.
|
|
186
|
-
*
|
|
187
|
-
* Next version, we want to dynamically generate these from legacy SLDS with the
|
|
188
|
-
* following design pattern:
|
|
189
|
-
*
|
|
190
|
-
* [type="action"][icon-name="approval"] {
|
|
191
|
-
* --sds-c-icon-color-background: var(--slds-c-icon-color-background, #111);
|
|
192
|
-
* }
|
|
193
|
-
*/
|
|
194
|
-
|
|
195
|
-
:host([data-render-mode="shadow"]) .slds-icon_disabled {
|
|
196
|
-
background-color: currentColor;
|
|
197
|
-
}
|