lightning-base-components 1.22.1-alpha → 1.22.3-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 (127) hide show
  1. package/README.md +2 -0
  2. package/metadata/raptor.json +38 -2
  3. package/package.json +12 -1
  4. package/scopedImports/@salesforce-label-LightningRecordPicker.actionIconAlternativeText.js +1 -0
  5. package/src/lightning/accordionSection/button.slds.css +8 -0
  6. package/src/lightning/ariaObserver/ariaObserver.js +1 -1
  7. package/src/lightning/baseCombobox/baseCombobox.html +1 -1
  8. package/src/lightning/baseCombobox/baseCombobox.js +1 -0
  9. package/src/lightning/baseCombobox/dropdown.slds.css +7 -7
  10. package/src/lightning/baseComboboxItem/card.lbc.native.css +1 -0
  11. package/src/lightning/baseComboboxItem/inline.lbc.native.css +1 -0
  12. package/src/lightning/button/button.slds.css +8 -0
  13. package/src/lightning/buttonIcon/button-icon.slds.css +8 -0
  14. package/src/lightning/buttonIcon/buttonIcon.js +29 -26
  15. package/src/lightning/buttonIconStateful/button-icon.slds.css +8 -0
  16. package/src/lightning/buttonIconStateful/button.slds.css +8 -0
  17. package/src/lightning/buttonMenu/button-icon.slds.css +8 -0
  18. package/src/lightning/buttonMenu/button.slds.css +8 -0
  19. package/src/lightning/buttonMenu/dropdown.slds.css +7 -7
  20. package/src/lightning/buttonStateful/button.slds.css +8 -0
  21. package/src/lightning/calendar/calendar.lbc.native.css +1 -0
  22. package/src/lightning/calendar/dropdown.slds.css +7 -7
  23. package/src/lightning/checkboxGroup/checkboxGroup.js +21 -10
  24. package/src/lightning/checkboxGroup/checkboxGroup.js-meta.xml +3 -0
  25. package/src/lightning/colorPickerPanel/colorPickerPanel.js +1 -11
  26. package/src/lightning/combobox/combobox.html +1 -1
  27. package/src/lightning/datatable/__docs__/datatable.md +10 -5
  28. package/src/lightning/datatable/autoWidthStrategy.js +32 -44
  29. package/src/lightning/datatable/columnResizer.js +3 -2
  30. package/src/lightning/datatable/columnWidthManager.js +16 -10
  31. package/src/lightning/datatable/columns.js +4 -1
  32. package/src/lightning/datatable/datatable.js +108 -46
  33. package/src/lightning/datatable/infiniteLoading.js +8 -20
  34. package/src/lightning/datatable/inlineEdit.js +11 -6
  35. package/src/lightning/datatable/keyboard.js +58 -55
  36. package/src/lightning/datatable/resizeObserver.js +10 -5
  37. package/src/lightning/datatable/rows.js +3 -3
  38. package/src/lightning/datatable/rowsInlining.js +5 -4
  39. package/src/lightning/datatable/state.js +1 -2
  40. package/src/lightning/datatable/templates/div/div.html +150 -43
  41. package/src/lightning/datatable/templates/div/div.lbc.synthetic.css +8 -7
  42. package/src/lightning/datatable/templates/table/table.html +153 -46
  43. package/src/lightning/datatable/utils.js +10 -4
  44. package/src/lightning/datatable/virtualization.js +6 -4
  45. package/src/lightning/datatable/wrapText.js +16 -15
  46. package/src/lightning/groupedCombobox/groupedCombobox.js +21 -28
  47. package/src/lightning/helptext/button-icon.slds.css +8 -0
  48. package/src/lightning/helptext/helptext.html +2 -1
  49. package/src/lightning/helptext/helptext.js +0 -12
  50. package/src/lightning/input/input.html +0 -1
  51. package/src/lightning/interactiveDialogBase/button.slds.css +8 -0
  52. package/src/lightning/modal/__docs__/modal.md +2 -0
  53. package/src/lightning/modalBase/modalBase.html +2 -0
  54. package/src/lightning/modalBase/modalBase.js +30 -31
  55. package/src/lightning/modalBody/modalBody.html +1 -0
  56. package/src/lightning/modalBody/modalBody.js +3 -0
  57. package/src/lightning/modalFooter/modalFooter.html +5 -1
  58. package/src/lightning/modalFooter/modalFooter.js +3 -0
  59. package/src/lightning/modalHeader/modalHeader.html +4 -1
  60. package/src/lightning/modalHeader/modalHeader.js +3 -0
  61. package/src/lightning/overlayManager/overlayManager.js +1 -1
  62. package/src/lightning/pillContainer/button.slds.css +8 -0
  63. package/src/lightning/positionLibrary/elementProxy.js +13 -6
  64. package/src/lightning/positionLibrary/util.js +20 -2
  65. package/src/lightning/primitiveBubble/primitiveBubble.js +9 -4
  66. package/src/lightning/primitiveCellActions/primitiveCellActions.html +1 -0
  67. package/src/lightning/primitiveCellActions/primitiveCellActions.js +3 -5
  68. package/src/lightning/primitiveCellButton/primitiveCellButton.html +2 -0
  69. package/src/lightning/primitiveCellButton/primitiveCellButton.js +3 -5
  70. package/src/lightning/primitiveCellCheckbox/checkbox.html +3 -2
  71. package/src/lightning/primitiveCellCheckbox/primitiveCellCheckbox.js +6 -3
  72. package/src/lightning/primitiveCellCheckbox/radio.html +5 -4
  73. package/src/lightning/primitiveCellEditableButton/primitiveCellEditableButton.html +1 -1
  74. package/src/lightning/primitiveCellEditableButton/primitiveCellEditableButton.js +1 -1
  75. package/src/lightning/primitiveCellFactory/bareCustomCell.html +1 -0
  76. package/src/lightning/primitiveCellFactory/cellWithStandardLayout.html +1 -0
  77. package/src/lightning/primitiveCellFactory/primitiveCellFactory.js +4 -6
  78. package/src/lightning/primitiveColumnSorter/primitiveColumnSorter.html +1 -0
  79. package/src/lightning/primitiveColumnSorter/primitiveColumnSorter.js +1 -1
  80. package/src/lightning/primitiveDatatableIeditPanel/primitiveDatatableIeditPanel.html +3 -1
  81. package/src/lightning/primitiveDatatableIeditPanel/primitiveDatatableIeditPanel.js +3 -3
  82. package/src/lightning/primitiveDatatableStatusBar/primitiveDatatableStatusBar.html +1 -0
  83. package/src/lightning/primitiveDatatableStatusBar/primitiveDatatableStatusBar.js +1 -3
  84. package/src/lightning/primitiveDatatableTooltip/primitiveDatatableTooltip.html +1 -0
  85. package/src/lightning/primitiveDatatableTooltip/primitiveDatatableTooltip.js +1 -1
  86. package/src/lightning/primitiveDatatableTooltipBubble/primitiveDatatableTooltipBubble.html +1 -1
  87. package/src/lightning/primitiveDatatableTooltipBubble/primitiveDatatableTooltipBubble.js +1 -1
  88. package/src/lightning/primitiveHeaderActions/primitiveHeaderActions.html +2 -0
  89. package/src/lightning/primitiveHeaderActions/primitiveHeaderActions.js +2 -4
  90. package/src/lightning/primitiveHeaderFactory/nonsortableHeader.html +8 -3
  91. package/src/lightning/primitiveHeaderFactory/primitiveHeaderFactory.js +43 -13
  92. package/src/lightning/primitiveHeaderFactory/selectableHeader.html +3 -2
  93. package/src/lightning/primitiveHeaderFactory/sortableHeader.html +8 -3
  94. package/src/lightning/primitiveHeaderFactory/sortingMenuHeader.html +1 -1
  95. package/src/lightning/primitiveIcon/primitiveIcon.css +0 -1
  96. package/src/lightning/primitiveInputFile/button.slds.css +8 -0
  97. package/src/lightning/primitiveResizeHandler/primitiveResizeHandler.html +4 -2
  98. package/src/lightning/primitiveResizeHandler/primitiveResizeHandler.js +2 -2
  99. package/src/lightning/primitiveTreegridCellToggle/primitiveTreegridCellToggle.html +1 -1
  100. package/src/lightning/primitiveTreegridCellToggle/primitiveTreegridCellToggle.js +1 -1
  101. package/src/lightning/progressIndicator/progressIndicator.css +1 -1
  102. package/src/lightning/progressIndicator/progressIndicator.js +14 -6
  103. package/src/lightning/progressIndicator/progressIndicator.js-meta.xml +3 -0
  104. package/src/lightning/progressIndicator/progressIndicator.lbc.native.css +2 -0
  105. package/src/lightning/progressStep/__examples__/basic/basic.html +11 -0
  106. package/src/lightning/progressStep/__examples__/basic/basic.js +3 -0
  107. package/src/lightning/progressStep/__examples__/shaded/shaded.html +11 -0
  108. package/src/lightning/progressStep/__examples__/shaded/shaded.js +3 -0
  109. package/src/lightning/progressStep/base.html +2 -1
  110. package/src/lightning/progressStep/progressStep.css +1 -0
  111. package/src/lightning/progressStep/progressStep.js +40 -29
  112. package/src/lightning/progressStep/progressStep.js-meta.xml +3 -0
  113. package/src/lightning/progressStep/progressStep.lbc.native.css +3 -0
  114. package/src/lightning/sldsCommon/sldsCommon.css +1 -1
  115. package/src/lightning/sldsUtilsThemes/sldsUtilsThemes.css +6 -4
  116. package/src/lightning/tabBar/tab-bar.slds.css +17 -3
  117. package/src/lightning/tile/mediaTile.css +2 -0
  118. package/src/lightning/tile/standardTile.css +2 -1
  119. package/src/lightning/tile/tile.js +5 -2
  120. package/src/lightning/tile/tile.js-meta.xml +3 -0
  121. package/src/lightning/tile/tile.lbc.native.css +4 -0
  122. package/src/lightning/toast/button-icon.slds.css +8 -0
  123. package/src/lightning/tooltipLibrary/tooltipLibrary.js +15 -4
  124. package/src/lightning/utilsPrivate/utilsPrivate.js +4 -4
  125. package/src/lightning/verticalNavigationOverflow/button.slds.css +8 -0
  126. package/src/lightning/primitiveIcon/primitiveIcon.lbc.synthetic.css +0 -9
  127. /package/src/lightning/tile/{standardTile.lbc.synthetic.css → tile.lbc.synthetic.css} +0 -0
@@ -5,8 +5,8 @@
5
5
  <span data-keyboard-mode="navigation" class={computedAriaLiveClassForNavMode}>{i18n.ariaLiveNavigationMode}</span>
6
6
  <span data-keyboard-mode="action" class={computedAriaLiveClassForActionMode}>{i18n.ariaLiveActionMode}</span>
7
7
  </span>
8
- <div lwc:dom="manual" class="dt-width-observer" style="width: 100%; height: 0px;"></div>
9
- <div class="dt-outer-container" style="height: 100%; position: relative;">
8
+ <div lwc:ref="widthObserver" lwc:dom="manual" class="dt-width-observer" style="width: 100%; height: 0px;"></div>
9
+ <div lwc:ref="outerContainer" class="dt-outer-container" style="height: 100%; position: relative;">
10
10
  <!-- Inline Edit Panel -->
11
11
  <lightning-primitive-datatable-iedit-panel
12
12
  data-iedit-panel="true"
@@ -22,10 +22,11 @@
22
22
  onmasscheckboxchange={handleMassCheckboxChange}>
23
23
  </lightning-primitive-datatable-iedit-panel>
24
24
  <!-- Table Container -->
25
- <div class={computedTableContainerClass} onscroll={handleHorizontalScroll} style={computedScrollerXStyle}>
26
- <div class="slds-scrollable_y" onscroll={handleVerticalScroll} style={computedScrollerYStyle}>
25
+ <div lwc:ref="scrollerX" class={computedTableContainerClass} onscroll={handleHorizontalScroll} style={computedScrollerXStyle}>
26
+ <div lwc:ref="scrollerY" class="slds-scrollable_y" onscroll={handleVerticalScroll} style={computedScrollerYStyle}>
27
27
  <!-- Table -->
28
- <table class={computedTableClass}
28
+ <table lwc:ref="tableElement"
29
+ class={computedTableClass}
29
30
  role={computedTableRole}
30
31
  style={computedTableStyle}
31
32
  onkeydown={handleTableKeydown}
@@ -66,6 +67,7 @@
66
67
  style={def.style}
67
68
  def={def}
68
69
  dt-context-id={_datatableId}
70
+ header-height={_headerHeight}
69
71
  key={def.colKeyValue}
70
72
  row-key-value="HEADER"
71
73
  col-key-value={def.colKeyValue}
@@ -79,7 +81,8 @@
79
81
  show-checkbox={showSelectAllCheckbox}
80
82
  hide-header={hideTableHeader}
81
83
  onprivatecolumnheaderid={handleCheckboxHeaderId}
82
- wrap-table-header={wrapTableHeader}>
84
+ wrap-table-header={wrapTableHeader}
85
+ wrap-text-max-lines={state.wrapTextMaxLines}>
83
86
  </lightning-primitive-header-factory>
84
87
  </template>
85
88
  <template if:false={def.fixedWidth}>
@@ -93,6 +96,7 @@
93
96
  col-key-value={def.colKeyValue}
94
97
  col-index={colIndex}
95
98
  has-focus={def.hasFocus}
99
+ header-height={_headerHeight}
96
100
  actions={def.actions}
97
101
  sortable={def.sortable}
98
102
  sorted={def.sorted}
@@ -102,7 +106,8 @@
102
106
  resizestep={widthsData.resizeStep}
103
107
  hide-header={hideTableHeader}
104
108
  onprivatecolumnheaderid={handleCheckboxHeaderId}
105
- wrap-table-header={wrapTableHeader}>
109
+ wrap-table-header={wrapTableHeader}
110
+ wrap-text-max-lines={state.wrapTextMaxLines}>
106
111
  </lightning-primitive-header-factory>
107
112
  </template>
108
113
  </th>
@@ -259,10 +264,23 @@
259
264
  <!-- boolean -->
260
265
  <template if:true={cell.isBoolean}>
261
266
  <template if:true={cell.isChecked}>
262
- <lightning-primitive-icon
263
- size="x-small"
264
- icon-name="utility:check">
265
- </lightning-primitive-icon>
267
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
268
+ <!-- START utility:check -->
269
+ <template lwc:if={cell.isRTL}>
270
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="check" aria-hidden="true" viewBox="0 0 520 520" part="icon">
271
+ <g>
272
+ <path d="M191 425L26 259c-6-6-6-16 0-22l22-22c6-6 16-6 22 0l124 125a10 10 0 0015 0L452 95c6-6 16-6 22 0l22 22c6 6 6 16 0 22L213 425c-6 7-16 7-22 0z"></path>
273
+ </g>
274
+ </svg>
275
+ </template>
276
+ <template lwc:else>
277
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="check" aria-hidden="true" viewBox="0 0 520 520" part="icon">
278
+ <g>
279
+ <path d="M191 425L26 259c-6-6-6-16 0-22l22-22c6-6 16-6 22 0l124 125a10 10 0 0015 0L452 95c6-6 16-6 22 0l22 22c6 6 6 16 0 22L213 425c-6 7-16 7-22 0z"></path>
280
+ </g>
281
+ </svg>
282
+ </template>
283
+ <!-- END utility:check -->
266
284
  </template>
267
285
  <span class="slds-assistive-text">{cell.booleanCellAssistiveText}</span>
268
286
  </template>
@@ -333,11 +351,24 @@
333
351
  href={cell.emailLink}
334
352
  tabindex={cell.internalTabIndex}>
335
353
  <template if:false={cell.emailIconHidden}>
336
- <lightning-primitive-icon
337
- icon-name="utility:email"
338
- size="x-small">
339
- </lightning-primitive-icon>
340
- <span class="slds-assistive-text">{cell.emailIconAssistiveText}</span>
354
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
355
+ <!-- START utility:email -->
356
+ <template lwc:if={cell.isRTL}>
357
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="email" aria-hidden="true" viewBox="0 0 520 520" part="icon">
358
+ <g>
359
+ <path d="M249 301c6 6 15 6 21 0L496 91c4-8 3-21-13-21L36 71c-12 0-22 11-13 21zm251-128c0-10-12-16-20-9L303 327c-12 11-27 17-43 17s-31-6-43-16L41 164c-8-7-20-2-20 9-1-3-1 227-1 227a40 40 0 0040 40h400a40 40 0 0040-40z"></path>
360
+ </g>
361
+ </svg>
362
+ </template>
363
+ <template lwc:else>
364
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="email" aria-hidden="true" viewBox="0 0 520 520" part="icon">
365
+ <g>
366
+ <path d="M249 301c6 6 15 6 21 0L496 91c4-8 3-21-13-21L36 71c-12 0-22 11-13 21zm251-128c0-10-12-16-20-9L303 327c-12 11-27 17-43 17s-31-6-43-16L41 164c-8-7-20-2-20 9-1-3-1 227-1 227a40 40 0 0040 40h400a40 40 0 0040-40z"></path>
367
+ </g>
368
+ </svg>
369
+ </template>
370
+ <!-- END utility:email -->
371
+ <span class="slds-assistive-text">{cell.emailIconAssistiveText}</span>
341
372
  </template> {cell.emailLabel}
342
373
  </a>
343
374
  </template>
@@ -492,17 +523,30 @@
492
523
  </div>
493
524
  <template if:true={cell.isEditable}>
494
525
  <button class="slds-button slds-button_icon slds-cell-edit__button slds-m-left_x-small"
526
+ aria-labelledby={cell.editLabelId}
495
527
  data-action-edit="true"
496
528
  data-action-triggers="enter,space"
497
529
  data-navigation="enable"
498
530
  tabindex={cell.internalTabIndex}
499
531
  onclick={handleInlinedEditButtonClick}>
500
- <lightning-primitive-icon
501
- icon-name="utility:edit"
502
- size="xx-small"
503
- svg-class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_small slds-button__icon_edit">
504
- </lightning-primitive-icon>
505
- <span class="slds-assistive-text">
532
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
533
+ <!-- START utility:edit -->
534
+ <template lwc:if={cell.isRTL}>
535
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="edit" aria-hidden="true" viewBox="0 0 520 520" part="icon">
536
+ <g>
537
+ <path d="M95 334l89 89c4 4 10 4 14 0l222-223c4-4 4-10 0-14l-88-88a10 10 0 00-14 0L95 321c-4 4-4 10 0 13zM361 57a10 10 0 000 14l88 88c4 4 10 4 14 0l25-25a38 38 0 000-55l-47-47a40 40 0 00-57 0zM21 482c-2 10 7 19 17 17l109-26c4-1 7-3 9-5l2-2c2-2 3-9-1-13l-90-90c-4-4-11-3-13-1l-2 2a20 20 0 00-5 9z"></path>
538
+ </g>
539
+ </svg>
540
+ </template>
541
+ <template lwc:else>
542
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="edit" aria-hidden="true" viewBox="0 0 520 520" part="icon">
543
+ <g>
544
+ <path d="M95 334l89 89c4 4 10 4 14 0l222-223c4-4 4-10 0-14l-88-88a10 10 0 00-14 0L95 321c-4 4-4 10 0 13zM361 57a10 10 0 000 14l88 88c4 4 10 4 14 0l25-25a38 38 0 000-55l-47-47a40 40 0 00-57 0zM21 482c-2 10 7 19 17 17l109-26c4-1 7-3 9-5l2-2c2-2 3-9-1-13l-90-90c-4-4-11-3-13-1l-2 2a20 20 0 00-5 9z"></path>
545
+ </g>
546
+ </svg>
547
+ </template>
548
+ <!-- END utility:edit -->
549
+ <span hidden id={cell.editLabelId}>
506
550
  {cell.editIconAssistiveText}
507
551
  </span>
508
552
  </button>
@@ -513,11 +557,23 @@
513
557
  <template if:true={cell.shouldDisplayReadOnlyIcon}>
514
558
  <!-- TODO: Update the svg-classes once the SLDS team updates their read only icon design to not use classes that have the word 'button'
515
559
  in them in cases when the cell is read only and hence no button is actually rendered -->
516
- <lightning-primitive-icon
517
- icon-name="utility:lock"
518
- size="xx-small"
519
- svg-class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_small">
520
- </lightning-primitive-icon>
560
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
561
+ <!-- START utility:lock -->
562
+ <template lwc:if={cell.isRTL}>
563
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="lock" aria-hidden="true" viewBox="0 0 520 520" part="icon">
564
+ <g>
565
+ <path d="M110 190h40c6 0 10-3 10-9v-1A100 100 0 01267 80c53 4 93 50 93 104v-3c0 6 4 9 10 9h40c6 0 10-3 10-9v-1A160 160 0 00252 20c-85 4-150 76-152 161 1 5 5 9 10 9zm-10-9v4zm360 89a40 40 0 00-40-40H100a40 40 0 00-40 40v190a40 40 0 0040 40h320a40 40 0 0040-40zM306 427c2 6-3 13-10 13h-73c-7 0-11-6-10-13l18-60a48 48 0 01-21-48 50 50 0 0139-38c32-6 60 17 60 47 0 16-8 31-21 39z"></path>
566
+ </g>
567
+ </svg>
568
+ </template>
569
+ <template lwc:else>
570
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="lock" aria-hidden="true" viewBox="0 0 520 520" part="icon">
571
+ <g>
572
+ <path d="M110 190h40c6 0 10-3 10-9v-1A100 100 0 01267 80c53 4 93 50 93 104v-3c0 6 4 9 10 9h40c6 0 10-3 10-9v-1A160 160 0 00252 20c-85 4-150 76-152 161 1 5 5 9 10 9zm-10-9v4zm360 89a40 40 0 00-40-40H100a40 40 0 00-40 40v190a40 40 0 0040 40h320a40 40 0 0040-40zM306 427c2 6-3 13-10 13h-73c-7 0-11-6-10-13l18-60a48 48 0 01-21-48 50 50 0 0139-38c32-6 60 17 60 47 0 16-8 31-21 39z"></path>
573
+ </g>
574
+ </svg>
575
+ </template>
576
+ <!-- END utility:lock -->
521
577
  </template>
522
578
  </span>
523
579
  </template>
@@ -645,10 +701,23 @@
645
701
  <!-- boolean -->
646
702
  <template if:true={cell.isBoolean}>
647
703
  <template if:true={cell.isChecked}>
648
- <lightning-primitive-icon
649
- size="x-small"
650
- icon-name="utility:check">
651
- </lightning-primitive-icon>
704
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
705
+ <!-- START utility:check -->
706
+ <template lwc:if={cell.isRTL}>
707
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="check" aria-hidden="true" viewBox="0 0 520 520" part="icon">
708
+ <g>
709
+ <path d="M191 425L26 259c-6-6-6-16 0-22l22-22c6-6 16-6 22 0l124 125a10 10 0 0015 0L452 95c6-6 16-6 22 0l22 22c6 6 6 16 0 22L213 425c-6 7-16 7-22 0z"></path>
710
+ </g>
711
+ </svg>
712
+ </template>
713
+ <template lwc:else>
714
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="check" aria-hidden="true" viewBox="0 0 520 520" part="icon">
715
+ <g>
716
+ <path d="M191 425L26 259c-6-6-6-16 0-22l22-22c6-6 16-6 22 0l124 125a10 10 0 0015 0L452 95c6-6 16-6 22 0l22 22c6 6 6 16 0 22L213 425c-6 7-16 7-22 0z"></path>
717
+ </g>
718
+ </svg>
719
+ </template>
720
+ <!-- END utility:check -->
652
721
  </template>
653
722
  <span class="slds-assistive-text">{cell.booleanCellAssistiveText}</span>
654
723
  </template>
@@ -719,10 +788,23 @@
719
788
  href={cell.emailLink}
720
789
  tabindex={cell.internalTabIndex}>
721
790
  <template if:false={cell.emailIconHidden}>
722
- <lightning-primitive-icon
723
- icon-name="utility:email"
724
- size="x-small">
725
- </lightning-primitive-icon>
791
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
792
+ <!-- START utility:email -->
793
+ <template lwc:if={cell.isRTL}>
794
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="email" aria-hidden="true" viewBox="0 0 520 520" part="icon">
795
+ <g>
796
+ <path d="M249 301c6 6 15 6 21 0L496 91c4-8 3-21-13-21L36 71c-12 0-22 11-13 21zm251-128c0-10-12-16-20-9L303 327c-12 11-27 17-43 17s-31-6-43-16L41 164c-8-7-20-2-20 9-1-3-1 227-1 227a40 40 0 0040 40h400a40 40 0 0040-40z"></path>
797
+ </g>
798
+ </svg>
799
+ </template>
800
+ <template lwc:else>
801
+ <svg class="slds-icon slds-icon-text-default slds-icon_x-small" focusable="false" data-key="email" aria-hidden="true" viewBox="0 0 520 520" part="icon">
802
+ <g>
803
+ <path d="M249 301c6 6 15 6 21 0L496 91c4-8 3-21-13-21L36 71c-12 0-22 11-13 21zm251-128c0-10-12-16-20-9L303 327c-12 11-27 17-43 17s-31-6-43-16L41 164c-8-7-20-2-20 9-1-3-1 227-1 227a40 40 0 0040 40h400a40 40 0 0040-40z"></path>
804
+ </g>
805
+ </svg>
806
+ </template>
807
+ <!-- END utility:email -->
726
808
  <span class="slds-assistive-text">{cell.emailIconAssistiveText}</span>
727
809
  </template> {cell.emailLabel}
728
810
  </a>
@@ -881,17 +963,30 @@
881
963
  </div>
882
964
  <template if:true={cell.isEditable}>
883
965
  <button class="slds-button slds-button_icon slds-cell-edit__button slds-m-left_x-small"
966
+ aria-labelledby={cell.editLabelId}
884
967
  data-action-edit="true"
885
968
  data-action-triggers="enter,space"
886
969
  data-navigation="enable"
887
970
  tabindex={cell.internalTabIndex}
888
971
  onclick={handleInlinedEditButtonClick}>
889
- <lightning-primitive-icon
890
- icon-name="utility:edit"
891
- size="xx-small"
892
- svg-class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_small slds-button__icon_edit">
893
- </lightning-primitive-icon>
894
- <span class="slds-assistive-text">
972
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
973
+ <!-- START utility:edit -->
974
+ <template lwc:if={cell.isRTL}>
975
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="edit" aria-hidden="true" viewBox="0 0 520 520" part="icon">
976
+ <g>
977
+ <path d="M95 334l89 89c4 4 10 4 14 0l222-223c4-4 4-10 0-14l-88-88a10 10 0 00-14 0L95 321c-4 4-4 10 0 13zM361 57a10 10 0 000 14l88 88c4 4 10 4 14 0l25-25a38 38 0 000-55l-47-47a40 40 0 00-57 0zM21 482c-2 10 7 19 17 17l109-26c4-1 7-3 9-5l2-2c2-2 3-9-1-13l-90-90c-4-4-11-3-13-1l-2 2a20 20 0 00-5 9z"></path>
978
+ </g>
979
+ </svg>
980
+ </template>
981
+ <template lwc:else>
982
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="edit" aria-hidden="true" viewBox="0 0 520 520" part="icon">
983
+ <g>
984
+ <path d="M95 334l89 89c4 4 10 4 14 0l222-223c4-4 4-10 0-14l-88-88a10 10 0 00-14 0L95 321c-4 4-4 10 0 13zM361 57a10 10 0 000 14l88 88c4 4 10 4 14 0l25-25a38 38 0 000-55l-47-47a40 40 0 00-57 0zM21 482c-2 10 7 19 17 17l109-26c4-1 7-3 9-5l2-2c2-2 3-9-1-13l-90-90c-4-4-11-3-13-1l-2 2a20 20 0 00-5 9z"></path>
985
+ </g>
986
+ </svg>
987
+ </template>
988
+ <!-- END utility:edit -->
989
+ <span hidden id={cell.editLabelId}>
895
990
  {cell.editIconAssistiveText}
896
991
  </span>
897
992
  </button>
@@ -902,11 +997,23 @@
902
997
  <template if:true={cell.shouldDisplayReadOnlyIcon}>
903
998
  <!-- TODO: Update the svg-classes once the SLDS team updates their read only icon design to not use classes that have the word 'button'
904
999
  in them in cases when the cell is read only and hence no button is actually rendered -->
905
- <lightning-primitive-icon
906
- icon-name="utility:lock"
907
- size="xx-small"
908
- svg-class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_small">
909
- </lightning-primitive-icon>
1000
+ <!-- Caution: Modify generate-inlined-icons script before changing comments -->
1001
+ <!-- START utility:lock -->
1002
+ <template lwc:if={cell.isRTL}>
1003
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="lock" aria-hidden="true" viewBox="0 0 520 520" part="icon">
1004
+ <g>
1005
+ <path d="M110 190h40c6 0 10-3 10-9v-1A100 100 0 01267 80c53 4 93 50 93 104v-3c0 6 4 9 10 9h40c6 0 10-3 10-9v-1A160 160 0 00252 20c-85 4-150 76-152 161 1 5 5 9 10 9zm-10-9v4zm360 89a40 40 0 00-40-40H100a40 40 0 00-40 40v190a40 40 0 0040 40h320a40 40 0 0040-40zM306 427c2 6-3 13-10 13h-73c-7 0-11-6-10-13l18-60a48 48 0 01-21-48 50 50 0 0139-38c32-6 60 17 60 47 0 16-8 31-21 39z"></path>
1006
+ </g>
1007
+ </svg>
1008
+ </template>
1009
+ <template lwc:else>
1010
+ <svg class="slds-button__icon slds-button__icon_hint slds-button__icon_lock slds-button__icon_edit slds-icon slds-icon-text-default slds-icon_xx-small" focusable="false" data-key="lock" aria-hidden="true" viewBox="0 0 520 520" part="icon">
1011
+ <g>
1012
+ <path d="M110 190h40c6 0 10-3 10-9v-1A100 100 0 01267 80c53 4 93 50 93 104v-3c0 6 4 9 10 9h40c6 0 10-3 10-9v-1A160 160 0 00252 20c-85 4-150 76-152 161 1 5 5 9 10 9zm-10-9v4zm360 89a40 40 0 00-40-40H100a40 40 0 00-40 40v190a40 40 0 0040 40h320a40 40 0 0040-40zM306 427c2 6-3 13-10 13h-73c-7 0-11-6-10-13l18-60a48 48 0 01-21-48 50 50 0 0139-38c32-6 60 17 60 47 0 16-8 31-21 39z"></path>
1013
+ </g>
1014
+ </svg>
1015
+ </template>
1016
+ <!-- END utility:lock -->
910
1017
  </template>
911
1018
  </span>
912
1019
  </template>
@@ -99,20 +99,26 @@ export function getGridContainerFromScrollerY(scrollerY) {
99
99
  * Gets the scrollerX element from the template.
100
100
  *
101
101
  * @param {Node} template The datatable template
102
+ * @param {Object} refs The datatable refs
102
103
  * @returns {Node} The scrollerX element
103
104
  */
104
- export function getScrollerX(template) {
105
- return template.querySelector('.slds-scrollable_x');
105
+ export function getScrollerX(template, refs) {
106
+ return (
107
+ (refs && refs.scrollerX) || template.querySelector('.slds-scrollable_x')
108
+ );
106
109
  }
107
110
 
108
111
  /**
109
112
  * Gets the scrollerY element from the template.
110
113
  *
111
114
  * @param {Node} template The datatable template
115
+ * @param {Object} refs The datatable refs
112
116
  * @returns {Node} The scrollerY element
113
117
  */
114
- export function getScrollerY(template) {
115
- return template.querySelector('.slds-scrollable_y');
118
+ export function getScrollerY(template, refs) {
119
+ return (
120
+ (refs && refs.scrollerY) || template.querySelector('.slds-scrollable_y')
121
+ );
116
122
  }
117
123
 
118
124
  /**
@@ -48,8 +48,9 @@ export function resetRowHeights(state) {
48
48
  * @param {Node} template - the custom element root `this.template` from datatable.js
49
49
  * @param {Object} state - datatable state
50
50
  * @param {Array} renderedRows - array of rows currently being rendered
51
+ * @param {Object} refs - datatable refs
51
52
  */
52
- export function handleVariableRowHeights(template, state, renderedRows) {
53
+ export function handleVariableRowHeights(template, state, renderedRows, refs) {
53
54
  const currentRange = {
54
55
  start: renderedRows[0].rowIndex,
55
56
  end: renderedRows[renderedRows.length - 1].rowIndex + 1,
@@ -93,7 +94,7 @@ export function handleVariableRowHeights(template, state, renderedRows) {
93
94
  adjustFromIndex,
94
95
  adjustmentValue
95
96
  );
96
- updateVirtualizeStyles(template, state, renderedRows);
97
+ updateVirtualizeStyles(template, state, renderedRows, refs);
97
98
  }
98
99
 
99
100
  /**
@@ -318,9 +319,10 @@ function checkOverlap(range1, range2) {
318
319
  * updates scrollTop and top values for rows when
319
320
  * using virtualization
320
321
  */
321
- function updateVirtualizeStyles(template, state, renderedRows) {
322
+ function updateVirtualizeStyles(template, state, renderedRows, refs) {
322
323
  // update scrollTop so firstVisibleIndex is correctly placed in viewport
323
- const scrollerY = template.querySelector('.slds-scrollable_y');
324
+ const scrollerY =
325
+ refs?.scrollerY || template.querySelector('.slds-scrollable_y');
324
326
  scrollerY.scrollTop =
325
327
  state.offsets[state.firstVisibleIndex] + state.firstRowOffset;
326
328
 
@@ -4,7 +4,6 @@ import { normalizeBoolean } from 'lightning/utilsPrivate';
4
4
  import { getStateColumnIndex } from './columns';
5
5
  import { updateCell } from './rows';
6
6
  import { normalizeNumberAttribute } from './utils';
7
- import { getDefaultState } from './state';
8
7
 
9
8
  const NON_WRAPPABLE_TYPES = new Set([
10
9
  'action',
@@ -23,15 +22,16 @@ const i18n = {
23
22
  /************************** WRAP TEXT STATE **************************/
24
23
 
25
24
  /**
26
- * Sets a boolean value in state's wrapText object against the column key value
27
- * representing whether or not the column is text wrapped.
25
+ * Normalizes the value for the column's wrapText property
26
+ * Based on cell type and current wrapText value.
28
27
  *
29
- * @param {Object} state The datatable state
30
28
  * @param {Object} col The datatable column definition
31
29
  */
32
- export function setWrapTextState(state = getDefaultState(), col) {
30
+ export function setWrapTextState(col) {
33
31
  if (!NON_WRAPPABLE_TYPES.has(col.type)) {
34
- state.wrapText[col.colKeyValue] = normalizeBoolean(col.wrapText);
32
+ col.wrapText = normalizeBoolean(col.wrapText);
33
+ } else {
34
+ col.wrapText = false;
35
35
  }
36
36
  }
37
37
 
@@ -81,14 +81,13 @@ function updateWrapTextAndMaxLinesValuesInCells(state, colIndex) {
81
81
  * @returns {Array} An array of wrap text actions
82
82
  */
83
83
  export function getInternalActions(state, col) {
84
- // Untracked state change.
85
- // Must be done first, so isTextWrapped correctly resolves.
86
- setWrapTextState(state, col);
84
+ // Must be done first to ensure isTextWrapped correctly resolves.
85
+ setWrapTextState(col);
87
86
  // If not hidden and isWrapable, sets the internal actions.
88
87
  if (col.hideDefaultActions || NON_WRAPPABLE_TYPES.has(col.type)) {
89
88
  return [];
90
89
  }
91
- const isTextWrapped = state.wrapText[col.colKeyValue] || false;
90
+ const isTextWrapped = col.wrapText || false;
92
91
  const { clipText, wrapText } = i18n;
93
92
  return [
94
93
  {
@@ -120,14 +119,16 @@ export function handleTriggeredAction(dt, action, colKeyValue) {
120
119
  const isWrapText = name === 'wrapText';
121
120
  if (isWrapText || name === 'clipText') {
122
121
  const { state } = dt;
122
+ const colIndex = getStateColumnIndex(state, colKeyValue);
123
+ const col = state.columns[colIndex];
123
124
  // If state should be changed
124
- if (state.wrapText[colKeyValue] !== isWrapText) {
125
+ if (col.wrapText !== isWrapText) {
125
126
  state.shouldResetHeights = true;
126
- // Untracked state changes.
127
- state.wrapText[colKeyValue] = isWrapText;
127
+ col.wrapText = isWrapText;
128
128
  updateSelectedOptionInHeaderActions(state, colKeyValue);
129
129
  }
130
130
  }
131
+ dt._recalculateHeaderHeight = true;
131
132
  }
132
133
 
133
134
  /**
@@ -150,9 +151,9 @@ function updateSelectedOptionInHeaderActions(state, colKeyValue) {
150
151
  const action = internalActions[i];
151
152
  const { name } = action;
152
153
  if (name === 'wrapText') {
153
- action.checked = state.wrapText[colKeyValue];
154
+ action.checked = col.wrapText;
154
155
  } else if (name === 'clipText') {
155
- action.checked = !state.wrapText[colKeyValue];
156
+ action.checked = !col.wrapText;
156
157
  }
157
158
  }
158
159
 
@@ -382,10 +382,7 @@ export default class LightningGroupedCombobox extends LightningShadowBaseClass {
382
382
  this.interactingState.enter();
383
383
  this._expandPillContainer = true;
384
384
 
385
- if (!this._hasFocus) {
386
- this._hasFocus = true;
387
- this.dispatchEvent(new CustomEvent('focus'));
388
- }
385
+ this.dispatchEvent(new CustomEvent('focus'));
389
386
  }
390
387
 
391
388
  handlePillsFocus() {
@@ -401,36 +398,32 @@ export default class LightningGroupedCombobox extends LightningShadowBaseClass {
401
398
  }
402
399
 
403
400
  handleBlur() {
404
- this._hasFocus = false;
405
-
406
401
  // Once https://github.com/salesforce/lwc/issues/444 is fixed, consider switching to
407
402
  // `onfocusout` and `event.relatedTarget` to determine whether the focus stayed in the component,
408
403
  // this way the use of async blur can be avoided.
409
404
  // eslint-disable-next-line @lwc/lwc/no-async-operation
410
405
  requestAnimationFrame(() => {
411
- if (!this._hasFocus) {
412
- this.interactingState.leave();
413
-
414
- this.dispatchEvent(new CustomEvent('blur'));
415
- if (this.pills && this.pills.length > 0) {
416
- // Sometimes (involves focusing on lower pills) the pill container scrolls and the top
417
- // line with the "+ n more" button does not show so we have to manually scroll to the top.
418
- // We need to figure a better solution for this.
419
- // eslint-disable-next-line @lwc/lwc/no-async-operation
420
- requestAnimationFrame(() => {
421
- if (this._connected) {
422
- // If a new pill has been added but the markup-conditional hasn't had a chance to
423
- // initialize the pill container, and causes a null gack. Adding a quick safety
424
- // check here to avoid this case
425
- const pillContainer = this.template.querySelector(
426
- 'lightning-pill-container'
427
- );
428
- if (pillContainer) {
429
- pillContainer.scrollTop = 0;
430
- }
406
+ this.interactingState.leave();
407
+
408
+ this.dispatchEvent(new CustomEvent('blur'));
409
+ if (this.pills && this.pills.length > 0) {
410
+ // Sometimes (involves focusing on lower pills) the pill container scrolls and the top
411
+ // line with the "+ n more" button does not show so we have to manually scroll to the top.
412
+ // We need to figure a better solution for this.
413
+ // eslint-disable-next-line @lwc/lwc/no-async-operation
414
+ requestAnimationFrame(() => {
415
+ if (this._connected) {
416
+ // If a new pill has been added but the markup-conditional hasn't had a chance to
417
+ // initialize the pill container, and causes a null gack. Adding a quick safety
418
+ // check here to avoid this case
419
+ const pillContainer = this.template.querySelector(
420
+ 'lightning-pill-container'
421
+ );
422
+ if (pillContainer) {
423
+ pillContainer.scrollTop = 0;
431
424
  }
432
- });
433
- }
425
+ }
426
+ });
434
427
  }
435
428
  });
436
429
  }
@@ -299,6 +299,14 @@ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
299
299
  --sds-c-button-color-border-disabled: var(--slds-g-color-border-disabled-1);
300
300
  --sds-c-button-text-color-disabled: var(--slds-g-color-on-disabled-1);
301
301
  --sds-c-button-color-background-disabled: var(--slds-g-color-disabled-container-1);
302
+
303
+ /**
304
+ * Needed to override
305
+ * `pointer-event: none` coming from sds
306
+ * that prevent tooltip from showing
307
+ */
308
+ pointer-events: auto;
309
+ cursor: default;
302
310
  }
303
311
  /**
304
312
  * A note about fallbacks on the default variant:
@@ -5,9 +5,10 @@
5
5
  icon-class={computedIconClass}
6
6
  variant={computedButtonVariant}
7
7
  alternative-text={alternativeText}
8
+ disable-alternative-text-title
8
9
  tooltip={content}
9
- onprivatebuttoniconregister={handleButtonIconRegister}
10
10
  tabindex={tabIndex}
11
+ tooltip-type="toggle"
11
12
  ></lightning-button-icon>
12
13
  </div>
13
14
  </template>
@@ -3,7 +3,6 @@ import { api, track } from 'lwc';
3
3
  import LightningShadowBaseClass from 'lightning/shadowBaseClassPrivate';
4
4
  import { isValidName } from 'lightning/iconUtils';
5
5
  import { normalizeString } from 'lightning/utilsPrivate';
6
- import { TooltipType } from 'lightning/tooltipLibrary';
7
6
 
8
7
  const DEFAULT_BUTTON_ALT_TEXT = labelButtonAlternativeText;
9
8
  const DEFAULT_ICON_NAME = 'utility:info';
@@ -145,15 +144,4 @@ export default class LightningHelptext extends LightningShadowBaseClass {
145
144
  return '';
146
145
  }
147
146
  }
148
-
149
- /**
150
- * Set lightning-button-icon tooltips to be created with toggle events
151
- * and without the title attribute computed from alternative text (see W-12496300)
152
- * @param {*} event
153
- */
154
- handleButtonIconRegister(event) {
155
- event.stopPropagation();
156
- event.detail.setTooltipType(TooltipType.Toggle);
157
- event.detail.showTitle(false);
158
- }
159
147
  }
@@ -233,7 +233,6 @@
233
233
  name={name}
234
234
  accesskey={accesskey}
235
235
  aria-label={ariaLabel}
236
- aria-details={ariaDetails}
237
236
  aria-disabled={ariaDisabled}
238
237
  variant={variant}
239
238
  time-style={timeStyle}
@@ -296,6 +296,14 @@ Licensed under BSD 3-Clause - see LICENSE.txt or git.io/sfdc-license */
296
296
  --sds-c-button-color-border-disabled: var(--slds-g-color-border-disabled-1);
297
297
  --sds-c-button-text-color-disabled: var(--slds-g-color-on-disabled-1);
298
298
  --sds-c-button-color-background-disabled: var(--slds-g-color-disabled-container-1);
299
+
300
+ /**
301
+ * Needed to override
302
+ * `pointer-event: none` coming from sds
303
+ * that prevent tooltip from showing
304
+ */
305
+ pointer-events: auto;
306
+ cursor: default;
299
307
  }
300
308
  /**
301
309
  * A note about fallbacks on the default variant: