lightning-base-components 1.18.1-alpha → 1.18.2-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 (215) hide show
  1. package/metadata/raptor.json +5 -0
  2. package/package.json +43 -1
  3. package/scopedImports/@salesforce-internal-core.appVersion.js +1 -1
  4. package/src/lightning/accordion/accordion.css +12 -0
  5. package/src/lightning/accordion/accordion.html +3 -1
  6. package/src/lightning/accordion/accordion.js +4 -2
  7. package/src/lightning/accordion/accordion.slds.css +671 -0
  8. package/src/lightning/accordionSection/accordion-section.slds.css +647 -0
  9. package/src/lightning/accordionSection/accordionSection.css +14 -0
  10. package/src/lightning/accordionSection/accordionSection.html +23 -19
  11. package/src/lightning/accordionSection/accordionSection.js +29 -2
  12. package/src/lightning/ariaObserver/__docs__/ariaObserver.md +21 -9
  13. package/src/lightning/ariaObserver/ariaObserver.js +185 -154
  14. package/src/lightning/ariaObserver/polyfill.js +639 -0
  15. package/src/lightning/avatar/avatar.css +2 -0
  16. package/src/lightning/avatar/avatar.html +2 -0
  17. package/src/lightning/avatar/avatar.js +18 -15
  18. package/src/lightning/avatar/avatar.slds.css +272 -0
  19. package/src/lightning/baseCombobox/base-combobox.slds.css +1585 -0
  20. package/src/lightning/baseCombobox/baseCombobox.css +11 -1
  21. package/src/lightning/baseCombobox/baseCombobox.html +154 -146
  22. package/src/lightning/baseCombobox/baseCombobox.js +82 -46
  23. package/src/lightning/baseCombobox/spinner.slds.css +438 -0
  24. package/src/lightning/baseComboboxItem/baseComboboxItem.js +4 -2
  25. package/src/lightning/baseComboboxItem/inline.css +2 -0
  26. package/src/lightning/breadcrumb/breadcrumb.css +2 -2
  27. package/src/lightning/breadcrumb/breadcrumb.js +4 -2
  28. package/src/lightning/breadcrumb/breadcrumb.slds.css +2 -7
  29. package/src/lightning/breadcrumbs/breadcrumbs.css +2 -2
  30. package/src/lightning/breadcrumbs/breadcrumbs.js +3 -2
  31. package/src/lightning/breadcrumbs/breadcrumbs.slds.css +7 -1
  32. package/src/lightning/button/__examples__/inverse/inverse.css +8 -0
  33. package/src/lightning/button/__examples__/inverse/inverse.html +3 -2
  34. package/src/lightning/button/button.css +2 -0
  35. package/src/lightning/button/button.html +4 -2
  36. package/src/lightning/button/button.js +21 -0
  37. package/src/lightning/button/button.slds.css +527 -0
  38. package/src/lightning/buttonGroup/buttonGroup.css +2 -2
  39. package/src/lightning/buttonGroup/buttonGroup.js +3 -2
  40. package/src/lightning/buttonIcon/button-icon.slds.css +215 -453
  41. package/src/lightning/buttonIcon/buttonIcon.css +2 -2
  42. package/src/lightning/buttonIcon/buttonIcon.js +4 -0
  43. package/src/lightning/buttonIconStateful/button-icon-stateful.slds.css +215 -453
  44. package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -2
  45. package/src/lightning/buttonMenu/{dropdown.slds.css → button-menu.slds.css} +853 -217
  46. package/src/lightning/buttonMenu/buttonMenu.css +2 -2
  47. package/src/lightning/buttonMenu/buttonMenu.html +2 -2
  48. package/src/lightning/buttonMenu/buttonMenu.js +10 -14
  49. package/src/lightning/buttonStateful/button-stateful.slds.css +225 -457
  50. package/src/lightning/buttonStateful/buttonStateful.css +2 -2
  51. package/src/lightning/buttonStateful/buttonStateful.js +3 -2
  52. package/src/lightning/calendar/__examples__/basic/basic.html +7 -0
  53. package/src/lightning/calendar/__examples__/basic/basic.js +3 -0
  54. package/src/lightning/calendar/calendar.css +3 -0
  55. package/src/lightning/calendar/calendar.html +12 -9
  56. package/src/lightning/calendar/calendar.js +15 -1
  57. package/src/lightning/calendar/calendar.slds.css +2048 -0
  58. package/src/lightning/card/card.css +2 -2
  59. package/src/lightning/card/card.js +3 -2
  60. package/src/lightning/card/card.slds.css +141 -88
  61. package/src/lightning/colorPickerCustom/colorPickerCustom.css +2 -2
  62. package/src/lightning/colorPickerCustom/colorPickerCustom.js +3 -2
  63. package/src/lightning/colorPickerPanel/color-picker-panel.slds.css +11 -38
  64. package/src/lightning/colorPickerPanel/colorPickerPanel.css +3 -2
  65. package/src/lightning/colorPickerPanel/colorPickerPanel.js +4 -2
  66. package/src/lightning/colorPickerPanel/popover.slds.css +121 -0
  67. package/src/lightning/combobox/combobox.css +4 -0
  68. package/src/lightning/combobox/combobox.html +31 -29
  69. package/src/lightning/combobox/combobox.js +21 -4
  70. package/src/lightning/combobox/combobox.slds.css +13 -0
  71. package/src/lightning/combobox/form-element.slds.css +281 -0
  72. package/src/lightning/configProvider/defaultConfig.js +2 -1
  73. package/src/lightning/datepicker/datepicker.css +3 -0
  74. package/src/lightning/datepicker/datepicker.html +7 -4
  75. package/src/lightning/datepicker/datepicker.js +73 -19
  76. package/src/lightning/datepicker/form-element.slds.css +281 -0
  77. package/src/lightning/datepicker/input-text.slds.css +398 -0
  78. package/src/lightning/datetimepicker/datetimepicker.css +3 -0
  79. package/src/lightning/datetimepicker/datetimepicker.html +9 -3
  80. package/src/lightning/datetimepicker/datetimepicker.js +39 -35
  81. package/src/lightning/datetimepicker/form-element.slds.css +281 -0
  82. package/src/lightning/datetimepicker/input-text.slds.css +398 -0
  83. package/src/lightning/dualListbox/dualListbox.css +2 -2
  84. package/src/lightning/dualListbox/dualListbox.html +3 -3
  85. package/src/lightning/dualListbox/dualListbox.js +31 -6
  86. package/src/lightning/dualListbox/form-element.slds.css +83 -34
  87. package/src/lightning/dualListbox/keyboard.js +20 -1
  88. package/src/lightning/dynamicIcon/dynamicIcon.js +3 -2
  89. package/src/lightning/dynamicIcon/ellie.css +1 -1
  90. package/src/lightning/dynamicIcon/eq.css +1 -1
  91. package/src/lightning/dynamicIcon/score.css +1 -1
  92. package/src/lightning/dynamicIcon/strength.css +1 -1
  93. package/src/lightning/dynamicIcon/trend.css +1 -1
  94. package/src/lightning/dynamicIcon/waffle.css +1 -1
  95. package/src/lightning/formattedRichText/linkify.js +2 -2
  96. package/src/lightning/helptext/form-element.slds.css +83 -34
  97. package/src/lightning/helptext/help-text.slds.css +215 -453
  98. package/src/lightning/helptext/helptext.css +2 -2
  99. package/src/lightning/helptext/helptext.js +3 -2
  100. package/src/lightning/i18nCldrOptions/README.md +5 -0
  101. package/src/lightning/i18nService/README.md +5 -0
  102. package/src/lightning/icon/icon.css +2 -2
  103. package/src/lightning/icon/icon.js +16 -2
  104. package/src/lightning/icon/icon.slds.css +29 -17
  105. package/src/lightning/icon/iconColors.js +1 -0
  106. package/src/lightning/input/__examples__/text/text.html +0 -1
  107. package/src/lightning/input/form-element.slds.css +281 -0
  108. package/src/lightning/input/input-checkbox.slds.css +3 -12
  109. package/src/lightning/input/input-text.slds.css +239 -128
  110. package/src/lightning/input/input.css +2 -1
  111. package/src/lightning/input/input.html +8 -8
  112. package/src/lightning/input/input.js +107 -73
  113. package/src/lightning/internationalizationLibrary/README.md +24 -0
  114. package/src/lightning/internationalizationLibrary/utils.js +4 -1
  115. package/src/lightning/layout/__docs__/layout.md +1 -1
  116. package/src/lightning/layout/__examples__/simple/simple.css +1 -1
  117. package/src/lightning/layout/layout.css +5 -1
  118. package/src/lightning/layout/layout.js +4 -2
  119. package/src/lightning/layoutItem/__examples__/alignmentBump/alignmentBump.css +1 -1
  120. package/src/lightning/layoutItem/__examples__/sizePerDevice/sizePerDevice.css +0 -1
  121. package/src/lightning/layoutItem/layoutItem.css +5 -0
  122. package/src/lightning/layoutItem/layoutItem.js +4 -2
  123. package/src/lightning/menuDivider/menu-divider.slds.css +15 -0
  124. package/src/lightning/menuDivider/menuDivider.css +3 -0
  125. package/src/lightning/menuDivider/menuDivider.html +1 -1
  126. package/src/lightning/menuDivider/menuDivider.js +4 -2
  127. package/src/lightning/menuItem/menu-item.slds.css +140 -0
  128. package/src/lightning/menuItem/menuItem.css +3 -0
  129. package/src/lightning/menuItem/menuItem.html +43 -41
  130. package/src/lightning/menuItem/menuItem.js +4 -4
  131. package/src/lightning/menuSubheader/menu-subheader.slds.css +22 -0
  132. package/src/lightning/menuSubheader/menuSubheader.css +3 -0
  133. package/src/lightning/menuSubheader/menuSubheader.html +3 -1
  134. package/src/lightning/menuSubheader/menuSubheader.js +4 -6
  135. package/src/lightning/modal/__docs__/modal.md +3 -1
  136. package/src/lightning/modal/__modalUtils__/modalContainerTestConstants.js +267 -0
  137. package/src/lightning/modal/__modalUtils__/modalContainerTestMethods.js +1165 -0
  138. package/src/lightning/modal/__modalUtils__/modalContainerTestMockData.js +131 -0
  139. package/src/lightning/modal/modal.js +1 -1
  140. package/src/lightning/pill/avatar.slds.css +272 -0
  141. package/src/lightning/pill/link.css +3 -0
  142. package/src/lightning/pill/link.html +1 -1
  143. package/src/lightning/pill/pill.js +29 -9
  144. package/src/lightning/pill/pill.slds.css +168 -0
  145. package/src/lightning/pill/plain.css +3 -0
  146. package/src/lightning/pill/plain.html +1 -1
  147. package/src/lightning/pill/plainLink.css +3 -0
  148. package/src/lightning/pill/plainLink.html +1 -1
  149. package/src/lightning/pillContainer/barePillContainer.css +3 -0
  150. package/src/lightning/pillContainer/barePillContainer.html +1 -2
  151. package/src/lightning/pillContainer/listbox.slds.css +267 -0
  152. package/src/lightning/pillContainer/pill-container.slds.css +22 -0
  153. package/src/lightning/pillContainer/pill.slds.css +168 -0
  154. package/src/lightning/pillContainer/pillContainer.js +7 -3
  155. package/src/lightning/pillContainer/standardPillContainer.css +4 -0
  156. package/src/lightning/pillContainer/standardPillContainer.html +2 -2
  157. package/src/lightning/popup/popover.slds.css +119 -119
  158. package/src/lightning/popup/popup.css +1 -2
  159. package/src/lightning/popup/popup.js +3 -2
  160. package/src/lightning/positionLibrary/elementProxy.js +7 -2
  161. package/src/lightning/positionLibrary/util.js +8 -0
  162. package/src/lightning/primitiveBubble/primitiveBubble.css +2 -2
  163. package/src/lightning/primitiveBubble/primitiveBubble.js +4 -2
  164. package/src/lightning/primitiveButton/primitiveButton.js +5 -4
  165. package/src/lightning/primitiveCellFactory/cellWithStandardLayout.html +29 -21
  166. package/src/lightning/primitiveCellFactory/primitiveCellFactory.js +4 -0
  167. package/src/lightning/primitiveColorpickerButton/color-picker-button.slds.css +31 -19
  168. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +2 -2
  169. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.js +5 -3
  170. package/src/lightning/primitiveIcon/icon.slds.css +209 -0
  171. package/src/lightning/primitiveIcon/primitiveIcon.css +2 -1
  172. package/src/lightning/primitiveIcon/primitiveIcon.html +1 -1
  173. package/src/lightning/primitiveIcon/primitiveIcon.js +18 -11
  174. package/src/lightning/progressStep/progressStep.js +10 -13
  175. package/src/lightning/radioGroup/radioGroup.css +2 -1
  176. package/src/lightning/radioGroup/radioGroup.js +4 -2
  177. package/src/lightning/select/form-element.slds.css +83 -34
  178. package/src/lightning/select/select.css +2 -2
  179. package/src/lightning/select/select.js +4 -2
  180. package/src/lightning/select/select.slds.css +86 -34
  181. package/src/lightning/sldsCommon/sldsCommon.css +135 -75
  182. package/src/lightning/spinner/spinner.css +2 -2
  183. package/src/lightning/spinner/spinner.js +4 -2
  184. package/src/lightning/tabBar/tab-bar.slds.css +334 -0
  185. package/src/lightning/tabBar/tabBar.css +2 -0
  186. package/src/lightning/tabBar/tabBar.html +4 -3
  187. package/src/lightning/tabBar/tabBar.js +30 -3
  188. package/src/lightning/tabset/tabset.html +5 -4
  189. package/src/lightning/tabset/tabset.js +29 -11
  190. package/src/lightning/timepicker/form-element.slds.css +281 -0
  191. package/src/lightning/timepicker/timepicker.css +3 -0
  192. package/src/lightning/timepicker/timepicker.html +5 -1
  193. package/src/lightning/timepicker/timepicker.js +18 -15
  194. package/src/lightning/timepicker/timepicker.slds.css +18 -0
  195. package/src/lightning/tooltipLibrary/tooltipLibrary.js +21 -19
  196. package/src/lightning/utilsPrivate/browser.js +5 -3
  197. package/src/lightning/utilsPrivate/os.js +6 -4
  198. package/src/lightning/utilsPrivate/ssr.js +4 -0
  199. package/src/lightning/utilsPrivate/utilsPrivate.js +2 -0
  200. package/src/lightning/verticalNavigation/verticalNavigation.css +2 -1
  201. package/src/lightning/verticalNavigation/verticalNavigation.js +3 -2
  202. package/src/lightning/verticalNavigationSection/verticalNavigationSection.css +2 -1
  203. package/src/lightning/verticalNavigationSection/verticalNavigationSection.js +3 -2
  204. package/src/lightning/accordion/__perf__DISABLED/accordion-perf-utils.js +0 -76
  205. package/src/lightning/accordion/__perf__DISABLED/accordion10Multiple25SectionEach.perf.js +0 -57
  206. package/src/lightning/accordion/__perf__DISABLED/accordion10Simple25SectionEach.perf.js +0 -37
  207. package/src/lightning/accordion/__perf__DISABLED/accordionMultiple50Section.perf.js +0 -45
  208. package/src/lightning/accordion/__perf__DISABLED/accordionSimple50Section.perf.js +0 -35
  209. package/src/lightning/accordion/__perf__DISABLED/container/container.html +0 -15
  210. package/src/lightning/accordion/__perf__DISABLED/container/container.js +0 -7
  211. package/src/lightning/positionLibrary/__component__/positionLibraryBounding.spec.js +0 -319
  212. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.css +0 -16
  213. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.html +0 -36
  214. package/src/lightning/positionLibrary/__component__/x/bounding/bounding.js +0 -122
  215. /package/src/lightning/{baseCombobox → baseComboboxItem}/listbox.slds.css +0 -0
@@ -1,50 +1,52 @@
1
1
  <template>
2
- <a href={computedHref}
3
- target={_target}
4
- role={computedRole}
5
- tabindex={computedTabIndex}
6
- accesskey={computedAccessKey}
7
- aria-checked={computedAriaChecked}
8
- aria-disabled={computedAriaDisabled}
9
- download={download}
10
- onclick={handleClick}
11
- onfocus={handleFocus}
12
- onkeydown={handleKeyDown}
13
- onblur={handleBlur}>
2
+ <div class="slds-dropdown__item" part="menu-item">
3
+ <a href={computedHref}
4
+ target={_target}
5
+ role={computedRole}
6
+ tabindex={computedTabIndex}
7
+ accesskey={computedAccessKey}
8
+ aria-checked={computedAriaChecked}
9
+ aria-disabled={computedAriaDisabled}
10
+ download={download}
11
+ onclick={handleClick}
12
+ onfocus={handleFocus}
13
+ onkeydown={handleKeyDown}
14
+ onblur={handleBlur}>
14
15
 
15
- <span class="slds-truncate">
16
- <template if:true={isMenuItemCheckbox}>
17
- <lightning-primitive-icon
18
- icon-name='utility:check'
19
- size="x-small"
20
- svg-class={computedCheckedIconClass}
21
- variant="bare">
22
- </lightning-primitive-icon>
23
- </template>
16
+ <span class="slds-truncate">
17
+ <template if:true={isMenuItemCheckbox}>
18
+ <lightning-primitive-icon
19
+ icon-name='utility:check'
20
+ size="x-small"
21
+ svg-class={computedCheckedIconClass}
22
+ variant="bare">
23
+ </lightning-primitive-icon>
24
+ </template>
24
25
 
25
- <!-- draft marker -->
26
- <abbr if:true={isDraft} class="slds-indicator_unsaved" title={draftAlternativeText}>*</abbr>
26
+ <!-- draft marker -->
27
+ <abbr if:true={isDraft} class="slds-indicator_unsaved" title={draftAlternativeText}>*</abbr>
27
28
 
28
- <!-- Prefix icon -->
29
- <template if:true={prefixIconName}>
30
- <lightning-primitive-icon
31
- icon-name={prefixIconName}
29
+ <!-- Prefix icon -->
30
+ <template if:true={prefixIconName}>
31
+ <lightning-primitive-icon
32
+ icon-name={prefixIconName}
33
+ size="x-small"
34
+ svg-class="slds-icon slds-icon_x-small slds-icon-text-default slds-m-right_x-small"
35
+ variant="bare">
36
+ </lightning-primitive-icon>
37
+ </template>
38
+
39
+ {label}
40
+ </span>
41
+
42
+ <!-- Suffix icon -->
43
+ <template if:true={iconName}>
44
+ <lightning-primitive-icon icon-name={iconName}
32
45
  size="x-small"
33
- svg-class="slds-icon slds-icon_x-small slds-icon-text-default slds-m-right_x-small"
46
+ svg-class="slds-icon-text-default slds-m-left_small slds-shrink-none"
34
47
  variant="bare">
35
48
  </lightning-primitive-icon>
36
49
  </template>
37
-
38
- {label}
39
- </span>
40
-
41
- <!-- Suffix icon -->
42
- <template if:true={iconName}>
43
- <lightning-primitive-icon icon-name={iconName}
44
- size="x-small"
45
- svg-class="slds-icon-text-default slds-m-left_small slds-shrink-none"
46
- variant="bare">
47
- </lightning-primitive-icon>
48
- </template>
49
- </a>
50
+ </a>
51
+ </div>
50
52
  </template>
@@ -1,4 +1,5 @@
1
- import { LightningElement, api, track } from 'lwc';
1
+ import { api, track } from 'lwc';
2
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
2
3
  import { classSet } from 'lightning/utils';
3
4
  import {
4
5
  normalizeBoolean,
@@ -10,7 +11,7 @@ import { sanitizeURL, FALLBACK_URL } from 'lightning/utilsPrivate';
10
11
  /**
11
12
  * Represents a list item in a menu.
12
13
  */
13
- export default class LightningMenuItem extends LightningElement {
14
+ export default class LightningMenuItem extends LightningShadowBaseClass {
14
15
  /**
15
16
  * A value associated with the menu item.
16
17
  * @type {string}
@@ -62,8 +63,7 @@ export default class LightningMenuItem extends LightningElement {
62
63
  @api draftAlternativeText;
63
64
 
64
65
  connectedCallback() {
65
- this.classList.add('slds-dropdown__item');
66
-
66
+ super.connectedCallback();
67
67
  this.setAttribute('role', 'presentation');
68
68
  }
69
69
 
@@ -0,0 +1,22 @@
1
+
2
+ /* Copyright (c) 2015-present, Salesforce, Inc. All rights reserved
3
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
4
+
5
+ @supports (--styling-hooks: '') {
6
+ :host([data-render-mode="shadow"]) .slds-dropdown__header {
7
+ font-size: var(--sds-g-font-scale-neg-1, 0.875rem);
8
+ font-weight: var(--sds-g-font-weight-7, 700);
9
+ padding-block: var(--sds-g-spacing-2, 0.5rem);
10
+ padding-inline: var(--sds-g-spacing-3, 0.75rem);
11
+ }
12
+
13
+ /**
14
+ * @TODO: refactor when utility is available
15
+ */
16
+ :host([data-render-mode="shadow"]) .slds-truncate {
17
+ max-width: 100%;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap;
21
+ }
22
+ }
@@ -1,3 +1,6 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './menu-subheader.slds.css';
3
+
1
4
  :host {
2
5
  display: block;
3
6
  }
@@ -1,3 +1,5 @@
1
1
  <template>
2
- <span>{label}</span>
2
+ <div class="slds-dropdown__header slds-truncate" part="menu-subheader">
3
+ <span>{label}</span>
4
+ </div>
3
5
  </template>
@@ -1,9 +1,10 @@
1
- import { LightningElement, api } from 'lwc';
1
+ import { api } from 'lwc';
2
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
2
3
 
3
4
  /**
4
5
  * Creates a subheader in the list of items in lightning-button-menu.
5
6
  */
6
- export default class LightningMenuSubheader extends LightningElement {
7
+ export default class LightningMenuSubheader extends LightningShadowBaseClass {
7
8
  /**
8
9
  * The text displayed in the subheader.
9
10
  * @type {string}
@@ -11,10 +12,7 @@ export default class LightningMenuSubheader extends LightningElement {
11
12
  @api label;
12
13
 
13
14
  connectedCallback() {
14
- // add default CSS classes to custom element tag
15
- this.classList.add('slds-dropdown__header');
16
- this.classList.add('slds-truncate');
17
-
15
+ super.connectedCallback();
18
16
  this.setAttribute('role', 'separator');
19
17
  }
20
18
  }
@@ -58,7 +58,7 @@ The `.open()` method lets you assign values to the modal's properties. `Lightnin
58
58
 
59
59
  * `label` - Required. Sets the modal's title and assistive device label. If the modal has a header, set `label` in the `lightning-modal-header` component. If the modal doesn't have a header, set the `label` property when opening the modal.
60
60
 
61
- * `size` - Determines how much of the viewport width the modal uses. Supported values are `small`, `medium`, and `large`, which you can set when you open the modal. Default value is `medium`. The length of the modal is determined by the amount of content.
61
+ * `size` - Determines how much of the viewport width the modal uses. Supported values are `small`, `medium`, `large`, and `full`. You can set the `size` attribute when you open the modal. Default value is `medium`. The height of the modal is determined by the amount of content in the `lightning-modal-body` component, and the `size` value. For more information on the `full` variant, see the **Styling Variants** section.
62
62
 
63
63
  * `description` - Sets the modal's accessible description. It uses the `aria-description` attribute where supported, or falls back to `aria-describedby`. If you set a custom description value, include the label name at the beginning of your description, because some screen readers only read the description, and not the label.
64
64
 
@@ -560,6 +560,8 @@ The headerless variant of `LightningModal` has these additional requirements.
560
560
  - The `label` property is required for all variants of `LightningModal`. Assistive devices read the `label` value, even though the headerless modal variant doesn't display the label.
561
561
  - Because this variant doesn't use `lightning-modal-header`, you have to manually create an `<h1>` heading in `lightning-modal-body`. Provide accessible structure by starting with heading level `<h1>` and using levels up to `<h6>` appropriately. For more information, see [Semantic Structure, Headings on WebAim.org](https://webaim.org/techniques/semanticstructure/#headings).
562
562
 
563
+ You can also create a full-screen modal component by setting the `size` attribute to `full`. This variant resizes the modal to the full width and height of the viewport on screens with 767 pixels or less, like mobile phone devices. On screens 768 pixels or larger, like desktop monitors or tablets, a `size=full` modal has the same behavior as a modal with `size=large` set.
564
+
563
565
  The `LightningModal` component also supports the SLDS [Directional variant](https://www.lightningdesignsystem.com/components/modals/#Directional) modal blueprint pattern.
564
566
 
565
567
  To achieve the directional button layout, place the buttons in a `div` with the `slds-modal__footer_directional` class.
@@ -0,0 +1,267 @@
1
+ /* Contains constants for modal testing
2
+ * NOTE: there is sample Modal DOM structure for reference
3
+ * at the bottom of this file
4
+ */
5
+
6
+ // Selectors
7
+
8
+ // buttons that open modals
9
+ const BUTTON_MODAL_ALL = '[data-modal-button-all]';
10
+ const BUTTON_MODAL_ALL_TWO = '[data-modal-button-all-two]';
11
+ const BUTTON_MODAL_HEADLESS = '[data-modal-button-headless]';
12
+ const BUTTON_MODAL_HEADLESS_NO_LABEL = '[data-modal-button-headless-no-label]';
13
+ const BUTTON_MODAL_HEADLESS_TWO = '[data-modal-button-headless-two]';
14
+ const BUTTON_MODAL_FOOTLESS = '[data-modal-button-footless]';
15
+ const BUTTON_MODAL_FOOTLESS_TWO = '[data-modal-button-footless-two]';
16
+ const BUTTON_MODAL_FORM = '[data-modal-button-form]';
17
+ const BUTTON_MODAL_MULTI = '[data-modal-button-multi]';
18
+ const BUTTON_MODAL_HEADLESS_FULL = '[data-modal-button-headless-full]';
19
+ const BUTTON_MODAL_FOOTLESS_FULL = '[data-modal-button-footless-full]';
20
+
21
+ // top level component selectors
22
+ const OVERLAY_CONTAINER = 'lightning-overlay-container';
23
+ const MODAL_BASE = 'lightning-modal-base';
24
+ const MODAL = 'lightning-modal';
25
+ const BUBBLE_ELEM = 'lightning-primitive-bubble';
26
+
27
+ // LightningModal specific selectors
28
+ const MODAL_SLDS_CSS = 'slds-modal';
29
+ const MODAL_SLDS_FULL_SIZE_CSS = 'slds-modal_full';
30
+ const MODAL_SLDS_SMALL_SIZE_CSS = 'slds-modal_small';
31
+ const MODAL_SLDS_MEDIUM_SIZE_CSS = 'slds-modal_medium';
32
+ const MODAL_SLDS_LARGE_SIZE_CSS = 'slds-modal_large';
33
+ const MODAL_DIV_SLOT = '[data-slot]';
34
+ const MODAL_CONTAINER_DIV = '[data-container]';
35
+ const FOCUS_TRAP = 'lightning-focus-trap';
36
+ const MODAL_CLOSE_BTN = '.slds-modal__close';
37
+ const MODAL_DATA_SELECTOR = '[data-modal]'; // the 'section' element
38
+ const MODAL_DESCRIPTION_SELECTOR = '[data-aria-description]'; // the 'section' > span element
39
+ const MODAL_ARIALIVE_SELECTOR = '[data-aria-live-message]'; // the 'section' > span element
40
+ // modal header
41
+ const MODAL_HEADER = 'lightning-modal-header';
42
+ // modal body
43
+ const MODAL_BODY = 'lightning-modal-body';
44
+ const MODAL_BODY_DIV = '[data-content-container]';
45
+ const MODAL_BODY_BACKDROP = '.slds-backdrop';
46
+ const MODAL_BODY_SLOT = '[data-default-slot]';
47
+ // modal footer
48
+ const MODAL_FOOTER = 'lightning-modal-footer';
49
+
50
+ // inner modal specific details ===========================
51
+
52
+ // close button variants
53
+ const MODAL_CLOSE_BUTTON_FULL_VARIANT = 'bare';
54
+ const MODAL_CLOSE_BUTTON_NORMAL_VARIANT = 'bare-inverse';
55
+ const MODAL_CLOSE_BTN_CLASS = 'slds-modal__close';
56
+ const MODAL_CLOSE_BTN_SELECTOR = `.${MODAL_CLOSE_BTN_CLASS}`;
57
+ const MODAL_CLOSE_BTN_FULL_CLASS = 'slds-modal_full-close-button';
58
+ const MODAL_CLOSE_BTN_ICON_BORDER_CLASS = 'slds-button_icon-border-filled';
59
+ // modal screen size testing
60
+ // utilized by full screen modal tests
61
+ const SCREEN_SIZE_SMALL = 'SMALL';
62
+ const SCREEN_SIZE_MEDIUM = 'MEDIUM';
63
+ const SCREEN_SIZE_LARGE = 'LARGE';
64
+ const SCREEN_SIZE_XLARGE = 'XLARGE';
65
+ const SCREEN_SIZE_SMALL_LANDSCAPE = 'SMALL_LANDSCAPE';
66
+ const SCREEN_SIZE_MEDIUM_LANDSCAPE = 'MEDIUM_LANDSCAPE';
67
+ const SCREEN_SIZE_LARGE_LANDSCAPE = 'LARGE_LANDSCAPE';
68
+
69
+ // modal size api testing value constants
70
+ const MODAL_SIZE_SMALL = 'small';
71
+ const MODAL_SIZE_MEDIUM = 'medium';
72
+ const MODAL_SIZE_LARGE = 'large';
73
+ const MODAL_SIZE_FULL = 'full';
74
+ const MODAL_SIZE_RANDO = 'modal-ex-large';
75
+
76
+ // modal body selectors ================================
77
+ // Empty CSS classes
78
+ const BODY_HEADLESS_SELECTOR = 'slds-modal__content_headless';
79
+ const BODY_FOOTLESS_SELECTOR = 'slds-modal__content_footless';
80
+
81
+ // modal size measurements and values
82
+ const MODAL_FULL_SCREEN_SMALL_BREAKPOINT = 767;
83
+ // <lightning-modal> element location, medium+ screen
84
+ const MODAL_DEFAULT_PX_OFFSET_X = 25;
85
+ const MODAL_DEFAULT_PX_OFFSET_Y = 50;
86
+ // <lightning-modal> element location, full screen
87
+ const MODAL_ELEM_FULL_PX_OFFSET_X = 0;
88
+ const MODAL_ELEM_FULL_PX_OFFSET_Y = 52;
89
+ const MAX_HEIGHT = 'max-height';
90
+ const MIN_HEIGHT = 'min-height';
91
+ const MODAL_BODY_MIN_HEIGHT_PX = 80;
92
+
93
+ // Accessibility
94
+ const ARIA_LABELLEDBY = 'aria-labelledby';
95
+ const ARIA_LABEL = 'aria-label';
96
+
97
+ // PAUSES
98
+ const PAUSE_MICRO = 100;
99
+ const PAUSE_BRIEF = 1250;
100
+ const BROWSER_RESIZE_PAUSE = 2000;
101
+ const MODAL_RENDER_PAUSE = 1250;
102
+
103
+ // modal launcher data selectors
104
+ const SELECTORS = {
105
+ // main testing options
106
+ all: BUTTON_MODAL_ALL,
107
+ 'all-form': BUTTON_MODAL_FORM,
108
+ headless: BUTTON_MODAL_HEADLESS,
109
+ footless: BUTTON_MODAL_FOOTLESS,
110
+ 'headless-full': BUTTON_MODAL_HEADLESS_FULL,
111
+ 'footless-full': BUTTON_MODAL_FOOTLESS_FULL,
112
+ // alternate testing options
113
+ 'all-two': BUTTON_MODAL_ALL_TWO,
114
+ 'headless-no-label': BUTTON_MODAL_HEADLESS_NO_LABEL,
115
+ 'headless-two': BUTTON_MODAL_HEADLESS_TWO,
116
+ 'footless-two': BUTTON_MODAL_FOOTLESS_TWO,
117
+ 'multi-modals': BUTTON_MODAL_MULTI,
118
+ };
119
+
120
+ // modal type to size api value mapping
121
+ const NAME_TO_SIZE = {
122
+ all: MODAL_SIZE_FULL,
123
+ 'all-form': MODAL_SIZE_MEDIUM,
124
+ headless: MODAL_SIZE_SMALL,
125
+ footless: MODAL_SIZE_LARGE,
126
+ 'headless-full': MODAL_SIZE_FULL,
127
+ 'footless-full': MODAL_SIZE_FULL,
128
+
129
+ 'all-two': MODAL_SIZE_MEDIUM,
130
+ 'headless-no-label': MODAL_SIZE_MEDIUM,
131
+ 'headless-two': MODAL_SIZE_MEDIUM,
132
+ 'footless-two': MODAL_SIZE_MEDIUM,
133
+ 'multi-modals': MODAL_SIZE_MEDIUM,
134
+ };
135
+
136
+ // modal type to size api value mapping
137
+ // this will get filled in as more test
138
+ // suites for modal utilize this map
139
+ const SPEC_TO_TABS_TO_CLOSE_BTN = {
140
+ accessibility: {
141
+ footless: -1,
142
+ headless: -3,
143
+ },
144
+ };
145
+
146
+ const MODAL_RANGE = { min: 9000, max: 9099 };
147
+ const OVERLAY_RANGE = { min: 9100, max: 9199 };
148
+
149
+ const KEY = {
150
+ SHIFT: 'Shift',
151
+ TAB: 'Tab',
152
+ ENTER: 'Enter',
153
+ SPACE: 'Space',
154
+ ESC: 'Escape',
155
+ };
156
+
157
+ // pixel values for testing screen sizes
158
+ const SCREEN_SIZE = {
159
+ // based on iPhone 14
160
+ // close to iPhone 12 Pro, Pixel 5
161
+ // when Modal size='full',
162
+ // full screen behavior will be applied
163
+ SMALL: {
164
+ width: 393,
165
+ height: 852,
166
+ },
167
+ SMALL_LANDSCAPE: {
168
+ width: 852,
169
+ height: 393,
170
+ },
171
+ // iPad sizing, in portrait
172
+ MEDIUM: {
173
+ width: 768,
174
+ height: 1024,
175
+ },
176
+ MEDIUM_LANDSCAPE: {
177
+ width: 1024,
178
+ height: 768,
179
+ },
180
+ // Typical desktop lower bound
181
+ LARGE: {
182
+ width: 1024,
183
+ height: 768,
184
+ },
185
+ // Higher res desktop
186
+ XLARGE: {
187
+ width: 1920,
188
+ height: 1080,
189
+ },
190
+ };
191
+
192
+ module.exports = {
193
+ BUTTON_MODAL_ALL,
194
+ BUTTON_MODAL_ALL_TWO,
195
+ BUTTON_MODAL_HEADLESS,
196
+ BUTTON_MODAL_HEADLESS_NO_LABEL,
197
+ BUTTON_MODAL_HEADLESS_TWO,
198
+ BUTTON_MODAL_FOOTLESS,
199
+ BUTTON_MODAL_FOOTLESS_TWO,
200
+ BUTTON_MODAL_FORM,
201
+ BUTTON_MODAL_MULTI,
202
+ BUTTON_MODAL_HEADLESS_FULL,
203
+ BUTTON_MODAL_FOOTLESS_FULL,
204
+ OVERLAY_CONTAINER,
205
+ MODAL_BASE,
206
+ MODAL,
207
+ MODAL_SLDS_CSS,
208
+ MODAL_SLDS_FULL_SIZE_CSS,
209
+ MODAL_SLDS_SMALL_SIZE_CSS,
210
+ MODAL_SLDS_MEDIUM_SIZE_CSS,
211
+ MODAL_SLDS_LARGE_SIZE_CSS,
212
+ MODAL_DIV_SLOT,
213
+ MODAL_CONTAINER_DIV,
214
+ MODAL_HEADER,
215
+ MODAL_BODY,
216
+ MODAL_BODY_DIV,
217
+ MODAL_BODY_BACKDROP,
218
+ MODAL_BODY_SLOT,
219
+ MODAL_FOOTER,
220
+ FOCUS_TRAP,
221
+ MODAL_CLOSE_BTN,
222
+ MODAL_CLOSE_BTN_CLASS,
223
+ MODAL_CLOSE_BTN_SELECTOR,
224
+ MODAL_CLOSE_BTN_FULL_CLASS,
225
+ MODAL_CLOSE_BTN_ICON_BORDER_CLASS,
226
+ MODAL_DATA_SELECTOR,
227
+ MODAL_CLOSE_BUTTON_FULL_VARIANT,
228
+ MODAL_CLOSE_BUTTON_NORMAL_VARIANT,
229
+ SCREEN_SIZE_SMALL,
230
+ SCREEN_SIZE_MEDIUM,
231
+ SCREEN_SIZE_LARGE,
232
+ SCREEN_SIZE_XLARGE,
233
+ SCREEN_SIZE_SMALL_LANDSCAPE,
234
+ SCREEN_SIZE_MEDIUM_LANDSCAPE,
235
+ SCREEN_SIZE_LARGE_LANDSCAPE,
236
+ MODAL_SIZE_SMALL,
237
+ MODAL_SIZE_MEDIUM,
238
+ MODAL_SIZE_LARGE,
239
+ MODAL_SIZE_FULL,
240
+ MODAL_SIZE_RANDO,
241
+ MODAL_FULL_SCREEN_SMALL_BREAKPOINT,
242
+ MODAL_DEFAULT_PX_OFFSET_X,
243
+ MODAL_DEFAULT_PX_OFFSET_Y,
244
+ MODAL_ELEM_FULL_PX_OFFSET_X,
245
+ MODAL_ELEM_FULL_PX_OFFSET_Y,
246
+ MAX_HEIGHT,
247
+ MIN_HEIGHT,
248
+ MODAL_BODY_MIN_HEIGHT_PX,
249
+ BROWSER_RESIZE_PAUSE,
250
+ MODAL_RENDER_PAUSE,
251
+ PAUSE_MICRO,
252
+ PAUSE_BRIEF,
253
+ SELECTORS,
254
+ NAME_TO_SIZE,
255
+ BODY_HEADLESS_SELECTOR,
256
+ BODY_FOOTLESS_SELECTOR,
257
+ MODAL_DESCRIPTION_SELECTOR,
258
+ MODAL_ARIALIVE_SELECTOR,
259
+ BUBBLE_ELEM,
260
+ MODAL_RANGE,
261
+ OVERLAY_RANGE,
262
+ SPEC_TO_TABS_TO_CLOSE_BTN,
263
+ SCREEN_SIZE,
264
+ ARIA_LABELLEDBY,
265
+ ARIA_LABEL,
266
+ KEY,
267
+ };