lightning-base-components 1.21.2-alpha → 1.21.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 (222) hide show
  1. package/metadata/raptor.json +28 -1
  2. package/package.json +28 -2
  3. package/scopedImports/@salesforce-label-LightningRichTextEditor.colorPicker.js +1 -0
  4. package/src/lightning/accordion/accordion-section.slds.css +3 -3
  5. package/src/lightning/accordion/accordion.slds.css +1 -2
  6. package/src/lightning/accordionSection/accordion-section.slds.css +3 -3
  7. package/src/lightning/accordionSection/accordionSection.js +3 -1
  8. package/src/lightning/accordionSection/button.slds.css +1 -1
  9. package/src/lightning/badge/badge.js +1 -0
  10. package/src/lightning/badge/badge.js-meta.xml +3 -0
  11. package/src/lightning/baseCombobox/base-combobox.slds.css +11 -6
  12. package/src/lightning/baseCombobox/baseCombobox.html +1 -1
  13. package/src/lightning/baseCombobox/baseCombobox.js +2 -2
  14. package/src/lightning/baseCombobox/baseCombobox.js-meta.xml +6 -0
  15. package/src/lightning/baseCombobox/input-text.slds.css +41 -68
  16. package/src/lightning/baseCombobox/keyboard.js +12 -4
  17. package/src/lightning/baseCombobox/listbox.slds.css +51 -99
  18. package/src/lightning/baseCombobox/spinner.slds.css +62 -62
  19. package/src/lightning/baseComboboxFormattedText/baseComboboxFormattedText.js-meta.xml +6 -0
  20. package/src/lightning/baseComboboxItem/baseComboboxItem.js +10 -6
  21. package/src/lightning/baseComboboxItem/baseComboboxItem.js-meta.xml +6 -0
  22. package/src/lightning/baseComboboxItem/listbox.slds.css +51 -99
  23. package/src/lightning/baseFormattedText/baseFormattedText.js +2 -2
  24. package/src/lightning/button/button.js +2 -1
  25. package/src/lightning/button/button.slds.css +1 -1
  26. package/src/lightning/buttonIcon/button-icon.slds.css +1 -1
  27. package/src/lightning/buttonIconStateful/button-icon-stateful.slds.css +4 -2
  28. package/src/lightning/buttonIconStateful/button-icon.slds.css +1 -1
  29. package/src/lightning/buttonIconStateful/button.slds.css +1 -1
  30. package/src/lightning/buttonMenu/button-icon.slds.css +1 -1
  31. package/src/lightning/buttonMenu/button-menu.slds.css +8 -2
  32. package/src/lightning/buttonMenu/button.slds.css +1 -1
  33. package/src/lightning/buttonStateful/button-stateful.slds.css +6 -2
  34. package/src/lightning/buttonStateful/button.slds.css +1 -1
  35. package/src/lightning/buttonStateful/buttonStateful.js +4 -1
  36. package/src/lightning/calendar/calendar.js-meta.xml +6 -0
  37. package/src/lightning/calendar/calendar.slds.css +9 -2
  38. package/src/lightning/colorPickerCustom/color-picker-custom.slds.css +22 -23
  39. package/src/lightning/colorPickerCustom/input-text.slds.css +41 -68
  40. package/src/lightning/colorPickerPanel/color-picker-panel.slds.css +9 -10
  41. package/src/lightning/colorPickerPanel/popover.slds.css +0 -2
  42. package/src/lightning/combobox/combobox.slds.css +1 -2
  43. package/src/lightning/combobox/form-element.slds.css +54 -54
  44. package/src/lightning/datatable/__examples__/customDatatableWrapper/customDatatableWrapper.js +0 -69
  45. package/src/lightning/datatable/__examples__/customDatatypeDeleteRowBtn/customDatatypeDeleteRowBtn.html +1 -1
  46. package/src/lightning/datatable/__examples__/customDatatypeDeleteRowBtn/customDatatypeDeleteRowBtn.js +1 -16
  47. package/src/lightning/datatable/__examples__/customDatatypeLink/customDatatypeLink.html +3 -3
  48. package/src/lightning/datatable/__examples__/customDatatypeRowOrderingBtn/customDatatypeRowOrderingBtn.html +1 -8
  49. package/src/lightning/datatable/__examples__/customDatatypeRowOrderingBtn/customDatatypeRowOrderingBtn.js +2 -39
  50. package/src/lightning/datatable/__examples__/customDatatypeTable/customNumber.html +1 -1
  51. package/src/lightning/datatable/__examples__/customDatatypeTable/customNumberEdit.html +2 -0
  52. package/src/lightning/datatable/__examples__/customDatatypeTable/deleteRow.html +3 -2
  53. package/src/lightning/datatable/__examples__/customDatatypeTable/iconPill.html +1 -1
  54. package/src/lightning/datatable/__examples__/customNestedComponent/customNestedComponent.html +10 -0
  55. package/src/lightning/datatable/__examples__/customNestedComponent/customNestedComponent.js +12 -0
  56. package/src/lightning/datatable/autoWidthStrategy.js +147 -191
  57. package/src/lightning/datatable/columnResizer.js +35 -35
  58. package/src/lightning/datatable/columnWidthManager.js +118 -177
  59. package/src/lightning/datatable/columns.js +90 -59
  60. package/src/lightning/datatable/datagrid.slds.css +187 -0
  61. package/src/lightning/datatable/datatable.js +248 -229
  62. package/src/lightning/datatable/errors.js +3 -0
  63. package/src/lightning/datatable/fixedWidthStrategy.js +22 -29
  64. package/src/lightning/datatable/headerActions.js +7 -9
  65. package/src/lightning/datatable/infiniteLoading.js +15 -15
  66. package/src/lightning/datatable/inlineEdit.js +255 -235
  67. package/src/lightning/datatable/keyboard.js +318 -282
  68. package/src/lightning/datatable/renderManager.js +10 -7
  69. package/src/lightning/datatable/resizeObserver.js +11 -59
  70. package/src/lightning/datatable/rowLevelActions.js +6 -5
  71. package/src/lightning/datatable/rowNumber.js +23 -23
  72. package/src/lightning/datatable/rowSelection.js +173 -145
  73. package/src/lightning/datatable/rowSelectionShared.js +13 -6
  74. package/src/lightning/datatable/rows.js +231 -196
  75. package/src/lightning/datatable/sort.js +26 -22
  76. package/src/lightning/datatable/templates/div/div.css +2 -57
  77. package/src/lightning/datatable/templates/div/div.html +13 -6
  78. package/src/lightning/datatable/templates/div/div.lbc.native.css +3 -0
  79. package/src/lightning/datatable/templates/div/div.lbc.synthetic.css +86 -0
  80. package/src/lightning/datatable/templates/table/table.html +1 -0
  81. package/src/lightning/datatable/utils.js +5 -5
  82. package/src/lightning/datatable/widthManagerShared.js +24 -21
  83. package/src/lightning/datatable/wrapText.js +25 -26
  84. package/src/lightning/datepicker/datepicker.js +32 -9
  85. package/src/lightning/datepicker/datepicker.js-meta.xml +6 -0
  86. package/src/lightning/datepicker/form-element.slds.css +54 -54
  87. package/src/lightning/datepicker/input-text.slds.css +41 -68
  88. package/src/lightning/datetimepicker/datetimepicker.js-meta.xml +6 -0
  89. package/src/lightning/datetimepicker/form-element.slds.css +54 -54
  90. package/src/lightning/datetimepicker/input-text.slds.css +41 -68
  91. package/src/lightning/dualListbox/dual-listbox.slds.css +7 -2
  92. package/src/lightning/dualListbox/form-element.slds.css +54 -54
  93. package/src/lightning/dualListbox/listbox.slds.css +51 -99
  94. package/src/lightning/dynamicIcon/dynamic-icon-strength.slds.css +1 -2
  95. package/src/lightning/dynamicIcon/dynamic-icon-trend.slds.css +1 -2
  96. package/src/lightning/formattedDateTime/formattedDateTime.js +7 -62
  97. package/src/lightning/formattedDateTime/formattedDateTime.js-meta.xml +3 -0
  98. package/src/lightning/formattedLocation/formattedLocation.html +1 -3
  99. package/src/lightning/formattedLocation/formattedLocation.js +3 -25
  100. package/src/lightning/formattedLookup/events.js +2 -4
  101. package/src/lightning/formattedNumber/formattedNumber.js +2 -49
  102. package/src/lightning/formattedRichText/formattedRichText.js +5 -5
  103. package/src/lightning/formattedRichText/linkTextNodes.js +58 -0
  104. package/src/lightning/groupedCombobox/form-element.slds.css +54 -54
  105. package/src/lightning/groupedCombobox/grouped-combobox.slds.css +0 -2
  106. package/src/lightning/groupedCombobox/groupedCombobox.js-meta.xml +1 -1
  107. package/src/lightning/groupedCombobox/input-text.slds.css +41 -68
  108. package/src/lightning/helptext/button-icon.slds.css +1 -1
  109. package/src/lightning/helptext/form-element.slds.css +54 -54
  110. package/src/lightning/icon/icon.slds.css +12 -25
  111. package/src/lightning/input/form-element.slds.css +54 -54
  112. package/src/lightning/inputAddress/form-element.slds.css +54 -54
  113. package/src/lightning/inputAddress/input-address.slds.css +1 -2
  114. package/src/lightning/inputAddress/input-text.slds.css +41 -68
  115. package/src/lightning/inputAddress/inputAddress.js +1 -0
  116. package/src/lightning/inputAddress/inputAddress.js-meta.xml +3 -0
  117. package/src/lightning/inputLocation/form-element.slds.css +54 -54
  118. package/src/lightning/inputLocation/input-location.slds.css +1 -2
  119. package/src/lightning/inputLocation/input-text.slds.css +41 -68
  120. package/src/lightning/inputName/form-element.slds.css +54 -54
  121. package/src/lightning/inputName/input-text.slds.css +41 -68
  122. package/src/lightning/interactiveDialogBase/interactive-dialog-base.slds.css +0 -3
  123. package/src/lightning/interactiveDialogBase/interactiveDialogBase.js-meta.xml +6 -0
  124. package/src/lightning/lookupAddress/form-element.slds.css +54 -54
  125. package/src/lightning/lookupAddress/listbox.slds.css +51 -99
  126. package/src/lightning/lookupAddress/location.js +2 -0
  127. package/src/lightning/lookupAddress/lookup-address.slds.css +0 -2
  128. package/src/lightning/lookupAddress/lookupAddress.js +15 -10
  129. package/src/lightning/menuDivider/menu-divider.slds.css +0 -2
  130. package/src/lightning/menuItem/menu-item.slds.css +8 -2
  131. package/src/lightning/menuSubheader/menu-subheader.slds.css +1 -2
  132. package/src/lightning/modalBase/modal-base.slds.css +3 -3
  133. package/src/lightning/modalBase/modalBase.js +0 -8
  134. package/src/lightning/modalBase/modalBase.js-meta.xml +6 -0
  135. package/src/lightning/modalBody/modal-body.slds.css +1 -2
  136. package/src/lightning/modalFooter/modal-footer.slds.css +2 -2
  137. package/src/lightning/modalFooter/modalFooter.js +0 -21
  138. package/src/lightning/modalHeader/modal-header.slds.css +1 -2
  139. package/src/lightning/modalHeader/modalHeader.js +0 -22
  140. package/src/lightning/overlay/overlay.js-meta.xml +6 -0
  141. package/src/lightning/pill/pill.slds.css +32 -58
  142. package/src/lightning/pillContainer/button.slds.css +1 -1
  143. package/src/lightning/pillContainer/listbox.slds.css +51 -99
  144. package/src/lightning/pillContainer/pill-container.slds.css +6 -10
  145. package/src/lightning/pillContainer/pill.slds.css +32 -58
  146. package/src/lightning/popup/popover.slds.css +0 -2
  147. package/src/lightning/primitiveBubble/primitiveBubble.js-meta.xml +6 -0
  148. package/src/lightning/primitiveButton/primitiveButoon.js-meta.xml +6 -0
  149. package/src/lightning/primitiveCellCheckbox/checkbox.css +2 -0
  150. package/src/lightning/primitiveColorpickerButton/color-picker-button.slds.css +16 -38
  151. package/src/lightning/primitiveCustomCell/primitiveCustomCell.js +26 -1
  152. package/src/lightning/primitiveHeaderFactory/nonsortableHeader.css +1 -0
  153. package/src/lightning/primitiveHeaderFactory/selectableHeader.css +2 -0
  154. package/src/lightning/primitiveIcon/icon.slds.css +12 -25
  155. package/src/lightning/primitiveIcon/primitiveIcon.js-meta.xml +6 -0
  156. package/src/lightning/primitiveIframe/primitiveIframe.js +3 -1
  157. package/src/lightning/primitiveInputCheckbox/form-element.slds.css +54 -54
  158. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.js +5 -2
  159. package/src/lightning/primitiveInputCheckbox/primitiveInputCheckbox.js-meta.xml +6 -0
  160. package/src/lightning/primitiveInputCheckboxButton/form-element.slds.css +54 -54
  161. package/src/lightning/primitiveInputCheckboxButton/input-checkbox-button.slds.css +6 -4
  162. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.js +5 -2
  163. package/src/lightning/primitiveInputCheckboxButton/primitiveInputCheckboxButton.js-meta.xml +6 -0
  164. package/src/lightning/primitiveInputColor/form-element.slds.css +54 -54
  165. package/src/lightning/primitiveInputColor/input-color.slds.css +2 -3
  166. package/src/lightning/primitiveInputColor/input-text.slds.css +41 -68
  167. package/src/lightning/primitiveInputColor/primitiveInputColor.js +5 -2
  168. package/src/lightning/primitiveInputColor/primitiveInputColor.js-meta.xml +6 -0
  169. package/src/lightning/primitiveInputFile/button.slds.css +1 -1
  170. package/src/lightning/primitiveInputFile/form-element.slds.css +54 -54
  171. package/src/lightning/primitiveInputFile/input-file.slds.css +1 -4
  172. package/src/lightning/primitiveInputFile/primitiveInputFile.js +4 -2
  173. package/src/lightning/primitiveInputFile/primitiveInputFile.js-meta.xml +6 -0
  174. package/src/lightning/primitiveInputRadio/primitiveInputRadio.js +4 -2
  175. package/src/lightning/primitiveInputSimple/form-element.slds.css +54 -54
  176. package/src/lightning/primitiveInputSimple/input-text.slds.css +41 -68
  177. package/src/lightning/primitiveInputSimple/primitiveInputSimple.js-meta.xml +6 -0
  178. package/src/lightning/primitiveInputToggle/form-element.slds.css +54 -54
  179. package/src/lightning/primitiveInputToggle/input-toggle.slds.css +50 -27
  180. package/src/lightning/primitiveInputToggle/primitiveInputToggle.js +5 -2
  181. package/src/lightning/primitiveInputToggle/primitiveInputToggle.js-meta.xml +6 -0
  182. package/src/lightning/progressBar/progress-bar.slds.css +8 -10
  183. package/src/lightning/progressRing/progress-ring.slds.css +0 -23
  184. package/src/lightning/progressStep/progressStep.js +1 -14
  185. package/src/lightning/radioGroup/form-element.slds.css +54 -54
  186. package/src/lightning/radioGroup/radioGroup.html +1 -2
  187. package/src/lightning/radioGroup/radioGroup.js +1 -0
  188. package/src/lightning/routingService/routingService.js +31 -5
  189. package/src/lightning/select/form-element.slds.css +54 -54
  190. package/src/lightning/select/select.slds.css +4 -2
  191. package/src/lightning/sldsUtilsVisibility/sldsUtilsVisibility.css +4 -0
  192. package/src/lightning/spinner/spinner.slds.css +62 -62
  193. package/src/lightning/tab/tab.js +4 -2
  194. package/src/lightning/tab/tab.slds.css +14 -7
  195. package/src/lightning/tabBar/tab-bar.slds.css +16 -6
  196. package/src/lightning/tabset/__docs__/tabset.md +24 -1
  197. package/src/lightning/tabset/tabset.js +25 -38
  198. package/src/lightning/tabset/tabset.slds.css +0 -2
  199. package/src/lightning/textarea/form-element.slds.css +54 -54
  200. package/src/lightning/textarea/textarea.js +5 -1
  201. package/src/lightning/textarea/textarea.slds.css +22 -9
  202. package/src/lightning/timepicker/form-element.slds.css +54 -54
  203. package/src/lightning/timepicker/timepicker.js-meta.xml +6 -0
  204. package/src/lightning/timepicker/timepicker.slds.css +2 -2
  205. package/src/lightning/toast/__docs__/toast.md +20 -22
  206. package/src/lightning/toast/button-icon.slds.css +1 -1
  207. package/src/lightning/toast/icon.slds.css +12 -25
  208. package/src/lightning/toast/toast.js +15 -12
  209. package/src/lightning/toast/toast.slds.css +6 -18
  210. package/src/lightning/toastContainer/toast.slds.css +6 -18
  211. package/src/lightning/toastContainer/toastContainer.js +25 -17
  212. package/src/lightning/tooltipLibrary/tooltipLibrary.js +12 -9
  213. package/src/lightning/tree/tree.js +2 -0
  214. package/src/lightning/utils/classSet.js +9 -3
  215. package/src/lightning/utilsPrivate/formatUtils.js +158 -0
  216. package/src/lightning/utilsPrivate/textUtils.js +16 -0
  217. package/src/lightning/utilsPrivate/utilsPrivate.js +56 -15
  218. package/src/lightning/utilsPrivate/validationUtils.js +59 -0
  219. package/src/lightning/verticalNavigationSection/vertical-navigation-section.slds.css +0 -2
  220. package/src/lightning/datatable/resizeSensor.js +0 -244
  221. package/src/lightning/formattedRichText/linkify.js +0 -43
  222. package/src/lightning/utilsPrivate/smartSetAttribute.js +0 -19
@@ -70,7 +70,13 @@ export function getColumns(state) {
70
70
  * @returns {Boolean} Whether any of the columns are editable.
71
71
  */
72
72
  export function hasEditableColumn(columns) {
73
- return columns.some((column) => column.editable);
73
+ const { length: colCount } = columns;
74
+ for (let colIndex = 0; colIndex < colCount; colIndex += 1) {
75
+ if (columns[colIndex].editable) {
76
+ return true;
77
+ }
78
+ }
79
+ return false;
74
80
  }
75
81
 
76
82
  /**
@@ -83,7 +89,14 @@ export function hasEditableColumn(columns) {
83
89
  * filled with truthy column definition objects.
84
90
  */
85
91
  export function getEditableColumns(columns) {
86
- return columns.filter((column) => column.editable);
92
+ const editableColumns = [];
93
+ for (let i = 0, { length } = columns; i < length; i += 1) {
94
+ const col = columns[i];
95
+ if (col.editable) {
96
+ editableColumns.push(col);
97
+ }
98
+ }
99
+ return editableColumns;
87
100
  }
88
101
 
89
102
  /**
@@ -98,10 +111,9 @@ export function getEditableColumns(columns) {
98
111
  */
99
112
  export function normalizeEditable(column, types) {
100
113
  if (types.isEditableType(column.type)) {
101
- if (
102
- !(typeof column.editable === 'object' && column.editable.fieldName)
103
- ) {
104
- column.editable = normalizeBoolean(column.editable);
114
+ const { editable } = column;
115
+ if (!(editable && editable.fieldName)) {
116
+ column.editable = normalizeBoolean(editable);
105
117
  }
106
118
  column.editTemplate = types.getCustomTypeEditTemplate(column.type);
107
119
  } else {
@@ -125,63 +137,83 @@ export function normalizeEditable(column, types) {
125
137
  * @param {Object} types The type handling factory.
126
138
  */
127
139
  export function normalizeColumns(state, columns, types) {
128
- if (columns.length !== 0) {
140
+ const { length: colCount } = columns;
141
+ if (colCount !== 0) {
129
142
  let firstColumnForReaders = 0;
130
- // Workaround: https://git.soma.salesforce.com/raptor/raptor/issues/763
131
- const normalizedColumns = Object.assign([], columns);
143
+ let normColCount = colCount;
144
+ let { showRowNumberColumn } = state;
145
+ const notHideCheckboxColumn = !state.hideCheckboxColumn;
132
146
 
133
- if (!state.hideCheckboxColumn) {
134
- firstColumnForReaders++;
135
- normalizedColumns.unshift(SELECTABLE_COLUMN);
147
+ if (notHideCheckboxColumn) {
148
+ normColCount += 1;
136
149
  }
137
150
 
138
151
  if (hasRowNumberColumn(state) || hasEditableColumn(columns)) {
139
- firstColumnForReaders++;
140
152
  setShowRowNumberColumn(state, true);
141
- normalizedColumns.unshift(getRowNumberColumnDef());
153
+ normColCount += 1;
154
+ }
155
+ const normalizedColumns = Array(normColCount);
156
+
157
+ // Tracked state change.
158
+ state.columns = normalizedColumns;
159
+
160
+ if (notHideCheckboxColumn) {
161
+ normalizedColumns[firstColumnForReaders] = Object.assign(
162
+ {},
163
+ SELECTABLE_COLUMN
164
+ );
165
+ firstColumnForReaders += 1;
166
+ }
167
+ if (showRowNumberColumn) {
168
+ normalizedColumns[firstColumnForReaders] = getRowNumberColumnDef();
169
+ firstColumnForReaders += 1;
170
+ }
171
+ for (let colIndex = 0; colIndex < colCount; colIndex += 1) {
172
+ normalizedColumns[colIndex + firstColumnForReaders] =
173
+ columns[colIndex];
142
174
  }
143
175
 
144
- const columnKeyMap = {};
145
- state.columns = normalizedColumns.map((column, index) => {
176
+ const seenColumnKeys = new Set();
177
+ for (let colIndex = 0; colIndex < normColCount; colIndex += 1) {
178
+ const column = normalizedColumns[colIndex];
179
+ const { columnKey } = column;
180
+
181
+ // state.columns = normalizedColumns.map((column, index) => {
146
182
  // Verify `columnKey` is unique
147
- const columnKey = column.columnKey;
148
- if (columnKey && columnKeyMap[columnKey]) {
183
+ if (columnKey && seenColumnKeys.has(columnKey)) {
149
184
  console.error(
150
185
  `The "columnKey" column property must be unique. Found a duplicate of columnKey "${columnKey}".`
151
186
  );
152
187
  }
153
- columnKeyMap[columnKey] = true;
188
+ seenColumnKeys.add(columnKey);
154
189
 
155
- const normalizedColumn = Object.assign(
156
- getColumnDefaults(column),
157
- column
158
- );
159
- normalizedColumn.ariaLabel =
160
- normalizedColumn.label || normalizedColumn.ariaLabel || null;
190
+ const normCol = Object.assign(getColumnDefaults(column), column);
191
+ normalizedColumns[colIndex] = normCol;
192
+ normCol.ariaLabel = normCol.label || normCol.ariaLabel || null;
161
193
 
194
+ let { type: columnType } = normCol;
162
195
  // `customType` attribute is needed to render default iedit component
163
- normalizedColumn.editableCustomType =
164
- types.isStandardCellLayoutForCustomType(normalizedColumn.type);
196
+ normCol.editableCustomType =
197
+ types.isStandardCellLayoutForCustomType(columnType);
165
198
 
166
- if (isCustomerColumn(normalizedColumn)) {
167
- normalizeColumnDataType(normalizedColumn, types);
168
- normalizeEditable(normalizedColumn, types);
169
- updateColumnSortingState(normalizedColumn, state);
199
+ if (isCustomerColumn(normCol)) {
200
+ normalizeColumnDataType(normCol, types);
201
+ normalizeEditable(normCol, types);
202
+ updateColumnSortingState(normCol, state);
170
203
  }
171
204
 
172
- if (isTreeType(normalizedColumn.type)) {
173
- normalizedColumn.typeAttributes = getNormalizedSubTypeAttribute(
174
- normalizedColumn.type,
175
- normalizedColumn.typeAttributes
205
+ if (isTreeType(normCol.type)) {
206
+ normCol.typeAttributes = getNormalizedSubTypeAttribute(
207
+ normCol.type,
208
+ normCol.typeAttributes
176
209
  );
177
210
  }
178
211
 
179
- return Object.assign(normalizedColumn, {
180
- tabIndex: -1,
181
- colKeyValue: generateColKeyValue(normalizedColumn, index),
182
- isScopeCol: index === firstColumnForReaders,
183
- });
184
- });
212
+ // Generate colKeyValue after normalizing customer column.
213
+ normCol.colKeyValue = generateColKeyValue(normCol, colIndex);
214
+ normCol.isScopeCol = colIndex === firstColumnForReaders;
215
+ normCol.tabIndex = -1;
216
+ }
185
217
  } else {
186
218
  state.columns = [];
187
219
  }
@@ -267,20 +299,19 @@ export function generateColKeyValue(columnMetadata, index) {
267
299
  * @returns {Number} The index in `dt.columns`. -1 if not found or if its internal.
268
300
  */
269
301
  export function getUserColumnIndex(state, colKeyValue) {
270
- const stateColumnIndex = getStateColumnIndex(state, colKeyValue);
271
- let internalColumns = 0;
272
-
273
- if (state.columns[stateColumnIndex].internal) {
302
+ const { columns } = state;
303
+ const colIndex = getStateColumnIndex(state, colKeyValue);
304
+ if (columns[colIndex].internal) {
274
305
  return -1;
275
306
  }
276
-
277
- for (let i = 0; i < stateColumnIndex; i++) {
278
- if (state.columns[i].internal) {
307
+ let internalColumns = 0;
308
+ for (let i = 0; i < colIndex; i += 1) {
309
+ if (columns[i].internal) {
279
310
  internalColumns++;
280
311
  }
281
312
  }
282
313
 
283
- return stateColumnIndex - internalColumns;
314
+ return colIndex - internalColumns;
284
315
  }
285
316
 
286
317
  /**
@@ -319,17 +350,17 @@ export function getStateColumnIndex(state, colKeyValue) {
319
350
  * @returns {Number} The index in state.columns, -1 if it does not exist
320
351
  */
321
352
  export function getColumnIndexByColumnKey(state, key) {
322
- let i = 0;
323
353
  const columns = getColumns(state);
324
- const existFieldName = columns.some((column, index) => {
325
- i = index;
326
- return (
327
- column.columnKey === key ||
328
- (!column.columnKey && column.fieldName === key)
329
- );
330
- });
331
-
332
- return existFieldName ? i : -1;
354
+ for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {
355
+ const col = columns[colIndex];
356
+ if (
357
+ col.columnKey === key ||
358
+ (!col.columnKey && col.fieldName === key)
359
+ ) {
360
+ return colIndex;
361
+ }
362
+ }
363
+ return -1;
333
364
  }
334
365
 
335
366
  /************************** PRIVATE METHODS ***************************/
@@ -0,0 +1,187 @@
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
+ /**
6
+ *
7
+ * TODO: converted all exposed styling hooks to local pseudo-private variables.
8
+ * Need to remove all of those and replace with --slds-g values, since we are not exposing anything.
9
+ * Ok to keep any local var as needed
10
+ * (This is related to the native shadow work)
11
+ *
12
+ */
13
+
14
+ :focus-visible {
15
+ outline: 0;
16
+ }
17
+
18
+ :host([data-render-mode="shadow"]) [part='datagrid-wrapper'] {
19
+ display: flex;
20
+ flex-direction: column;
21
+ position: relative;
22
+ }
23
+
24
+ :host([data-render-mode="shadow"]) [part='datagrid'] {
25
+ display: flex;
26
+ flex-direction: column;
27
+ flex: 1 1 auto;
28
+ height: 100%;
29
+ background-color: var(--_slds-c-datagrid-color-background);
30
+ }
31
+
32
+ :host([data-render-mode="shadow"]) [part='datagrid-header'] {
33
+ color: var(--_slds-c-datagrid-header-text-color, #514f4d);
34
+ background-color: var(--_slds-c-datagrid-header-color-background,
35
+ var(--_slds-c-datagrid-color-background, #fafaf9));
36
+ border-top: 1px solid var(--_slds-c-datagrid-header-color-border, #babfc7);
37
+ width: 100%;
38
+
39
+ --_slds-c-datagrid-row-color-border: var(--_slds-c-datagrid-header-color-border, #babfc7);
40
+ }
41
+
42
+ :host([data-render-mode="shadow"]) [fixed-header='true'] [part='datagrid-header'] {
43
+ position: sticky;
44
+ top: 0;
45
+ min-height: 2rem;
46
+ z-index: 1;
47
+ }
48
+
49
+ /* Cells */
50
+
51
+ :host([data-render-mode="shadow"]) [part='cell'] {
52
+ position: relative;
53
+ display: flex;
54
+ width: var(--_slds-c-datagrid-cell-sizing, 150px);
55
+ height: 100%;
56
+ padding-inline: var(--_slds-c-datagrid-cell-spacing-inline, 0.5rem);
57
+ padding-block: var(--_slds-c-datagrid-cell-spacing-block, 0.25rem);
58
+ background-color: var(--_slds-c-datagrid-cell-color-background, var(--_slds-c-datagrid-color-background));
59
+ border: var(--_slds-c-datagrid-cell-sizing-border, 1px) solid var(--_slds-c-datagrid-cell-color-border, transparent);
60
+ white-space: nowrap;
61
+ align-items: center;
62
+ }
63
+
64
+ :host([data-render-mode="shadow"]) [part='cell']:hover {
65
+ --_slds-c-datagrid-cell-color-background: var(--_slds-c-datagrid-cell-color-background-hover);
66
+ }
67
+
68
+ :host([data-render-mode="shadow"]) [part='cell'][aria-selected='true'] {
69
+ --_slds-c-datagrid-cell-color-border: var(--_slds-c-datagrid-cell-color-border-focus,
70
+ var(--slds-g-color-brand-base-contrast-3));
71
+ }
72
+
73
+ :host([data-render-mode="shadow"]) [part='cell']:focus-within {
74
+ --_slds-c-datagrid-cell-color-border: var(--_slds-c-datagrid-cell-color-border-focus,
75
+ var(--slds-g-color-brand-base-contrast-3));
76
+ }
77
+
78
+ /* Column Header Cells */
79
+
80
+ :host([data-render-mode="shadow"]) [role='columnheader'] {
81
+ font-weight: 700;
82
+ border-right: 1px solid var(--_slds-c-datagrid-headercell-color-border, #babfc7);
83
+ }
84
+
85
+ :host([data-render-mode="shadow"]) [role='columnheader'][aria-sort]:hover {
86
+ background-color: var(--_slds-c-datagrid-headercell-color-background-hover, white);
87
+ }
88
+
89
+ :host([data-render-mode="shadow"]) [role='columnheader'][aria-selected='true'] {
90
+ border-right-color: var(--_slds-c-datagrid-headercell-color-border-focus,
91
+ var(--slds-g-color-brand-base-contrast-3));
92
+ }
93
+
94
+ :host([data-render-mode="shadow"]) [role='columnheader']:focus-within {
95
+ border-right-color: var(--_slds-c-datagrid-headercell-color-border-focus,
96
+ var(--slds-g-color-brand-base-contrast-3));
97
+ box-shadow: var(--_slds-c-datagrid-headercell-color-border-focus, var(--slds-g-color-brand-base-contrast-3)) -3px 0 0 0 inset;
98
+ }
99
+
100
+ /* Rows */
101
+
102
+ :host([data-render-mode="shadow"]) [role~='row'] {
103
+ display: flex;
104
+ border-bottom: var(--_slds-c-datagrid-row-sizing-border, 1px) solid var(--_slds-c-datagrid-row-color-border, #dde2eb);
105
+ }
106
+
107
+ :host([data-render-mode="shadow"]) [role~='row'][aria-selected='true'] {
108
+ background-color: var(--_slds-c-datagrid-row-color-background-selected, #f3f2f2);
109
+ }
110
+
111
+ /* Text value in cells */
112
+
113
+ :host([data-render-mode="shadow"]) [part='value'] {
114
+ overflow: hidden;
115
+ text-overflow: ellipsis;
116
+ white-space: nowrap;
117
+ width: 100%;
118
+ }
119
+
120
+ /* Column sorting */
121
+
122
+ [data-sort] {
123
+ border: none;
124
+ background: transparent;
125
+ display: inline-flex;
126
+ min-width: 0;
127
+ flex: 1 1 0%;
128
+ }
129
+
130
+ [data-sort]::after {
131
+ content: '';
132
+ position: absolute;
133
+ inset: 0;
134
+ }
135
+
136
+ [data-sort] [part='value'] {
137
+ width: auto;
138
+ }
139
+
140
+ [data-resize-handle]:hover,:host([data-render-mode="shadow"])
141
+ [type='range']:focus~[data-resize-handle] {
142
+ opacity: 1;
143
+ }
144
+
145
+ [data-resize-handle] {
146
+ width: 0.75rem;
147
+ position: absolute;
148
+ top: -1px;
149
+ right: -1px;
150
+ bottom: -1px;
151
+ cursor: col-resize;
152
+ opacity: 0;
153
+ }
154
+
155
+ [data-resize-handle]::before {
156
+ content: '';
157
+ width: 1px;
158
+ height: 100vh;
159
+ background-color: var(--_slds-c-datagrid-resize-color-background, var(--slds-g-color-brand-base-contrast-2));
160
+ position: absolute;
161
+ top: 0;
162
+ right: -1px;
163
+ }
164
+
165
+ [data-resize-handle]::after {
166
+ content: '';
167
+ width: 4px;
168
+ height: 100%;
169
+ background-color: var(--_slds-c-datagrid-resize-color-background, var(--slds-g-color-brand-base-contrast-2));
170
+ position: absolute;
171
+ top: 0;
172
+ right: 0;
173
+ }
174
+
175
+ :host([data-render-mode="shadow"]) [part='datagrid-body'] [role~='row']:hover {
176
+ background-color: var(--_slds-c-datagrid-row-color-background-hover, #f3f2f2);
177
+ }
178
+
179
+ /* Action Mode */
180
+
181
+ :host([data-render-mode="shadow"]) [aria-readonly='true'] {
182
+ --_slds-c-datagrid-cell-color-background-hover: inherit;
183
+ }
184
+
185
+ :host([data-render-mode="shadow"]) [aria-readonly='false'] {
186
+ --_slds-c-datagrid-cell-color-background-hover: #fff;
187
+ }