lightning-base-components 1.21.1-alpha → 1.21.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 (500) hide show
  1. package/metadata/raptor.json +60 -0
  2. package/package.json +155 -2
  3. package/src/lightning/accordion/accordion-section.slds.css +122 -0
  4. package/src/lightning/accordion/accordion.css +2 -16
  5. package/src/lightning/accordion/accordion.js +10 -7
  6. package/src/lightning/accordion/accordion.js-meta.xml +3 -0
  7. package/src/lightning/accordion/accordion.lbc.native.css +4 -0
  8. package/src/lightning/accordion/accordion.lbc.synthetic.css +13 -0
  9. package/src/lightning/accordion/accordion.slds.css +0 -654
  10. package/src/lightning/accordionSection/accordion-section.slds.css +28 -561
  11. package/src/lightning/accordionSection/accordionSection.css +2 -17
  12. package/src/lightning/accordionSection/accordionSection.js +26 -16
  13. package/src/lightning/accordionSection/accordionSection.js-meta.xml +3 -0
  14. package/src/lightning/accordionSection/accordionSection.lbc.native.css +5 -0
  15. package/src/lightning/accordionSection/accordionSection.lbc.synthetic.css +14 -0
  16. package/src/lightning/accordionSection/button.slds.css +503 -0
  17. package/src/lightning/alert/alert.css +1 -0
  18. package/src/lightning/alert/alert.js +12 -9
  19. package/src/lightning/alert/alert.js-meta.xml +3 -0
  20. package/src/lightning/alert/alert.lbc.native.css +1 -0
  21. package/src/lightning/ariaObserver/ariaObserver.js +111 -46
  22. package/src/lightning/avatar/avatar.css +1 -2
  23. package/src/lightning/avatar/avatar.html +19 -5
  24. package/src/lightning/avatar/avatar.js +18 -3
  25. package/src/lightning/avatar/avatar.js-meta.xml +3 -0
  26. package/src/lightning/avatar/avatar.lbc.native.css +2 -0
  27. package/src/lightning/avatar/avatar.slds.css +34 -205
  28. package/src/lightning/badge/__examples__/basic/basic.html +3 -1
  29. package/src/lightning/badge/badge.css +1 -0
  30. package/src/lightning/badge/badge.html +16 -14
  31. package/src/lightning/badge/badge.js +4 -2
  32. package/src/lightning/badge/badge.lbc.native.css +2 -0
  33. package/src/lightning/badge/badge.slds.css +76 -0
  34. package/src/lightning/baseCombobox/base-combobox.slds.css +101 -1433
  35. package/src/lightning/baseCombobox/baseCombobox.css +2 -27
  36. package/src/lightning/baseCombobox/baseCombobox.html +1 -1
  37. package/src/lightning/baseCombobox/baseCombobox.js +15 -2
  38. package/src/lightning/baseCombobox/baseCombobox.lbc.native.css +7 -0
  39. package/src/lightning/baseCombobox/baseCombobox.lbc.synthetic.css +25 -0
  40. package/src/lightning/baseCombobox/dropdown.slds.css +594 -0
  41. package/src/lightning/baseCombobox/input-text.slds.css +533 -0
  42. package/src/lightning/baseCombobox/listbox.slds.css +252 -0
  43. package/src/lightning/baseCombobox/spinner.slds.css +429 -0
  44. package/src/lightning/baseComboboxFormattedText/baseComboboxFormattedText.js +3 -2
  45. package/src/lightning/baseComboboxItem/baseComboboxItem.js +4 -2
  46. package/src/lightning/baseComboboxItem/card.css +1 -0
  47. package/src/lightning/baseComboboxItem/card.lbc.native.css +2 -0
  48. package/src/lightning/baseComboboxItem/inline.css +1 -2
  49. package/src/lightning/baseComboboxItem/inline.lbc.native.css +2 -0
  50. package/src/lightning/baseComboboxItem/listbox.slds.css +179 -179
  51. package/src/lightning/breadcrumb/breadcrumb.css +2 -6
  52. package/src/lightning/breadcrumb/breadcrumb.js +4 -2
  53. package/src/lightning/breadcrumb/breadcrumb.js-meta.xml +3 -0
  54. package/src/lightning/breadcrumb/breadcrumb.lbc.native.css +1 -0
  55. package/src/lightning/breadcrumb/breadcrumb.lbc.synthetic.css +3 -0
  56. package/src/lightning/breadcrumb/breadcrumb.slds.css +4 -6
  57. package/src/lightning/breadcrumbs/breadcrumbs.css +2 -10
  58. package/src/lightning/breadcrumbs/breadcrumbs.js +3 -2
  59. package/src/lightning/breadcrumbs/breadcrumbs.js-meta.xml +3 -0
  60. package/src/lightning/breadcrumbs/breadcrumbs.lbc.native.css +2 -0
  61. package/src/lightning/breadcrumbs/breadcrumbs.lbc.synthetic.css +7 -0
  62. package/src/lightning/breadcrumbs/breadcrumbs.slds.css +7 -5
  63. package/src/lightning/button/button.css +1 -2
  64. package/src/lightning/button/button.js-meta.xml +3 -0
  65. package/src/lightning/button/button.lbc.native.css +2 -0
  66. package/src/lightning/button/button.slds.css +365 -395
  67. package/src/lightning/buttonGroup/button-group.slds.css +37 -35
  68. package/src/lightning/buttonGroup/buttonGroup.css +2 -11
  69. package/src/lightning/buttonGroup/buttonGroup.js +5 -2
  70. package/src/lightning/buttonGroup/buttonGroup.js-meta.xml +3 -0
  71. package/src/lightning/buttonGroup/buttonGroup.lbc.native.css +2 -0
  72. package/src/lightning/buttonGroup/buttonGroup.lbc.synthetic.css +3 -0
  73. package/src/lightning/buttonIcon/button-icon.slds.css +575 -766
  74. package/src/lightning/buttonIcon/buttonIcon.css +2 -2
  75. package/src/lightning/buttonIcon/buttonIcon.js +8 -2
  76. package/src/lightning/buttonIcon/buttonIcon.js-meta.xml +3 -0
  77. package/src/lightning/buttonIconStateful/button-icon-stateful.slds.css +19 -974
  78. package/src/lightning/buttonIconStateful/button-icon.slds.css +724 -0
  79. package/src/lightning/buttonIconStateful/button.slds.css +503 -0
  80. package/src/lightning/buttonIconStateful/buttonIconStateful.css +2 -6
  81. package/src/lightning/buttonIconStateful/buttonIconStateful.js +54 -0
  82. package/src/lightning/buttonIconStateful/buttonIconStateful.js-meta.xml +3 -0
  83. package/src/lightning/buttonIconStateful/buttonIconStateful.lbc.native.css +4 -0
  84. package/src/lightning/buttonIconStateful/buttonIconStateful.lbc.synthetic.css +3 -0
  85. package/src/lightning/buttonMenu/button-icon.slds.css +724 -0
  86. package/src/lightning/buttonMenu/button-menu.slds.css +36 -1880
  87. package/src/lightning/buttonMenu/button.slds.css +503 -0
  88. package/src/lightning/buttonMenu/buttonMenu.css +1 -2
  89. package/src/lightning/buttonMenu/buttonMenu.js +8 -4
  90. package/src/lightning/buttonMenu/buttonMenu.js-meta.xml +3 -0
  91. package/src/lightning/buttonMenu/buttonMenu.lbc.native.css +5 -0
  92. package/src/lightning/buttonMenu/dropdown.slds.css +594 -0
  93. package/src/lightning/buttonStateful/button-stateful.slds.css +2 -745
  94. package/src/lightning/buttonStateful/button.slds.css +503 -0
  95. package/src/lightning/buttonStateful/buttonStateful.css +1 -2
  96. package/src/lightning/buttonStateful/buttonStateful.js +3 -2
  97. package/src/lightning/buttonStateful/buttonStateful.lbc.native.css +3 -0
  98. package/src/lightning/calendar/calendar.css +2 -11
  99. package/src/lightning/calendar/calendar.js +4 -2
  100. package/src/lightning/calendar/calendar.lbc.native.css +11 -0
  101. package/src/lightning/calendar/calendar.lbc.synthetic.css +8 -0
  102. package/src/lightning/calendar/calendar.slds.css +33 -1848
  103. package/src/lightning/calendar/dropdown.slds.css +594 -0
  104. package/src/lightning/card/card.css +1 -2
  105. package/src/lightning/card/card.js +3 -2
  106. package/src/lightning/card/card.lbc.native.css +2 -0
  107. package/src/lightning/card/card.slds.css +119 -176
  108. package/src/lightning/carousel/carousel.css +1 -7
  109. package/src/lightning/carousel/carousel.lbc.synthetic.css +7 -0
  110. package/src/lightning/colorPickerCustom/color-picker-custom.slds.css +34 -258
  111. package/src/lightning/colorPickerCustom/colorPickerCustom.css +1 -2
  112. package/src/lightning/colorPickerCustom/colorPickerCustom.js +3 -2
  113. package/src/lightning/colorPickerCustom/colorPickerCustom.lbc.native.css +3 -0
  114. package/src/lightning/colorPickerCustom/input-text.slds.css +533 -0
  115. package/src/lightning/colorPickerPanel/color-picker-panel.slds.css +2 -773
  116. package/src/lightning/colorPickerPanel/colorPickerPanel.css +2 -12
  117. package/src/lightning/colorPickerPanel/colorPickerPanel.js +4 -2
  118. package/src/lightning/colorPickerPanel/colorPickerPanel.lbc.native.css +3 -0
  119. package/src/lightning/colorPickerPanel/colorPickerPanel.lbc.synthetic.css +8 -0
  120. package/src/lightning/colorPickerPanel/popover.slds.css +29 -30
  121. package/src/lightning/combobox/combobox.css +2 -19
  122. package/src/lightning/combobox/combobox.html +4 -1
  123. package/src/lightning/combobox/combobox.js +20 -3
  124. package/src/lightning/combobox/combobox.js-meta.xml +3 -0
  125. package/src/lightning/combobox/combobox.lbc.native.css +3 -0
  126. package/src/lightning/combobox/combobox.lbc.synthetic.css +28 -0
  127. package/src/lightning/combobox/combobox.slds.css +2 -2
  128. package/src/lightning/combobox/form-element.slds.css +70 -43
  129. package/src/lightning/configProvider/defaultDurationConfig.js +1 -1
  130. package/src/lightning/confirm/confirm.css +1 -0
  131. package/src/lightning/confirm/confirm.js +12 -9
  132. package/src/lightning/confirm/confirm.js-meta.xml +3 -0
  133. package/src/lightning/confirm/confirm.lbc.native.css +1 -0
  134. package/src/lightning/datatable/__examples__/customDatatypeTable/customLink.html +5 -7
  135. package/src/lightning/datepicker/datepicker.css +1 -3
  136. package/src/lightning/datepicker/datepicker.js +15 -8
  137. package/src/lightning/datepicker/datepicker.lbc.native.css +3 -0
  138. package/src/lightning/datepicker/form-element.slds.css +70 -43
  139. package/src/lightning/datepicker/input-text.slds.css +253 -118
  140. package/src/lightning/datetimepicker/datetimepicker.css +1 -3
  141. package/src/lightning/datetimepicker/datetimepicker.html +0 -2
  142. package/src/lightning/datetimepicker/datetimepicker.js +35 -10
  143. package/src/lightning/datetimepicker/datetimepicker.lbc.native.css +3 -0
  144. package/src/lightning/datetimepicker/form-element.slds.css +70 -43
  145. package/src/lightning/datetimepicker/input-text.slds.css +253 -118
  146. package/src/lightning/dualListbox/dual-listbox.slds.css +27 -27
  147. package/src/lightning/dualListbox/dualListbox.css +2 -8
  148. package/src/lightning/dualListbox/dualListbox.js +55 -36
  149. package/src/lightning/dualListbox/dualListbox.js-meta.xml +3 -0
  150. package/src/lightning/dualListbox/dualListbox.lbc.native.css +4 -0
  151. package/src/lightning/dualListbox/dualListbox.lbc.synthetic.css +3 -0
  152. package/src/lightning/dualListbox/form-element.slds.css +70 -43
  153. package/src/lightning/dualListbox/listbox.slds.css +179 -179
  154. package/src/lightning/dynamicIcon/dynamicIcon.js +3 -2
  155. package/src/lightning/dynamicIcon/dynamicIcon.js-meta.xml +3 -0
  156. package/src/lightning/dynamicIcon/ellie.css +1 -1
  157. package/src/lightning/dynamicIcon/ellie.lbc.native.css +1 -0
  158. package/src/lightning/dynamicIcon/eq.css +1 -1
  159. package/src/lightning/dynamicIcon/eq.lbc.native.css +1 -0
  160. package/src/lightning/dynamicIcon/score.css +1 -1
  161. package/src/lightning/dynamicIcon/score.lbc.native.css +1 -0
  162. package/src/lightning/dynamicIcon/strength.css +1 -1
  163. package/src/lightning/dynamicIcon/strength.lbc.native.css +1 -0
  164. package/src/lightning/dynamicIcon/trend.css +1 -1
  165. package/src/lightning/dynamicIcon/trend.lbc.native.css +1 -0
  166. package/src/lightning/dynamicIcon/waffle.css +1 -1
  167. package/src/lightning/dynamicIcon/waffle.lbc.native.css +1 -0
  168. package/src/lightning/focusTrap/focusTrap.js +3 -2
  169. package/src/lightning/focusTrap/focusTrap.js-meta.xml +3 -0
  170. package/src/lightning/formattedAddress/formattedAddress.js-meta.xml +3 -0
  171. package/src/lightning/formattedEmail/formattedEmail.css +1 -0
  172. package/src/lightning/formattedEmail/formattedEmail.js +4 -2
  173. package/src/lightning/formattedEmail/formattedEmail.js-meta.xml +3 -0
  174. package/src/lightning/formattedEmail/formattedEmail.lbc.native.css +7 -0
  175. package/src/lightning/formattedLocation/formattedLocation.js-meta.xml +3 -0
  176. package/src/lightning/formattedNumber/formattedNumber.css +1 -4
  177. package/src/lightning/formattedNumber/formattedNumber.lbc.synthetic.css +4 -0
  178. package/src/lightning/formattedPhone/formattedPhone.css +1 -4
  179. package/src/lightning/formattedPhone/formattedPhone.js-meta.xml +3 -0
  180. package/src/lightning/formattedPhone/formattedPhone.lbc.synthetic.css +4 -0
  181. package/src/lightning/formattedRichText/formatted-rich-text.slds.css +39 -39
  182. package/src/lightning/formattedRichText/formattedRichText.css +1 -3
  183. package/src/lightning/formattedRichText/formattedRichText.js +4 -2
  184. package/src/lightning/formattedRichText/formattedRichText.js-meta.xml +3 -0
  185. package/src/lightning/formattedRichText/formattedRichText.lbc.native.css +3 -0
  186. package/src/lightning/formattedText/formattedText.css +1 -1
  187. package/src/lightning/formattedText/formattedText.js +3 -2
  188. package/src/lightning/formattedText/formattedText.js-meta.xml +3 -0
  189. package/src/lightning/formattedText/formattedText.lbc.native.css +1 -0
  190. package/src/lightning/formattedTime/formattedTime.js-meta.xml +3 -0
  191. package/src/lightning/formattedUrl/formattedUrl.js-meta.xml +3 -0
  192. package/src/lightning/groupedCombobox/__mockData__/exampleGroupedComboboxData.js +17 -0
  193. package/src/lightning/groupedCombobox/form-element.slds.css +315 -0
  194. package/src/lightning/groupedCombobox/grouped-combobox.slds.css +15 -0
  195. package/src/lightning/groupedCombobox/groupedCombobox.css +2 -3
  196. package/src/lightning/groupedCombobox/groupedCombobox.js +25 -3
  197. package/src/lightning/groupedCombobox/groupedCombobox.js-meta.xml +3 -0
  198. package/src/lightning/groupedCombobox/groupedCombobox.lbc.native.css +5 -0
  199. package/src/lightning/groupedCombobox/groupedCombobox.lbc.syhtnetic.css +3 -0
  200. package/src/lightning/groupedCombobox/input-text.slds.css +533 -0
  201. package/src/lightning/helptext/button-icon.slds.css +724 -0
  202. package/src/lightning/helptext/form-element.slds.css +70 -43
  203. package/src/lightning/helptext/help-text.slds.css +6 -938
  204. package/src/lightning/helptext/helptext.css +1 -3
  205. package/src/lightning/helptext/helptext.js +3 -2
  206. package/src/lightning/helptext/helptext.lbc.native.css +4 -0
  207. package/src/lightning/icon/icon.css +1 -2
  208. package/src/lightning/icon/icon.js +20 -2
  209. package/src/lightning/icon/icon.js-meta.xml +3 -0
  210. package/src/lightning/icon/icon.lbc.native.css +2 -0
  211. package/src/lightning/icon/icon.slds.css +64 -53
  212. package/src/lightning/input/form-element.slds.css +70 -43
  213. package/src/lightning/input/input.css +2 -13
  214. package/src/lightning/input/input.html +1 -0
  215. package/src/lightning/input/input.js +55 -9
  216. package/src/lightning/input/input.lbc.native.css +2 -0
  217. package/src/lightning/input/input.lbc.synthetic.css +9 -0
  218. package/src/lightning/inputAddress/form-element.slds.css +315 -0
  219. package/src/lightning/inputAddress/input-address.slds.css +15 -0
  220. package/src/lightning/inputAddress/input-text.slds.css +533 -0
  221. package/src/lightning/inputAddress/inputAddress.css +2 -3
  222. package/src/lightning/inputAddress/inputAddress.html +21 -12
  223. package/src/lightning/inputAddress/inputAddress.js +33 -14
  224. package/src/lightning/inputAddress/inputAddress.lbc.native.css +5 -0
  225. package/src/lightning/inputAddress/inputAddress.lbc.synthetic.css +4 -0
  226. package/src/lightning/inputLocation/form-element.slds.css +315 -0
  227. package/src/lightning/inputLocation/input-location.slds.css +15 -0
  228. package/src/lightning/inputLocation/input-text.slds.css +533 -0
  229. package/src/lightning/inputLocation/inputLocation.css +2 -3
  230. package/src/lightning/inputLocation/inputLocation.html +1 -1
  231. package/src/lightning/inputLocation/inputLocation.js +27 -6
  232. package/src/lightning/inputLocation/inputLocation.js-meta.xml +3 -0
  233. package/src/lightning/inputLocation/inputLocation.lbc.native.css +5 -0
  234. package/src/lightning/inputLocation/inputLocation.lbc.synthetic.css +3 -0
  235. package/src/lightning/inputName/form-element.slds.css +315 -0
  236. package/src/lightning/inputName/input-text.slds.css +533 -0
  237. package/src/lightning/inputName/inputName.css +2 -3
  238. package/src/lightning/inputName/inputName.js +22 -15
  239. package/src/lightning/inputName/inputName.lbc.native.css +4 -0
  240. package/src/lightning/inputName/inputName.lbc.synthetic.css +3 -0
  241. package/src/lightning/interactiveDialogBase/interactive-dialog-base.slds.css +24 -0
  242. package/src/lightning/interactiveDialogBase/interactiveDialogBase.css +2 -520
  243. package/src/lightning/interactiveDialogBase/interactiveDialogBase.html +8 -3
  244. package/src/lightning/interactiveDialogBase/interactiveDialogBase.js +6 -0
  245. package/src/lightning/interactiveDialogBase/interactiveDialogBase.lbc.native.css +3 -0
  246. package/src/lightning/interactiveDialogBase/interactiveDialogBase.lbc.synthetic.css +20 -0
  247. package/src/lightning/internationalizationLibrary/datetime/dateTimeUtils.js +33 -10
  248. package/src/lightning/layout/layout.css +2 -9
  249. package/src/lightning/layout/layout.js +5 -2
  250. package/src/lightning/layout/layout.js-meta.xml +3 -0
  251. package/src/lightning/layout/layout.lbc.native.css +2 -0
  252. package/src/lightning/layout/layout.lbc.synthetic.css +6 -0
  253. package/src/lightning/layoutItem/layoutItem.css +1 -5
  254. package/src/lightning/layoutItem/layoutItem.js +5 -2
  255. package/src/lightning/layoutItem/layoutItem.js-meta.xml +3 -0
  256. package/src/lightning/layoutItem/layoutItem.lbc.native.css +5 -0
  257. package/src/lightning/lookupAddress/form-element.slds.css +315 -0
  258. package/src/lightning/lookupAddress/listbox.slds.css +252 -0
  259. package/src/lightning/lookupAddress/lookup-address.slds.css +10 -0
  260. package/src/lightning/lookupAddress/lookupAddress.css +2 -0
  261. package/src/lightning/lookupAddress/lookupAddress.html +12 -9
  262. package/src/lightning/lookupAddress/lookupAddress.js +4 -2
  263. package/src/lightning/lookupAddress/lookupAddress.lbc.native.css +4 -0
  264. package/src/lightning/menuDivider/menu-divider.slds.css +4 -4
  265. package/src/lightning/menuDivider/menuDivider.css +2 -6
  266. package/src/lightning/menuDivider/menuDivider.js +4 -3
  267. package/src/lightning/menuDivider/menuDivider.lbc.native.css +2 -0
  268. package/src/lightning/menuDivider/menuDivider.lbc.synthetic.css +3 -0
  269. package/src/lightning/menuItem/menu-item.slds.css +16 -16
  270. package/src/lightning/menuItem/menuItem.css +2 -6
  271. package/src/lightning/menuItem/menuItem.js +13 -3
  272. package/src/lightning/menuItem/menuItem.js-meta.xml +3 -0
  273. package/src/lightning/menuItem/menuItem.lbc.native.css +2 -0
  274. package/src/lightning/menuItem/menuItem.lbc.synthetic.css +3 -0
  275. package/src/lightning/menuSubheader/menu-subheader.slds.css +4 -4
  276. package/src/lightning/menuSubheader/menuSubheader.css +2 -6
  277. package/src/lightning/menuSubheader/menuSubheader.js +4 -2
  278. package/src/lightning/menuSubheader/menuSubheader.lbc.native.css +2 -0
  279. package/src/lightning/menuSubheader/menuSubheader.lbc.synthetic.css +3 -0
  280. package/src/lightning/modal/__docs__/modal.md +30 -0
  281. package/src/lightning/modal/__examples__disabled/allformfullcompound/allformfullcompound.css +7 -0
  282. package/src/lightning/modal/__examples__disabled/allformfullcompound/allformfullcompound.html +9 -0
  283. package/src/lightning/modal/__examples__disabled/allformfullcompound/allformfullcompound.js +54 -0
  284. package/src/lightning/modal/__examples__disabled/allformhoriz/allformhoriz.css +7 -0
  285. package/src/lightning/modal/__examples__disabled/allformhoriz/allformhoriz.html +9 -0
  286. package/src/lightning/modal/__examples__disabled/allformhoriz/allformhoriz.js +53 -0
  287. package/src/lightning/modal/__examples__disabled/allmulti/allmulti.html +1 -0
  288. package/src/lightning/modal/__examples__disabled/allmulti/allmulti.js +43 -1
  289. package/src/lightning/modal/__examples__disabled/basic/basic.css +1 -1
  290. package/src/lightning/modal/__examples__disabled/demo/demo.css +1 -0
  291. package/src/lightning/modal/__examples__disabled/demoall/demoall.css +5 -0
  292. package/src/lightning/modal/__examples__disabled/demoallform/demoallform.css +2 -3
  293. package/src/lightning/modal/__examples__disabled/demoallform/demoallform.html +181 -107
  294. package/src/lightning/modal/__examples__disabled/demoallform/demoallform.js +7 -1
  295. package/src/lightning/modal/__examples__disabled/demoallformfull/demoallformfull.css +2 -3
  296. package/src/lightning/modal/__examples__disabled/demoallformfull/demoallformfull.html +181 -107
  297. package/src/lightning/modal/__examples__disabled/demoallformfullcompound/demoallformfullcompound.css +7 -0
  298. package/src/lightning/modal/__examples__disabled/demoallformfullcompound/demoallformfullcompound.html +109 -0
  299. package/src/lightning/modal/__examples__disabled/demoallformfullcompound/demoallformfullcompound.js +241 -0
  300. package/src/lightning/modal/__examples__disabled/demoallformhoriz/demoallformhoriz.css +5 -0
  301. package/src/lightning/modal/__examples__disabled/demoallformhoriz/demoallformhoriz.html +165 -0
  302. package/src/lightning/modal/__examples__disabled/demoallformhoriz/demoallformhoriz.js +241 -0
  303. package/src/lightning/modal/__examples__disabled/demofootless/demofootless.css +1 -0
  304. package/src/lightning/modal/__examples__disabled/demoheadless/demoheadless.css +5 -0
  305. package/src/lightning/modal/__modalUtils__/modalContainerTestConstants.js +8 -0
  306. package/src/lightning/modal/__modalUtils__/modalContainerTestMethods.js +108 -3
  307. package/src/lightning/modalBase/modal-base.slds.css +242 -0
  308. package/src/lightning/modalBase/modalBase.css +2 -16
  309. package/src/lightning/modalBase/modalBase.html +2 -0
  310. package/src/lightning/modalBase/modalBase.js +158 -10
  311. package/src/lightning/modalBase/modalBase.lbc.native.css +2 -0
  312. package/src/lightning/modalBase/modalBase.lbc.synthetic.css +18 -0
  313. package/src/lightning/modalBody/modal-body.slds.css +61 -0
  314. package/src/lightning/modalBody/modalBody.css +1 -0
  315. package/src/lightning/modalBody/modalBody.html +1 -0
  316. package/src/lightning/modalBody/modalBody.js +15 -2
  317. package/src/lightning/modalBody/modalBody.lbc.native.css +3 -0
  318. package/src/lightning/modalFooter/modal-footer.slds.css +79 -0
  319. package/src/lightning/modalFooter/modalFooter.css +1 -0
  320. package/src/lightning/modalFooter/modalFooter.html +1 -1
  321. package/src/lightning/modalFooter/modalFooter.js +3 -2
  322. package/src/lightning/modalFooter/modalFooter.lbc.native.css +2 -0
  323. package/src/lightning/modalHeader/modal-header.slds.css +77 -0
  324. package/src/lightning/modalHeader/modalHeader.css +3 -0
  325. package/src/lightning/modalHeader/modalHeader.html +1 -1
  326. package/src/lightning/modalHeader/modalHeader.js +4 -2
  327. package/src/lightning/modalHeader/modalHeader.lbc.native.css +3 -0
  328. package/src/lightning/overlay/overlay.js +11 -4
  329. package/src/lightning/overlayContainer/overlayContainer.js +3 -2
  330. package/src/lightning/picklist/picklist.js +24 -19
  331. package/src/lightning/picklist/picklist.js-meta.xml +3 -0
  332. package/src/lightning/pill/avatar.slds.css +34 -205
  333. package/src/lightning/pill/link.css +1 -3
  334. package/src/lightning/pill/link.lbc.native.css +3 -0
  335. package/src/lightning/pill/pill.js +4 -2
  336. package/src/lightning/pill/pill.js-meta.xml +3 -0
  337. package/src/lightning/pill/pill.slds.css +52 -47
  338. package/src/lightning/pill/plain.css +1 -3
  339. package/src/lightning/pill/plain.lbc.native.css +3 -0
  340. package/src/lightning/pill/plainLink.css +1 -3
  341. package/src/lightning/pill/plainLink.lbc.native.css +3 -0
  342. package/src/lightning/pillContainer/barePillContainer.css +1 -3
  343. package/src/lightning/pillContainer/barePillContainer.html +1 -1
  344. package/src/lightning/pillContainer/barePillContainer.lbc.native.css +4 -0
  345. package/src/lightning/pillContainer/button.slds.css +503 -0
  346. package/src/lightning/pillContainer/listbox.slds.css +179 -179
  347. package/src/lightning/pillContainer/pill-container.slds.css +15 -9
  348. package/src/lightning/pillContainer/pill.slds.css +52 -47
  349. package/src/lightning/pillContainer/pillContainer.js +15 -12
  350. package/src/lightning/pillContainer/pillContainer.js-meta.xml +3 -0
  351. package/src/lightning/pillContainer/standardPillContainer.css +3 -2
  352. package/src/lightning/pillContainer/standardPillContainer.html +1 -1
  353. package/src/lightning/popup/popover.slds.css +29 -30
  354. package/src/lightning/popup/popup.css +1 -2
  355. package/src/lightning/popup/popup.js +3 -2
  356. package/src/lightning/popup/popup.js-meta.xml +3 -0
  357. package/src/lightning/popup/popup.lbc.native.css +2 -0
  358. package/src/lightning/primitiveBubble/primitiveBubble.css +2 -11
  359. package/src/lightning/primitiveBubble/primitiveBubble.js +4 -2
  360. package/src/lightning/primitiveBubble/primitiveBubble.lbc.native.css +2 -0
  361. package/src/lightning/primitiveBubble/primitiveBubble.lbc.synthetic.css +8 -0
  362. package/src/lightning/primitiveBubble/tooltip.slds.css +89 -142
  363. package/src/lightning/primitiveButton/primitiveButton.js +4 -2
  364. package/src/lightning/primitiveColorpickerButton/color-picker-button.slds.css +14 -223
  365. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.css +1 -2
  366. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.js +3 -2
  367. package/src/lightning/primitiveColorpickerButton/primitiveColorpickerButton.lbc.native.css +2 -0
  368. package/src/lightning/primitiveCustomCell/primitiveCustomCell.js +1 -2
  369. package/src/lightning/primitiveDatatableCell/primitiveDatatableCell.js +1 -3
  370. package/src/lightning/primitiveFileDroppableZone/primitiveFileDroppableZone.js +17 -7
  371. package/src/lightning/primitiveIcon/icon.slds.css +64 -53
  372. package/src/lightning/primitiveIcon/primitiveIcon.css +2 -11
  373. package/src/lightning/primitiveIcon/primitiveIcon.js +7 -9
  374. package/src/lightning/primitiveIcon/primitiveIcon.lbc.native.css +2 -0
  375. package/src/lightning/primitiveIcon/primitiveIcon.lbc.synthetic.css +9 -0
  376. package/src/lightning/primitiveIframe/primitiveIframe.html +9 -8
  377. package/src/lightning/primitiveIframe/primitiveIframe.js +4 -2
  378. package/src/lightning/primitiveInputCheckbox/form-element.slds.css +70 -43
  379. package/src/lightning/primitiveInputCheckbox/input-checkbox.slds.css +223 -237
  380. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.css +1 -3
  381. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.js +9 -1
  382. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.lbc.native.css +3 -0
  383. package/src/lightning/primitiveInputCheckboxButton/form-element.slds.css +70 -43
  384. package/src/lightning/primitiveInputCheckboxButton/input-checkbox-button.slds.css +30 -30
  385. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.css +2 -6
  386. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.lbc.native.css +2 -0
  387. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.lbc.synthetic.css +2 -0
  388. package/src/lightning/primitiveInputColor/form-element.slds.css +70 -43
  389. package/src/lightning/primitiveInputColor/input-color.slds.css +3 -7
  390. package/src/lightning/primitiveInputColor/input-text.slds.css +253 -118
  391. package/src/lightning/primitiveInputColor/primitiveInputColor.css +1 -4
  392. package/src/lightning/primitiveInputColor/primitiveInputColor.lbc.native.css +4 -0
  393. package/src/lightning/primitiveInputFile/button.slds.css +365 -395
  394. package/src/lightning/primitiveInputFile/form-element.slds.css +70 -43
  395. package/src/lightning/primitiveInputFile/input-file.slds.css +12 -12
  396. package/src/lightning/primitiveInputFile/primitiveInputFile.css +1 -5
  397. package/src/lightning/primitiveInputFile/primitiveInputFile.js +9 -7
  398. package/src/lightning/primitiveInputFile/primitiveInputFile.lbc.native.css +4 -0
  399. package/src/lightning/primitiveInputSimple/form-element.slds.css +70 -43
  400. package/src/lightning/primitiveInputSimple/input-text.slds.css +253 -118
  401. package/src/lightning/primitiveInputSimple/primitiveInputSimple.css +2 -9
  402. package/src/lightning/primitiveInputSimple/primitiveInputSimple.js +4 -2
  403. package/src/lightning/primitiveInputSimple/primitiveInputSimple.lbc.native.css +3 -0
  404. package/src/lightning/primitiveInputSimple/primitiveInputSimple.lbc.synthetic.css +5 -0
  405. package/src/lightning/primitiveInputToggle/form-element.slds.css +70 -43
  406. package/src/lightning/primitiveInputToggle/input-toggle.slds.css +28 -28
  407. package/src/lightning/primitiveInputToggle/primitiveInputToggle.css +1 -3
  408. package/src/lightning/primitiveInputToggle/primitiveInputToggle.js +9 -1
  409. package/src/lightning/primitiveInputToggle/primitiveInputToggle.lbc.native.css +3 -0
  410. package/src/lightning/progressBar/progress-bar.slds.css +66 -0
  411. package/src/lightning/progressBar/progressBar.css +1 -0
  412. package/src/lightning/progressBar/progressBar.html +1 -0
  413. package/src/lightning/progressBar/progressBar.js +3 -2
  414. package/src/lightning/progressBar/progressBar.lbc.native.css +2 -0
  415. package/src/lightning/progressIndicator/progressIndicator.css +1 -3
  416. package/src/lightning/progressIndicator/progressIndicator.lbc.synthetic.css +3 -0
  417. package/src/lightning/progressRing/progress-ring.slds.css +136 -0
  418. package/src/lightning/progressRing/progressRing.css +1 -0
  419. package/src/lightning/progressRing/progressRing.html +1 -1
  420. package/src/lightning/progressRing/progressRing.js +3 -2
  421. package/src/lightning/progressRing/progressRing.lbc.native.css +2 -0
  422. package/src/lightning/prompt/prompt.css +1 -85
  423. package/src/lightning/prompt/prompt.html +15 -5
  424. package/src/lightning/prompt/prompt.js +12 -9
  425. package/src/lightning/prompt/prompt.js-meta.xml +3 -0
  426. package/src/lightning/prompt/prompt.lbc.native.css +2 -0
  427. package/src/lightning/prompt/prompt.slds.css +10 -0
  428. package/src/lightning/radioGroup/form-element.slds.css +315 -0
  429. package/src/lightning/radioGroup/input-radio-group.slds.css +124 -571
  430. package/src/lightning/radioGroup/radioGroup.css +2 -7
  431. package/src/lightning/radioGroup/radioGroup.js +4 -2
  432. package/src/lightning/radioGroup/radioGroup.lbc.native.css +3 -0
  433. package/src/lightning/radioGroup/radioGroup.lbc.synthetic.css +3 -0
  434. package/src/lightning/select/form-element.slds.css +70 -43
  435. package/src/lightning/select/select.css +1 -3
  436. package/src/lightning/select/select.js +4 -2
  437. package/src/lightning/select/select.js-meta.xml +3 -0
  438. package/src/lightning/select/select.lbc.native.css +3 -0
  439. package/src/lightning/select/select.slds.css +23 -342
  440. package/src/lightning/sldsUtilsThemes/sldsUtilsThemes.css +27 -11
  441. package/src/lightning/sldsUtilsVisibility/sldsUtilsVisibility.css +20 -0
  442. package/src/lightning/sldsUtilsVisibility/sldsUtilsVisibility.js-meta.xml +4 -0
  443. package/src/lightning/spinner/spinner.css +1 -2
  444. package/src/lightning/spinner/spinner.js +6 -4
  445. package/src/lightning/spinner/spinner.js-meta.xml +3 -0
  446. package/src/lightning/spinner/spinner.lbc.native.css +2 -0
  447. package/src/lightning/spinner/spinner.slds.css +4 -10
  448. package/src/lightning/staticMap/staticMap.html +12 -10
  449. package/src/lightning/staticMap/staticMap.js +16 -4
  450. package/src/lightning/tab/tab.css +1 -2
  451. package/src/lightning/tab/tab.lbc.native.css +2 -0
  452. package/src/lightning/tab/tab.slds.css +9 -9
  453. package/src/lightning/tabBar/tab-bar.slds.css +59 -59
  454. package/src/lightning/tabBar/tabBar.css +1 -2
  455. package/src/lightning/tabBar/tabBar.js +19 -2
  456. package/src/lightning/tabBar/tabBar.lbc.native.css +2 -0
  457. package/src/lightning/tabset/tabset.css +1 -10
  458. package/src/lightning/tabset/tabset.html +19 -7
  459. package/src/lightning/tabset/tabset.js +224 -60
  460. package/src/lightning/tabset/tabset.lbc.native.css +3 -0
  461. package/src/lightning/tabset/tabset.slds.css +15 -0
  462. package/src/lightning/textarea/form-element.slds.css +315 -0
  463. package/src/lightning/textarea/textarea.css +2 -5
  464. package/src/lightning/textarea/textarea.html +21 -5
  465. package/src/lightning/textarea/textarea.js +167 -128
  466. package/src/lightning/textarea/textarea.lbc.native.css +3 -0
  467. package/src/lightning/textarea/textarea.lbc.synthetic.css +5 -0
  468. package/src/lightning/textarea/textarea.slds.css +95 -0
  469. package/src/lightning/tile/standardTile.css +1 -3
  470. package/src/lightning/tile/standardTile.lbc.synthetic.css +3 -0
  471. package/src/lightning/timepicker/form-element.slds.css +70 -43
  472. package/src/lightning/timepicker/timepicker.css +1 -3
  473. package/src/lightning/timepicker/timepicker.html +1 -1
  474. package/src/lightning/timepicker/timepicker.js +21 -5
  475. package/src/lightning/timepicker/timepicker.lbc.native.css +3 -0
  476. package/src/lightning/toast/button-icon.slds.css +575 -766
  477. package/src/lightning/toast/formatted-rich-text.slds.css +39 -39
  478. package/src/lightning/toast/icon.slds.css +64 -53
  479. package/src/lightning/toast/toast.css +2 -68
  480. package/src/lightning/toast/toast.js +4 -2
  481. package/src/lightning/toast/toast.lbc.native.css +9 -0
  482. package/src/lightning/toast/toast.lbc.synthetic.css +58 -0
  483. package/src/lightning/toast/toast.slds.css +20 -20
  484. package/src/lightning/toastContainer/toast.slds.css +20 -20
  485. package/src/lightning/toastContainer/toastContainer.css +2 -43
  486. package/src/lightning/toastContainer/toastContainer.lbc.native.css +4 -0
  487. package/src/lightning/toastContainer/toastContainer.lbc.synthetic.css +38 -0
  488. package/src/lightning/utilsPrivate/animation.js +10 -8
  489. package/src/lightning/utilsPrivate/aria.js +1 -1
  490. package/src/lightning/utilsPrivate/utilsPrivate.js +21 -5
  491. package/src/lightning/verticalNavigation/verticalNavigation.css +1 -3
  492. package/src/lightning/verticalNavigation/verticalNavigation.js +3 -2
  493. package/src/lightning/verticalNavigation/verticalNavigation.lbc.native.css +2 -0
  494. package/src/lightning/verticalNavigationOverflow/verticalNavigationOverflow.css +1 -3
  495. package/src/lightning/verticalNavigationOverflow/verticalNavigationOverflow.lbc.synthetic.css +3 -0
  496. package/src/lightning/verticalNavigationSection/vertical-navigation-section.slds.css +8 -8
  497. package/src/lightning/verticalNavigationSection/verticalNavigationSection.css +2 -7
  498. package/src/lightning/verticalNavigationSection/verticalNavigationSection.js +3 -2
  499. package/src/lightning/verticalNavigationSection/verticalNavigationSection.lbc.native.css +2 -0
  500. package/src/lightning/verticalNavigationSection/verticalNavigationSection.lbc.synthetic.css +3 -0
@@ -1,7 +1,7 @@
1
- import { api, LightningElement } from 'lwc';
1
+ import { api } from 'lwc';
2
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
2
3
  import { classSet } from 'lightning/utils';
3
4
  import {
4
- isCSR,
5
5
  makeEverythingExceptElementInert,
6
6
  normalizeString,
7
7
  synchronizeAttrs,
@@ -9,14 +9,17 @@ import {
9
9
  hasAnimation,
10
10
  ARIA,
11
11
  isAriaDescriptionSupported,
12
+ isCSR,
12
13
  } from 'lightning/utilsPrivate';
13
14
  import { instanceName, secure } from 'lightning/overlayUtils';
14
15
  import {
15
16
  getElementWithFocus,
16
17
  returnFocusToElement,
18
+ findAllTabbableElements,
17
19
  } from 'lightning/focusUtils';
18
20
  import closeButtonAltText from '@salesforce/label/LightningModalBase.cancelandclose';
19
21
  import disableCloseBtnMessage from '@salesforce/label/LightningModalBase.waitstate';
22
+ import AriaObserver from 'lightning/ariaObserver';
20
23
 
21
24
  const DEBOUNCE_RESIZE = 300;
22
25
  const SMALL_SCREEN_SIZE = 480;
@@ -24,10 +27,12 @@ const SIZE_SMALL = 'small';
24
27
  const SIZE_MEDIUM = 'medium';
25
28
  const SIZE_LARGE = 'large';
26
29
  const SIZE_FULL = 'full';
30
+ const OVERLAY_CONTAINER = 'lightning-overlay-container';
31
+ const MODAL_BASE = 'lightning-modal-base';
27
32
 
28
- export default class LightningModalBase extends LightningElement {
33
+ export default class LightningModalBase extends LightningShadowBaseClass {
29
34
  // this is visible in DOM, changed from 'lightning-modal-base'
30
- static [instanceName] = 'lightning-modal-base';
35
+ static [instanceName] = MODAL_BASE;
31
36
 
32
37
  // private tracked state
33
38
  initialRender = true;
@@ -66,6 +71,13 @@ export default class LightningModalBase extends LightningElement {
66
71
  portraitMatchMedia = null;
67
72
  screenOrientationChangeHandler = null;
68
73
 
74
+ // state utilized when performing keyboard Tab/Shift-Tab interactions
75
+ focusinEventBound = false;
76
+ focusinEventHandler = null;
77
+ lastFocussedElementOnModal = null;
78
+ previousSavedInertElementsSize = 0;
79
+ allTabbableElements = null;
80
+
69
81
  // modalFooter, child
70
82
  footerRegistered = false;
71
83
  footerHeight = 0;
@@ -89,6 +101,14 @@ export default class LightningModalBase extends LightningElement {
89
101
  // before modal opened, element previously focused
90
102
  savedActiveElement;
91
103
 
104
+ // accessibility
105
+ ariaObserver = null;
106
+
107
+ constructor() {
108
+ super();
109
+ this.ariaObserver = new AriaObserver(this);
110
+ }
111
+
92
112
  /**
93
113
  * <lightning-modal> label value
94
114
  * Text to display as the heading at the top of the modal
@@ -212,7 +232,10 @@ export default class LightningModalBase extends LightningElement {
212
232
  * @private
213
233
  */
214
234
  get modal() {
215
- return (this.defaultSlot && this.defaultSlot.childNodes[0]) || null;
235
+ return (
236
+ (isCSR && this.defaultSlot && this.defaultSlot.childNodes[0]) ||
237
+ null
238
+ );
216
239
  }
217
240
 
218
241
  /**
@@ -418,6 +441,61 @@ export default class LightningModalBase extends LightningElement {
418
441
  }
419
442
  }
420
443
 
444
+ /**
445
+ * Handler for 'focusin' events responsible for following -
446
+ * <ul>
447
+ * <li>While the focus is on a Modal or stacked Modals, the handler tracks the last focussed element inside a Modal</li>
448
+ * <li>If user's focus moves outside a Modal, the handler tries to bring user's focus back to last focussed element</li>
449
+ * </ul>
450
+ * @param e - Event
451
+ */
452
+ handleFocusinEvents(e) {
453
+ // eslint-disable-next-line @lwc/lwc/no-async-operation
454
+ requestAnimationFrame(() => {
455
+ e.preventDefault();
456
+ e.stopPropagation();
457
+
458
+ const focusinEvtTarget = e.target;
459
+ const isFocusTargetAModal =
460
+ focusinEvtTarget.matches(OVERLAY_CONTAINER);
461
+ const wasANewModalStackedOnTopOfAnExistingModal =
462
+ this.isStackedModal() &&
463
+ this.savedInertElements.length >
464
+ this.previousSavedInertElementsSize;
465
+
466
+ if (wasANewModalStackedOnTopOfAnExistingModal) {
467
+ // update private tracker in anticipation of more stacked modals
468
+ this.previousSavedInertElementsSize =
469
+ this.savedInertElements.length;
470
+ }
471
+
472
+ // 1. If focus is on a Modal, then track the last focussed element
473
+ if (isFocusTargetAModal) {
474
+ // Perf optimization: check if allTabbableElements needs updating
475
+ if (
476
+ !this.allTabbableElements ||
477
+ wasANewModalStackedOnTopOfAnExistingModal
478
+ ) {
479
+ this.allTabbableElements =
480
+ findAllTabbableElements(focusinEvtTarget);
481
+ }
482
+ const elementWithFocus = getElementWithFocus();
483
+ const isModalTitleText =
484
+ elementWithFocus.hasAttribute('data-label');
485
+ if (
486
+ isModalTitleText ||
487
+ this.allTabbableElements.indexOf(elementWithFocus) !== -1
488
+ ) {
489
+ // element is part of the Modal with current focus on it, track it
490
+ this.lastFocussedElementOnModal = elementWithFocus;
491
+ }
492
+ } // 2. If focus moved out of Modal, return focus to last element that was focussed.
493
+ else {
494
+ returnFocusToElement(this.lastFocussedElementOnModal);
495
+ }
496
+ });
497
+ }
498
+
421
499
  /**
422
500
  * Opening the modal involves first performing necessary steps to
423
501
  * prepare for when the modal closes
@@ -440,6 +518,10 @@ export default class LightningModalBase extends LightningElement {
440
518
  closeModal() {
441
519
  this.returnFocusToBackground();
442
520
  this.renderBackgroundActive(this.savedInertElements);
521
+ if (this.ariaObserver) {
522
+ this.ariaObserver.disconnect();
523
+ this.ariaObserver = undefined;
524
+ }
443
525
  }
444
526
 
445
527
  /**
@@ -456,6 +538,9 @@ export default class LightningModalBase extends LightningElement {
456
538
  });
457
539
  // console.error when label empty
458
540
  this.errorLabelRequired();
541
+ if (this.ariaObserver) {
542
+ this.ariaObserver.disconnect();
543
+ }
459
544
  };
460
545
 
461
546
  get isDescriptionSet() {
@@ -520,10 +605,12 @@ export default class LightningModalBase extends LightningElement {
520
605
  // headerLabelIsPopulated is equivalent labelIsEmpty, but from modalHeader level
521
606
  if (headerRegistered) {
522
607
  if (headerLabelId && headerLabelIsPopulated) {
523
- synchronizeAttrs(this.modalWrapper, {
524
- [ARIA.LABELLEDBY]: headerLabelId,
525
- [ARIA.LABEL]: null,
608
+ this.ariaObserver.connect({
609
+ targetNode: this.modalWrapper,
610
+ attribute: 'aria-labelledby',
611
+ relatedNodes: [this.headerTitleRef],
526
612
  });
613
+ synchronizeAttrs(this.modalWrapper, { [ARIA.LABEL]: null });
527
614
  // if labelId not set OR header label value not set,
528
615
  // must console.error
529
616
  } else {
@@ -746,7 +833,6 @@ export default class LightningModalBase extends LightningElement {
746
833
  // FUTURE TODO mechanism to support aria-describedby
747
834
  // aria-describedby is optional, without a good reproducible pattern
748
835
  this.initBodyState();
749
- this.removeWindowResizeEventListener();
750
836
  }
751
837
 
752
838
  /**
@@ -784,6 +870,9 @@ export default class LightningModalBase extends LightningElement {
784
870
  if (!this.windowOrientationEventBound) {
785
871
  this.addOrientationChangeListener();
786
872
  }
873
+ if (!this.focusinEventBound) {
874
+ this.addFocusinEventListener();
875
+ }
787
876
  }
788
877
 
789
878
  /**
@@ -997,6 +1086,16 @@ export default class LightningModalBase extends LightningElement {
997
1086
  clearTimeout(this.timeoutId);
998
1087
  this.timeoutId = 0;
999
1088
 
1089
+ if (this.updateHeaderCallback) {
1090
+ // Update the header size
1091
+ this.updateHeaderCallback({ size: this.size });
1092
+ }
1093
+
1094
+ if (this.updateFooterCallback) {
1095
+ // Update the footer size
1096
+ this.updateFooterCallback({ size: this.size });
1097
+ }
1098
+
1000
1099
  if (this.bodyRegistered && !this.bodyResizeScheduled) {
1001
1100
  // check, and update isSmallScreenSize before
1002
1101
  // callback to modalBody
@@ -1013,6 +1112,7 @@ export default class LightningModalBase extends LightningElement {
1013
1112
  backdropWidth: this.backdropDimensions.width,
1014
1113
  sizeSetFull: this.size === SIZE_FULL,
1015
1114
  isSmallScreenSize: this.isSmallScreenSize,
1115
+ size: this.size,
1016
1116
  };
1017
1117
  this.baseUpdateBodyCallback(values);
1018
1118
  }
@@ -1108,12 +1208,58 @@ export default class LightningModalBase extends LightningElement {
1108
1208
  }
1109
1209
  }
1110
1210
 
1211
+ /**
1212
+ * Helper method to determine when modals are being stacked.
1213
+ *
1214
+ * When stacked modals are present on the page,
1215
+ * elements in savedInertElements will have 'ariaHidden' attribute with a boolean true
1216
+ * @returns {boolean}
1217
+ */
1218
+ isStackedModal() {
1219
+ const { savedInertElements } = this;
1220
+ for (let i = 0; i < savedInertElements.length; i++) {
1221
+ const isAriaHidden = savedInertElements[i].ariaHidden;
1222
+ if (isAriaHidden) {
1223
+ return true;
1224
+ }
1225
+ }
1226
+ return false;
1227
+ }
1228
+
1229
+ /**
1230
+ * == W-12654751 P1 a11y bug ==
1231
+ *
1232
+ * Adds an event listener to listen and handle to 'focusin' events.
1233
+ * All Lightning Modals must trap user focus, while they are open.
1234
+ */
1235
+ addFocusinEventListener() {
1236
+ if (!this.focusinEventBound) {
1237
+ this.focusinEventBound = true;
1238
+ this.focusinEventHandler = this.handleFocusinEvents.bind(this);
1239
+ window.addEventListener('focusin', this.focusinEventHandler);
1240
+ }
1241
+ }
1242
+
1243
+ /**
1244
+ * == W-12654751 P1 a11y bug ==
1245
+ *
1246
+ * Remove event listener for 'focusin' events, only when the base modal is closed.
1247
+ * No-op when modals stacked on top of a base modal are closed.
1248
+ */
1249
+ removeFocusinEventListener() {
1250
+ if (this.focusinEventBound) {
1251
+ this.focusinEventBound = false;
1252
+ window.removeEventListener('focusin', this.focusinEventHandler);
1253
+ this.focusinEventHandler = null;
1254
+ }
1255
+ }
1256
+
1111
1257
  /**
1112
1258
  * determine if the current screen is less than SMALL_SCREEN_SIZE
1113
1259
  * for Modal, screen size detection is simplified to what's required
1114
1260
  * for the size="full" feature addition, which is a single breakpoint
1115
1261
  * either (a) at or below 480 pixels (small = full screen modal behavior),
1116
- * or (b) at or above 480 (large = default modal behavior)
1262
+ * or (b) at or above 481 (large = default modal behavior)
1117
1263
  * @private
1118
1264
  */
1119
1265
  setIsSmallScreenSize() {
@@ -1132,6 +1278,7 @@ export default class LightningModalBase extends LightningElement {
1132
1278
  removeModalEventListeners() {
1133
1279
  this.removeWindowResizeEventListener();
1134
1280
  this.removeOrientationChangeListener();
1281
+ this.removeFocusinEventListener();
1135
1282
  }
1136
1283
 
1137
1284
  /**
@@ -1176,6 +1323,7 @@ export default class LightningModalBase extends LightningElement {
1176
1323
  }
1177
1324
 
1178
1325
  connectedCallback() {
1326
+ super.connectedCallback();
1179
1327
  this.initModalState();
1180
1328
  // check for screen size right away
1181
1329
  // not adding event listeners here,
@@ -0,0 +1,2 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './modal-base.slds.css';
@@ -0,0 +1,18 @@
1
+ /* Modal close button */
2
+
3
+ /* Required for autofocus to work correctly:
4
+ - child elements of modal appear 'visibility: hidden' at
5
+ the moment that they are being reviewed for eligibility
6
+ for focus in focus.js at isElementVisible()
7
+ */
8
+ .fix-slds-modal,
9
+ :host([data-render-mode="shadow"]) .fix-slds-modal {
10
+ visibility: visible;
11
+ z-index: unset;
12
+ }
13
+
14
+ /* Required for z-index */
15
+ .fix-slds-backdrop,
16
+ :host([data-render-mode="shadow"]) .fix-slds-backdrop {
17
+ z-index: unset;
18
+ }
@@ -0,0 +1,61 @@
1
+
2
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
3
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
4
+
5
+ @supports (--styling-hooks: '') {
6
+ :host([data-render-mode="shadow"]) .slds-modal__content_headless {
7
+ border-start-end-radius: var(--slds-c-modalbody-radius-border, var(--slds-g-radius-border-2));
8
+ border-start-start-radius: var(--slds-c-modalbody-radius-border, var(--slds-g-radius-border-2));
9
+ }
10
+
11
+ :host([data-render-mode="shadow"]) .slds-modal__content {
12
+ /**
13
+ * Remap to SLDS blueprint hooks for parity
14
+ * https://www.lightningdesignsystem.com/components/modals/#Styling-Hooks-Overview
15
+ */
16
+ --slds-c-modal-content-color-background: var(--slds-c-modalbody-color-background);
17
+ --slds-c-modal-content-text-color: var(--slds-c-modalbody-text-color);
18
+
19
+ background-color: var(--slds-c-modalbody-color-background, var(--slds-g-color-surface-container-1));
20
+ color: var(--slds-c-modalbody-text-color);
21
+ overflow: hidden;
22
+ overflow-y: auto;
23
+ }
24
+
25
+ :host([data-render-mode="shadow"]) .slds-modal__content_footless {
26
+ border-bottom-right-radius: var(--slds-c-modalbody-radius-border, var(--slds-g-radius-border-2));
27
+ border-bottom-left-radius: var(--slds-c-modalbody-radius-border, var(--slds-g-radius-border-2));
28
+ box-shadow: var(--slds-c-modalbody-shadow, var(--slds-g-shadow-2));
29
+ }
30
+
31
+ /* Sizes: Full */
32
+
33
+ /* Original SLDS implementation was desktop-first. This is now mobile-first for <=480px */
34
+ @media (width <= 30em) {
35
+ :host([data-render-mode="shadow"][data-size='full']) [part='modal-body'] {
36
+ grid-area: content;
37
+ }
38
+
39
+ :host([data-render-mode="shadow"][data-size='full'][data-variant-footless]) [part='modal-body'] {
40
+ border-end-end-radius: 0;
41
+ border-end-start-radius: 0;
42
+ box-shadow: none;
43
+ }
44
+
45
+ /**
46
+ * INTERNAL USE ONLY - SUBJECT TO CHANGE AND REMOVAL
47
+ *
48
+ * SLDS Blueprint <> LBC Parity Patch
49
+ *
50
+ * SLDS blueprints and LBC implementation are not 1:1. This patch is needed to
51
+ * account for the differences introduced in the LBC implementation. Location
52
+ * of this code would ideally live within the LBC component CSS module but
53
+ * synthetic shadow and how LBC deconstructs the modal into individual components
54
+ * makes this not feasible. Not ideal, but this is the best solution for now.
55
+ * Selectors are scoped to lightning-* to avoid any potential outside conflicts.
56
+ */
57
+ :host([data-render-mode="shadow"][data-size='full']) {
58
+ display: contents;
59
+ }
60
+ }
61
+ }
@@ -0,0 +1 @@
1
+ @import './modalBody.lbc.native.css';
@@ -2,6 +2,7 @@
2
2
  <div
3
3
  id="modal-content"
4
4
  class={modalBodyCssClasses}
5
+ part="modal-body"
5
6
  data-content-container
6
7
  onprivatescrollablecontainer={handleScrollableContainerRepositionEvent}
7
8
  >
@@ -1,4 +1,4 @@
1
- import { LightningElement } from 'lwc';
1
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
2
2
  import { classSet } from 'lightning/utils';
3
3
  import { getRealDOMId } from 'lightning/utilsPrivate';
4
4
  import { findAllTabbableElements, filterTooltips } from 'lightning/focusUtils';
@@ -6,7 +6,7 @@ import { findAllTabbableElements, filterTooltips } from 'lightning/focusUtils';
6
6
  /**
7
7
  * The modal body component to display main content area in lightning modal.
8
8
  * */
9
- export default class LightningModalBody extends LightningElement {
9
+ export default class LightningModalBody extends LightningShadowBaseClass {
10
10
  // private tracked state
11
11
  initialRender = true;
12
12
  initialSlotRender = true;
@@ -243,6 +243,7 @@ export default class LightningModalBody extends LightningElement {
243
243
  const {
244
244
  sizeSetFull,
245
245
  isSmallScreenSize,
246
+ size,
246
247
  headerHeight,
247
248
  footerHeight,
248
249
  } = values;
@@ -254,6 +255,17 @@ export default class LightningModalBody extends LightningElement {
254
255
  const updatedValues = this.updateValues(values);
255
256
  // set updated values based on behavior
256
257
  this.setModalBodyHeight(updatedValues, shouldUseFullHeight);
258
+
259
+ // update host variant and size based on header and footer height
260
+ if (!this.headerPresent) {
261
+ this.setAttribute('data-variant-headless', '');
262
+ }
263
+ if (!this.footerPresent) {
264
+ this.setAttribute('data-variant-footless', '');
265
+ }
266
+
267
+ // set the host size based on the modal base size
268
+ this.setAttribute('data-size', size);
257
269
  }
258
270
  }
259
271
 
@@ -296,6 +308,7 @@ export default class LightningModalBody extends LightningElement {
296
308
  }
297
309
 
298
310
  connectedCallback() {
311
+ super.connectedCallback();
299
312
  // handle case where modalBody is added/removed/re-added to DOM
300
313
  this.initState();
301
314
  }
@@ -0,0 +1,3 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import 'lightning/sldsUtilsPadding';
3
+ @import './modal-body.slds.css';
@@ -0,0 +1,79 @@
1
+
2
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
3
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
4
+
5
+ @supports (--styling-hooks: '') {
6
+ :host([data-render-mode="shadow"]) .slds-modal__footer {
7
+
8
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-deprecated */
9
+
10
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
11
+
12
+ /**
13
+ * Remap to SLDS blueprint hooks for parity
14
+ * https://www.lightningdesignsystem.com/components/modals/#Styling-Hooks-Overview
15
+ */
16
+ --slds-c-modal-footer-color-background: var(--slds-c-modalfooter-color-background);
17
+ --slds-c-modal-footer-text-color: var(--slds-c-modalfooter-text-color);
18
+ --slds-c-modal-footer-spacing-block-start: var(--slds-c-modalfooter-spacing-block-start);
19
+ --slds-c-modal-footer-spacing-inline-end: var(--slds-c-modalfooter-spacing-inline-end);
20
+ --slds-c-modal-footer-spacing-block-end: var(--slds-c-modalfooter-spacing-block-end);
21
+ --slds-c-modal-footer-spacing-inline-start: var(--slds-c-modalfooter-spacing-inline-start);
22
+
23
+ border-end-end-radius: var(--slds-c-modalfooter-radius-border, var(--slds-g-radius-border-2));
24
+ border-end-start-radius: var(--slds-c-modalfooter-radius-border, var(--slds-g-radius-border-2));
25
+ border-block-start-width: var(--slds-c-modalfooter-sizing-border, var(--slds-g-sizing-border-2));
26
+ border-block-start-style: solid;
27
+ border-block-start-color: var(--slds-c-modalfooter-color-border, var(--slds-g-color-border-1));
28
+ background-color: var(--slds-c-modalfooter-color-background, var(--slds-g-color-surface-container-2));
29
+ color: var(--slds-c-modalfooter-text-color);
30
+ -ms-flex-negative: 0;
31
+ flex-shrink: 0;
32
+ padding-block-start: var(--slds-c-modalfooter-spacing-block-start, var(--slds-g-spacing-3));
33
+ padding-inline-end: var(--slds-c-modalfooter-spacing-inline-end, var(--slds-g-spacing-4));
34
+ padding-block-end: var(--slds-c-modalfooter-spacing-block-end, var(--slds-g-spacing-3));
35
+ padding-inline-start: var(--slds-c-modalfooter-spacing-inline-start, var(--slds-g-spacing-4));
36
+ text-align: right;
37
+ box-shadow: var(--slds-c-modalfooter-shadow, 0 2px 3px 0 rgba(0, 0, 0, 16%));
38
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-deprecated */
39
+
40
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
41
+ }
42
+
43
+ /* TODO W-12674349: Replace with visibility utility classes when available */
44
+ :host([data-render-mode="shadow"]) .slds-hide {
45
+ display: none !important;
46
+ }
47
+
48
+ /* Sizes: Full */
49
+
50
+ /* Original SLDS implementation was desktop-first. This is now mobile-first for <=480px */
51
+ @media (width <= 30em) {
52
+ :host([data-render-mode="shadow"][data-size='full']) [part='modal-footer'] {
53
+ grid-area: footer;
54
+ border-start-end-radius: 0;
55
+ border-end-start-radius: 0;
56
+ box-shadow: none;
57
+ }
58
+
59
+ /**
60
+ * INTERNAL USE ONLY - SUBJECT TO CHANGE AND REMOVAL
61
+ *
62
+ * SLDS Blueprint <> LBC Parity Patch
63
+ *
64
+ * SLDS blueprints and LBC implementation are not 1:1. This patch is needed to
65
+ * account for the differences introduced in the LBC implementation. Location
66
+ * of this code would ideally live within the LBC component CSS module but
67
+ * synthetic shadow and how LBC deconstructs the modal into individual components
68
+ * makes this not feasible. Not ideal, but this is the best solution for now.
69
+ * Selectors are scoped to lightning-* to avoid any potential outside conflicts.
70
+ */
71
+ :host([data-render-mode="shadow"][data-size='full']) {
72
+ display: contents;
73
+ }
74
+ }
75
+
76
+ :host([data-render-mode="shadow"]) .slds-modal__footer .slds-button + .slds-button {
77
+ margin-left: var(--slds-g-spacing-2);
78
+ }
79
+ }
@@ -0,0 +1 @@
1
+ @import './modalFooter.lbc.native.css';
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class={footerCssClasses}>
2
+ <div class={footerCssClasses} part="modal-footer">
3
3
  <slot
4
4
  data-footer-slot
5
5
  onslotchange={handleDefaultSlotChange}
@@ -1,4 +1,4 @@
1
- import { LightningElement } from 'lwc';
1
+ import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
2
2
  import { classSet } from 'lightning/utils';
3
3
  import { findAllTabbableElements, filterTooltips } from 'lightning/focusUtils';
4
4
 
@@ -12,7 +12,7 @@ const footerSlotSelector = '[data-footer-slot]';
12
12
  /**
13
13
  * The modal footer component to display footer content in lightning modal.
14
14
  * */
15
- export default class LightningModalFooter extends LightningElement {
15
+ export default class LightningModalFooter extends LightningShadowBaseClass {
16
16
  // tracked private state
17
17
  initialRender = true;
18
18
  initialSlotRender = true;
@@ -140,6 +140,7 @@ export default class LightningModalFooter extends LightningElement {
140
140
  }
141
141
 
142
142
  connectedCallback() {
143
+ super.connectedCallback();
143
144
  // handle case where modalFooter is added/removed/added to DOM
144
145
  // so registerWithParent gets called
145
146
  this.initState();
@@ -0,0 +1,2 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './modal-footer.slds.css';
@@ -0,0 +1,77 @@
1
+
2
+ /* Copyright (c) 2015-present, salesforce.com, inc. All rights reserved
3
+ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
4
+
5
+ @supports (--styling-hooks: '') {
6
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-deprecated */
7
+
8
+ /* stylelint-disable sds-stylelint-plugin/styling-hooks-pattern */
9
+
10
+ :host([data-render-mode="shadow"]) .slds-modal__header {
11
+ /**
12
+ * Remap to SLDS blueprint hooks for parity
13
+ * https://www.lightningdesignsystem.com/components/modals/#Styling-Hooks-Overview
14
+ */
15
+ --slds-c-modal-header-color-background: var(--slds-c-modalheader-color-background);
16
+ --slds-c-modal-header-text-color: var(--slds-c-modalheader-text-color);
17
+ --slds-c-modal-header-spacing-block-start: var(--slds-c-modalheader-spacing-block-start);
18
+ --slds-c-modal-header-spacing-inline-end: var(--slds-c-modalheader-spacing-inline-end);
19
+ --slds-c-modal-header-spacing-block-end: var(--slds-c-modalheader-spacing-block-end);
20
+ --slds-c-modal-header-spacing-inline-start: var(--slds-c-modalheader-spacing-inline-start);
21
+
22
+ --slds-c-modal-heading-font-size: var(--slds-c-modalheader-heading-font-size);
23
+ --slds-c-modal-heading-font-weight: var(--slds-c-modalheader-heading-font-weight);
24
+ --slds-c-modal-heading-font-lineheight: var(--slds-c-modalheader-heading-font-lineheight);
25
+
26
+ position: relative;
27
+ border-start-end-radius: var(--slds-c-modalheader-radius-border, var(--slds-g-radius-border-2));
28
+ border-start-start-radius: var(--slds-c-modalheader-radius-border, var(--slds-g-radius-border-2));
29
+ border-block-end-width: var(--slds-c-modalheader-sizing-border, var(--slds-g-sizing-border-2));
30
+ border-block-end-style: solid;
31
+ border-block-end-color: var(--slds-c-modalheader-color-border, var(--slds-g-color-border-1));
32
+ background-color: var(--slds-c-modalheader-color-background, var(--slds-g-color-surface-container-1));
33
+ color: var(--slds-c-modalheader-text-color);
34
+ flex-shrink: 0;
35
+ padding-block-start: var(--slds-c-modalheader-spacing-block-start, var(--slds-g-spacing-4));
36
+ padding-inline-end: var(--slds-c-modalheader-spacing-inline-end, var(--slds-g-spacing-4));
37
+ padding-block-end: var(--slds-c-modalheader-spacing-block-end, var(--slds-g-spacing-4));
38
+ padding-inline-start: var(--slds-c-modalheader-spacing-inline-start, var(--slds-g-spacing-4));
39
+ text-align: center;
40
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-deprecated */
41
+
42
+ /* stylelint-enable sds-stylelint-plugin/styling-hooks-pattern */
43
+ }
44
+
45
+ :host([data-render-mode="shadow"]) .slds-modal__title {
46
+ font-weight: var(--slds-c-modalheader-heading-font-weight);
47
+ font-size: var(--slds-c-modalheader-heading-font-size, 1.25rem);
48
+ line-height: var(--slds-c-modalheader-heading-font-lineheight, var(--slds-g-font-lineheight-2));
49
+ }
50
+
51
+ /* Sizes: Full */
52
+
53
+ /* Original SLDS implementation was desktop-first. This is now mobile-first for <=480px */
54
+ @media (width <= 30em) {
55
+ :host([data-render-mode="shadow"][data-size='full']) [part='modal-header'] {
56
+ grid-area: header;
57
+ border-start-start-radius: 0;
58
+ border-start-end-radius: 0;
59
+ }
60
+
61
+ /**
62
+ * INTERNAL USE ONLY - SUBJECT TO CHANGE AND REMOVAL
63
+ *
64
+ * SLDS Blueprint <> LBC Parity Patch
65
+ *
66
+ * SLDS blueprints and LBC implementation are not 1:1. This patch is needed to
67
+ * account for the differences introduced in the LBC implementation. Location
68
+ * of this code would ideally live within the LBC component CSS module but
69
+ * synthetic shadow and how LBC deconstructs the modal into individual components
70
+ * makes this not feasible. Not ideal, but this is the best solution for now.
71
+ * Selectors are scoped to lightning-* to avoid any potential outside conflicts.
72
+ */
73
+ :host([data-render-mode="shadow"][data-size='full']) {
74
+ display: contents;
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,3 @@
1
+ @import 'lightning/sldsCommon';
2
+ @import './modal-header.slds.css';
3
+ @import 'lightning/sldsUtilsHyphenation';
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="slds-modal__header">
2
+ <div class="slds-modal__header" part="modal-header">
3
3
  <template if:true={label}>
4
4
  <h1
5
5
  id="modal-label"