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.
Files changed (34) hide show
  1. package/package.json +1 -1
  2. package/scopedImports/@salesforce-internal-core.appVersion.js +1 -1
  3. package/scopedImports/@salesforce-label-LightningLookup.messageWhenMissingInformation.js +1 -1
  4. package/src/lightning/button/button.html +3 -5
  5. package/src/lightning/button/button.js +0 -33
  6. package/src/lightning/buttonGroup/buttonGroup.css +2 -2
  7. package/src/lightning/buttonIcon/buttonIcon.css +2 -2
  8. package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -2
  9. package/src/lightning/buttonMenu/buttonMenu.css +2 -2
  10. package/src/lightning/buttonMenu/buttonMenu.html +2 -5
  11. package/src/lightning/buttonMenu/buttonMenu.js +1 -4
  12. package/src/lightning/buttonStateful/buttonStateful.css +2 -2
  13. package/src/lightning/card/card.css +2 -2
  14. package/src/lightning/carousel/carousel.html +1 -1
  15. package/src/lightning/colorPickerCustom/colorPickerCustom.css +2 -2
  16. package/src/lightning/colorPickerPanel/colorPickerPanel.css +2 -2
  17. package/src/lightning/dualListbox/dualListbox.css +2 -2
  18. package/src/lightning/helptext/helptext.css +2 -2
  19. package/src/lightning/icon/icon.css +2 -2
  20. package/src/lightning/icon/icon.js +0 -1
  21. package/src/lightning/input/input.css +2 -2
  22. package/src/lightning/primitiveBubble/primitiveBubble.css +2 -2
  23. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +2 -2
  24. package/src/lightning/primitiveIcon/primitiveIcon.css +0 -3
  25. package/src/lightning/primitiveIcon/primitiveIcon.html +1 -1
  26. package/src/lightning/primitiveIcon/primitiveIcon.js +11 -19
  27. package/src/lightning/radioGroup/radioGroup.css +1 -1
  28. package/src/lightning/spinner/spinner.css +2 -2
  29. package/src/lightning/tooltipLibrary/tooltipLibrary.js +20 -28
  30. package/src/lightning/utilsPrivate/url.js +16 -1
  31. package/src/lightning/ariaObserver/__component__/ariaObserver.spec.js +0 -112
  32. package/src/lightning/button/button.css +0 -2
  33. package/src/lightning/button/button.slds.css +0 -425
  34. package/src/lightning/primitiveIcon/icon.slds.css +0 -197
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lightning-base-components",
3
- "version": "1.16.8-alpha",
3
+ "version": "1.17.1-alpha",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "external",
@@ -1 +1 @@
1
- export default '240';
1
+ export default '242';
@@ -1 +1 @@
1
- export default 'This lookup field requires more data. Your Salesforce admin can help with that.';
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 part="start" icon-name={iconName} svg-class={computedIconClass} variant="bare"></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 part="end" icon-name={iconName} svg-class={computedIconClass} variant="bare"></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 class="slds-dropdown__list slds-dropdown_length-with-icon-10"
44
- id="lgt-button-menu-dropdown"
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
- // eslint-disable-next-line @lwc/lwc/no-async-operation
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'; */
@@ -30,7 +30,7 @@
30
30
  >
31
31
  <a
32
32
  id={paginationItem.id}
33
- href="#"
33
+ href="about:blank"
34
34
  class={paginationItem.className}
35
35
  role="tab"
36
36
  tabindex={paginationItem.tabIndex}
@@ -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,5 +1,5 @@
1
- @import 'lightning/sldsCommon';
2
- @import './color-picker-panel.slds.css';
1
+ /* @import 'lightning/sldsCommon';
2
+ @import './color-picker-panel.slds.css'; */
3
3
 
4
4
  /* Fix for footer button centering issue, for details see: W-11543875
5
5
  *
@@ -1,5 +1,5 @@
1
- @import 'lightning/sldsCommon';
2
- @import './listbox.slds.css';
1
+ /* @import 'lightning/sldsCommon';
2
+ @import './listbox.slds.css'; */
3
3
 
4
4
  :host {
5
5
  display: block;
@@ -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"; */
@@ -9,7 +9,6 @@ import {
9
9
  getCategory,
10
10
  isValidName,
11
11
  } from 'lightning/iconUtils';
12
-
13
12
  import { normalizeVariant } from './util';
14
13
 
15
14
  /**
@@ -1,6 +1,6 @@
1
- @import 'lightning/sldsCommon';
1
+ /* @import 'lightning/sldsCommon';
2
2
  @import './input-text.slds.css';
3
- @import './input-checkbox.slds.css';
3
+ @import './input-checkbox.slds.css'; */
4
4
 
5
5
  :host {
6
6
  display: block;
@@ -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,6 +1,3 @@
1
- @import 'lightning/sldsCommon';
2
- @import './icon.slds.css';
3
-
4
1
  /*
5
2
  "Temporary" fix for Edge SVG quirk. We can remove this when it is fixed either
6
3
  at the SLDS level or at the browser level.
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <svg class={computedClass} focusable="false" data-key={name} aria-hidden="true" part="icon">
2
+ <svg class={computedClass} focusable="false" data-key={name} aria-hidden="true">
3
3
  <use xlink:href={href}></use>
4
4
  </svg>
5
5
  </template>
@@ -1,16 +1,14 @@
1
- import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
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 LightningShadowBaseClass {
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
- normalizeSize(val) {
124
- return normalize(val, {
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
- normalizeVariant(val) {
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(val, {
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 (this._variant !== 'bare') {
139
+ if (normalizedVariant !== 'bare') {
148
140
  classes.add('slds-icon');
149
141
  }
150
142
 
151
- switch (this._variant) {
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 (this._size !== 'medium') {
173
- classes.add(`slds-icon_${this._size}`);
164
+ if (normalizedSize !== 'medium') {
165
+ classes.add(`slds-icon_${normalizedSize}`);
174
166
  }
175
167
 
176
168
  return classes.toString();
@@ -1,4 +1,4 @@
1
- @import './input-radio-group.slds.css';
1
+ /* @import './input-radio-group.slds.css'; */
2
2
 
3
3
  :host {
4
4
  display: block;
@@ -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 (this._visible) {
184
- if (
185
- (event.type === 'mouseleave' &&
186
- event.clientX &&
187
- event.clientY) ||
188
- event.key === 'Escape'
189
- ) {
190
- // In any chance, if mouseleave is caused by tooltip itself, it would means
191
- // tooltip cover the target which mostly caused by dynamic resize of tooltip by CSS or JS.
192
- try {
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
- } catch (ex) {
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
- return url.match(IS_SCRIPT_OR_DATA) ? FALLBACK_URL : url;
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,2 +0,0 @@
1
- @import 'lightning/sldsCommon';
2
- @import './button.slds.css';
@@ -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
- }