@cloudscape-design/components-themeable 3.0.1309 → 3.0.1311

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 (146) hide show
  1. package/lib/internal/manifest.json +1 -1
  2. package/lib/internal/scss/collection-preferences/content-display/content-display-list.scss +10 -0
  3. package/lib/internal/scss/collection-preferences/content-display/content-display-option.scss +12 -0
  4. package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
  5. package/lib/internal/scss/table/header-cell/styles.scss +42 -5
  6. package/lib/internal/scss/table/resizer/styles.scss +26 -13
  7. package/lib/internal/scss/table/styles.scss +15 -0
  8. package/lib/internal/template/collection-preferences/content-display/content-display-option.js +1 -1
  9. package/lib/internal/template/collection-preferences/content-display/content-display-option.js.map +1 -1
  10. package/lib/internal/template/collection-preferences/content-display/index.d.ts +1 -1
  11. package/lib/internal/template/collection-preferences/content-display/index.d.ts.map +1 -1
  12. package/lib/internal/template/collection-preferences/content-display/index.js +63 -27
  13. package/lib/internal/template/collection-preferences/content-display/index.js.map +1 -1
  14. package/lib/internal/template/collection-preferences/content-display/utils.d.ts +40 -1
  15. package/lib/internal/template/collection-preferences/content-display/utils.d.ts.map +1 -1
  16. package/lib/internal/template/collection-preferences/content-display/utils.js +107 -13
  17. package/lib/internal/template/collection-preferences/content-display/utils.js.map +1 -1
  18. package/lib/internal/template/collection-preferences/index.d.ts.map +1 -1
  19. package/lib/internal/template/collection-preferences/index.js +2 -2
  20. package/lib/internal/template/collection-preferences/index.js.map +1 -1
  21. package/lib/internal/template/collection-preferences/interfaces.d.ts +30 -2
  22. package/lib/internal/template/collection-preferences/interfaces.d.ts.map +1 -1
  23. package/lib/internal/template/collection-preferences/interfaces.js.map +1 -1
  24. package/lib/internal/template/collection-preferences/styles.css.js +38 -36
  25. package/lib/internal/template/collection-preferences/styles.scoped.css +81 -37
  26. package/lib/internal/template/collection-preferences/styles.selectors.js +38 -36
  27. package/lib/internal/template/collection-preferences/utils.d.ts +1 -0
  28. package/lib/internal/template/collection-preferences/utils.d.ts.map +1 -1
  29. package/lib/internal/template/collection-preferences/utils.js +14 -0
  30. package/lib/internal/template/collection-preferences/utils.js.map +1 -1
  31. package/lib/internal/template/i18n/messages/all.all.js +1 -1
  32. package/lib/internal/template/i18n/messages/all.all.json +1 -1
  33. package/lib/internal/template/i18n/messages/all.en.js +1 -1
  34. package/lib/internal/template/i18n/messages/all.en.json +1 -1
  35. package/lib/internal/template/i18n/messages-types.d.ts +4 -0
  36. package/lib/internal/template/i18n/messages-types.d.ts.map +1 -1
  37. package/lib/internal/template/i18n/messages-types.js.map +1 -1
  38. package/lib/internal/template/internal/base-component/styles.scoped.css +1 -1
  39. package/lib/internal/template/internal/environment.js +2 -2
  40. package/lib/internal/template/internal/environment.json +2 -2
  41. package/lib/internal/template/pagination/internal.d.ts.map +1 -1
  42. package/lib/internal/template/pagination/internal.js +4 -1
  43. package/lib/internal/template/pagination/internal.js.map +1 -1
  44. package/lib/internal/template/table/column-groups/col-group.d.ts +8 -0
  45. package/lib/internal/template/table/column-groups/col-group.d.ts.map +1 -0
  46. package/lib/internal/template/table/column-groups/col-group.js +24 -0
  47. package/lib/internal/template/table/column-groups/col-group.js.map +1 -0
  48. package/lib/internal/template/table/column-groups/split-utils.d.ts +27 -0
  49. package/lib/internal/template/table/column-groups/split-utils.d.ts.map +1 -0
  50. package/lib/internal/template/table/column-groups/split-utils.js +43 -0
  51. package/lib/internal/template/table/column-groups/split-utils.js.map +1 -0
  52. package/lib/internal/template/table/column-groups/use-column-groups.d.ts +8 -0
  53. package/lib/internal/template/table/column-groups/use-column-groups.d.ts.map +1 -0
  54. package/lib/internal/template/table/column-groups/use-column-groups.js +23 -0
  55. package/lib/internal/template/table/column-groups/use-column-groups.js.map +1 -0
  56. package/lib/internal/template/table/column-groups/utils.d.ts +55 -0
  57. package/lib/internal/template/table/column-groups/utils.d.ts.map +1 -0
  58. package/lib/internal/template/table/column-groups/utils.js +204 -0
  59. package/lib/internal/template/table/column-groups/utils.js.map +1 -0
  60. package/lib/internal/template/table/header-cell/common-props.d.ts +24 -0
  61. package/lib/internal/template/table/header-cell/common-props.d.ts.map +1 -0
  62. package/lib/internal/template/table/header-cell/common-props.js +4 -0
  63. package/lib/internal/template/table/header-cell/common-props.js.map +1 -0
  64. package/lib/internal/template/table/header-cell/group-header-cell.d.ts +18 -0
  65. package/lib/internal/template/table/header-cell/group-header-cell.d.ts.map +1 -0
  66. package/lib/internal/template/table/header-cell/group-header-cell.js +44 -0
  67. package/lib/internal/template/table/header-cell/group-header-cell.js.map +1 -0
  68. package/lib/internal/template/table/header-cell/index.d.ts +8 -23
  69. package/lib/internal/template/table/header-cell/index.d.ts.map +1 -1
  70. package/lib/internal/template/table/header-cell/index.js +3 -3
  71. package/lib/internal/template/table/header-cell/index.js.map +1 -1
  72. package/lib/internal/template/table/header-cell/styles.css.js +33 -30
  73. package/lib/internal/template/table/header-cell/styles.scoped.css +92 -68
  74. package/lib/internal/template/table/header-cell/styles.selectors.js +33 -30
  75. package/lib/internal/template/table/header-cell/th-element.d.ts +10 -1
  76. package/lib/internal/template/table/header-cell/th-element.d.ts.map +1 -1
  77. package/lib/internal/template/table/header-cell/th-element.js +6 -4
  78. package/lib/internal/template/table/header-cell/th-element.js.map +1 -1
  79. package/lib/internal/template/table/index.d.ts.map +1 -1
  80. package/lib/internal/template/table/index.js +5 -2
  81. package/lib/internal/template/table/index.js.map +1 -1
  82. package/lib/internal/template/table/interfaces.d.ts +48 -1
  83. package/lib/internal/template/table/interfaces.d.ts.map +1 -1
  84. package/lib/internal/template/table/interfaces.js.map +1 -1
  85. package/lib/internal/template/table/internal.d.ts.map +1 -1
  86. package/lib/internal/template/table/internal.js +119 -102
  87. package/lib/internal/template/table/internal.js.map +1 -1
  88. package/lib/internal/template/table/resizer/index.d.ts +6 -2
  89. package/lib/internal/template/table/resizer/index.d.ts.map +1 -1
  90. package/lib/internal/template/table/resizer/index.js +5 -5
  91. package/lib/internal/template/table/resizer/index.js.map +1 -1
  92. package/lib/internal/template/table/resizer/styles.css.js +16 -13
  93. package/lib/internal/template/table/resizer/styles.scoped.css +36 -26
  94. package/lib/internal/template/table/resizer/styles.selectors.js +16 -13
  95. package/lib/internal/template/table/skeleton-rows.d.ts +23 -0
  96. package/lib/internal/template/table/skeleton-rows.d.ts.map +1 -0
  97. package/lib/internal/template/table/skeleton-rows.js +33 -0
  98. package/lib/internal/template/table/skeleton-rows.js.map +1 -0
  99. package/lib/internal/template/table/sticky-header.d.ts +3 -0
  100. package/lib/internal/template/table/sticky-header.d.ts.map +1 -1
  101. package/lib/internal/template/table/sticky-header.js +7 -2
  102. package/lib/internal/template/table/sticky-header.js.map +1 -1
  103. package/lib/internal/template/table/sticky-scrolling.d.ts.map +1 -1
  104. package/lib/internal/template/table/sticky-scrolling.js +6 -1
  105. package/lib/internal/template/table/sticky-scrolling.js.map +1 -1
  106. package/lib/internal/template/table/styles.css.js +36 -34
  107. package/lib/internal/template/table/styles.scoped.css +53 -41
  108. package/lib/internal/template/table/styles.selectors.js +36 -34
  109. package/lib/internal/template/table/table-role/grid-navigation.d.ts.map +1 -1
  110. package/lib/internal/template/table/table-role/grid-navigation.js +5 -7
  111. package/lib/internal/template/table/table-role/grid-navigation.js.map +1 -1
  112. package/lib/internal/template/table/table-role/table-role-helper.d.ts +3 -0
  113. package/lib/internal/template/table/table-role/table-role-helper.d.ts.map +1 -1
  114. package/lib/internal/template/table/table-role/table-role-helper.js +9 -4
  115. package/lib/internal/template/table/table-role/table-role-helper.js.map +1 -1
  116. package/lib/internal/template/table/table-role/utils.d.ts +19 -0
  117. package/lib/internal/template/table/table-role/utils.d.ts.map +1 -1
  118. package/lib/internal/template/table/table-role/utils.js +86 -7
  119. package/lib/internal/template/table/table-role/utils.js.map +1 -1
  120. package/lib/internal/template/table/thead.d.ts +5 -0
  121. package/lib/internal/template/table/thead.d.ts.map +1 -1
  122. package/lib/internal/template/table/thead.js +145 -18
  123. package/lib/internal/template/table/thead.js.map +1 -1
  124. package/lib/internal/template/table/use-column-widths.d.ts +4 -1
  125. package/lib/internal/template/table/use-column-widths.d.ts.map +1 -1
  126. package/lib/internal/template/table/use-column-widths.js +68 -18
  127. package/lib/internal/template/table/use-column-widths.js.map +1 -1
  128. package/lib/internal/template/table/use-sticky-header.d.ts.map +1 -1
  129. package/lib/internal/template/table/use-sticky-header.js +4 -1
  130. package/lib/internal/template/table/use-sticky-header.js.map +1 -1
  131. package/lib/internal/template/table/utils.d.ts.map +1 -1
  132. package/lib/internal/template/table/utils.js +14 -4
  133. package/lib/internal/template/table/utils.js.map +1 -1
  134. package/lib/internal/template/test-utils/dom/collection-preferences/content-display-preference.d.ts +28 -2
  135. package/lib/internal/template/test-utils/dom/collection-preferences/content-display-preference.js +60 -2
  136. package/lib/internal/template/test-utils/dom/collection-preferences/content-display-preference.js.map +1 -1
  137. package/lib/internal/template/test-utils/dom/table/index.d.ts +18 -1
  138. package/lib/internal/template/test-utils/dom/table/index.js +22 -3
  139. package/lib/internal/template/test-utils/dom/table/index.js.map +1 -1
  140. package/lib/internal/template/test-utils/selectors/collection-preferences/content-display-preference.d.ts +28 -2
  141. package/lib/internal/template/test-utils/selectors/collection-preferences/content-display-preference.js +52 -2
  142. package/lib/internal/template/test-utils/selectors/collection-preferences/content-display-preference.js.map +1 -1
  143. package/lib/internal/template/test-utils/selectors/table/index.d.ts +18 -1
  144. package/lib/internal/template/test-utils/selectors/table/index.js +22 -3
  145. package/lib/internal/template/test-utils/selectors/table/index.js.map +1 -1
  146. package/package.json +1 -1
@@ -23,6 +23,8 @@ import { useVisualRefresh } from '../internal/hooks/use-visual-mode';
23
23
  import { isDevelopment } from '../internal/is-development';
24
24
  import InternalLiveRegion from '../live-region/internal';
25
25
  import { TableBodyCell } from './body-cell';
26
+ import { TableColGroup } from './column-groups/col-group';
27
+ import { useColumnGroups } from './column-groups/use-column-groups';
26
28
  import { checkColumnWidths } from './column-widths-utils';
27
29
  import { useExpandableTableProps } from './expandable-rows/expandable-rows-utils';
28
30
  import { NoDataCell } from './no-data-cell';
@@ -33,6 +35,7 @@ import { ResizeTracker } from './resizer';
33
35
  import { focusMarkers, useSelection, useSelectionFocusMove } from './selection';
34
36
  import { TableBodySelectionCell } from './selection/selection-cell';
35
37
  import { useGroupSelection } from './selection/use-group-selection';
38
+ import { SkeletonRows } from './skeleton-rows';
36
39
  import { useStickyColumns } from './sticky-columns';
37
40
  import StickyHeader from './sticky-header';
38
41
  import { StickyScrollbar } from './sticky-scrollbar';
@@ -59,8 +62,8 @@ export const InternalTableAsSubstep = React.forwardRef((props, ref) => {
59
62
  };
60
63
  return React.createElement(InternalTable, { ...tableProps, ref: ref });
61
64
  });
62
- const InternalTable = React.forwardRef(({ header, footer, empty, filter, pagination, preferences, items, columnDefinitions, trackBy, loading, loadingText, selectionType: externalSelectionType, selectedItems, isItemDisabled, ariaLabels, onSelectionChange, onSortingChange, sortingColumn, sortingDescending, sortingDisabled, visibleColumns, stickyHeader, stickyHeaderVerticalOffset, onRowClick, onRowContextMenu, wrapLines, stripedRows, contentDensity, submitEdit, onEditCancel, resizableColumns, onColumnWidthsChange, variant, __internalRootRef, totalItemsCount, firstIndex, renderAriaLive, stickyColumns, columnDisplay, enableKeyboardNavigation, expandableRows: externalExpandableRows, getLoadingStatus, renderLoaderPending, renderLoaderLoading, renderLoaderError, renderLoaderEmpty, renderLoaderCounter, cellVerticalAlign, __funnelSubStepProps, ...rest }, ref) => {
63
- var _a, _b, _c;
65
+ const InternalTable = React.forwardRef(({ header, footer, empty, filter, pagination, preferences, items, columnDefinitions, groupDefinitions, trackBy, loading, loadingText, skeleton, selectionType: externalSelectionType, selectedItems, isItemDisabled, ariaLabels, onSelectionChange, onSortingChange, sortingColumn, sortingDescending, sortingDisabled, visibleColumns, stickyHeader, stickyHeaderVerticalOffset, onRowClick, onRowContextMenu, wrapLines, stripedRows, contentDensity, submitEdit, onEditCancel, resizableColumns, onColumnWidthsChange, variant, __internalRootRef, totalItemsCount, firstIndex, renderAriaLive, stickyColumns, columnDisplay, enableKeyboardNavigation, expandableRows: externalExpandableRows, getLoadingStatus, renderLoaderPending, renderLoaderLoading, renderLoaderError, renderLoaderEmpty, renderLoaderCounter, cellVerticalAlign, __funnelSubStepProps, ...rest }, ref) => {
66
+ var _a, _b, _c, _d, _e;
64
67
  // Keyboard navigation defaults to `true` for tables with expandable rows.
65
68
  if (externalExpandableRows && enableKeyboardNavigation === undefined) {
66
69
  enableKeyboardNavigation = true;
@@ -182,6 +185,8 @@ const InternalTable = React.forwardRef(({ header, footer, empty, filter, paginat
182
185
  columnDisplay,
183
186
  visibleColumns,
184
187
  });
188
+ const visibleColumnIds = visibleColumnDefinitions.map((col, idx) => getColumnKey(col, idx).toString());
189
+ const { groupColumnMap, ...columnGroupsLayout } = useColumnGroups(columnDefinitions, visibleColumnIds, groupDefinitions, columnDisplay);
185
190
  const selectionProps = {
186
191
  items: allItems,
187
192
  rootItems: items,
@@ -270,6 +275,8 @@ const InternalTable = React.forwardRef(({ header, footer, empty, filter, paginat
270
275
  selectionType,
271
276
  getSelectAllProps: selection.getSelectAllProps,
272
277
  columnDefinitions: visibleColumnDefinitions,
278
+ groupDefinitions,
279
+ columnGroupsLayout,
273
280
  variant: computedVariant,
274
281
  tableVariant: computedVariant,
275
282
  wrapLines,
@@ -291,6 +298,8 @@ const InternalTable = React.forwardRef(({ header, footer, empty, filter, paginat
291
298
  resizerTooltipText: ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.resizerTooltipText,
292
299
  stripedRows,
293
300
  stickyState,
301
+ stickyColumnsFirst: (_d = stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) !== null && _d !== void 0 ? _d : 0,
302
+ stickyColumnsLast: (_e = stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.last) !== null && _e !== void 0 ? _e : 0,
294
303
  selectionColumnId,
295
304
  tableRole,
296
305
  isExpandable,
@@ -319,15 +328,16 @@ const InternalTable = React.forwardRef(({ header, footer, empty, filter, paginat
319
328
  const toolsHeaderWrapper = useMergeRefs(toolsHeaderPerformanceMarkRef, toolsHeaderWrapperMeasureRef);
320
329
  const colIndexOffset = selectionType ? 1 : 0;
321
330
  const totalColumnsCount = visibleColumnDefinitions.length + colIndexOffset;
331
+ const headerRowCount = (columnGroupsLayout === null || columnGroupsLayout === void 0 ? void 0 : columnGroupsLayout.rows.length) || 1;
322
332
  return (React.createElement(LinkDefaultVariantContext.Provider, { value: { defaultVariant: 'primary' } },
323
333
  React.createElement(TableComponentsContextProvider, { value: { paginationRef, filterRef, preferencesRef, headerRef } },
324
- React.createElement(ColumnWidthsProvider, { visibleColumns: visibleColumnWidthsWithSelection, resizableColumns: resizableColumns, containerRef: wrapperMeasureRefObject },
334
+ React.createElement(ColumnWidthsProvider, { visibleColumns: visibleColumnWidthsWithSelection, resizableColumns: resizableColumns, containerRef: wrapperMeasureRefObject, groupColumnMap: groupColumnMap },
325
335
  React.createElement(InternalContainer, { ...baseProps, ...tableInteractionAttributes, __internalRootRef: __internalRootRef, className: clsx(baseProps.className, styles.root), __funnelSubStepProps: __funnelSubStepProps, __fullPage: variant === 'full-page', header: React.createElement(React.Fragment, null,
326
336
  hasHeader && (React.createElement("div", null,
327
337
  React.createElement("div", { ref: toolsHeaderWrapper, className: clsx(styles['header-controls'], styles[`variant-${computedVariant}`]) },
328
338
  React.createElement(CollectionLabelContext.Provider, { value: { assignId: setHeaderRef } },
329
339
  React.createElement(ToolsHeader, { header: header, filter: filter, pagination: pagination, preferences: preferences, setLastUserAction: setLastUserAction }))))),
330
- stickyHeader && (React.createElement(StickyHeader, { ref: stickyHeaderRef, variant: computedVariant, theadProps: theadProps, wrapperRef: wrapperRefObject, theadRef: theadRef, secondaryWrapperRef: secondaryWrapperRef, tableRef: tableRefObject, onScroll: handleScroll, tableHasHeader: hasHeader, contentDensity: contentDensity, tableRole: tableRole }))), disableHeaderPaddings: true, disableContentPaddings: true, disableFooterPaddings: true, variant: toContainerVariant(computedVariant), __disableFooterDivider: true, __disableStickyMobile: false, footer: hasFooter ? (React.createElement("div", { className: clsx(styles['footer-wrapper'], styles[`variant-${computedVariant}`]) },
340
+ stickyHeader && (React.createElement(StickyHeader, { ref: stickyHeaderRef, variant: computedVariant, theadProps: theadProps, wrapperRef: wrapperRefObject, theadRef: theadRef, secondaryWrapperRef: secondaryWrapperRef, tableRef: tableRefObject, onScroll: handleScroll, tableHasHeader: hasHeader, contentDensity: contentDensity, tableRole: tableRole, hasGroupedColumns: !!columnGroupsLayout && columnGroupsLayout.rows.length > 1, columnDefinitions: visibleColumnDefinitions, hasSelection: hasSelection }))), disableHeaderPaddings: true, disableContentPaddings: true, disableFooterPaddings: true, variant: toContainerVariant(computedVariant), __disableFooterDivider: true, __disableStickyMobile: false, footer: hasFooter ? (React.createElement("div", { className: clsx(styles['footer-wrapper'], styles[`variant-${computedVariant}`]) },
331
341
  React.createElement("div", { className: clsx(styles.footer, hasFooterPagination && styles['footer-with-pagination']) },
332
342
  footer && React.createElement("span", null, footer),
333
343
  hasFooterPagination && React.createElement("div", { className: styles['footer-pagination'] }, pagination)))) : null, __stickyHeader: stickyHeader, __mobileStickyOffset: toolsHeaderHeight !== null && toolsHeaderHeight !== void 0 ? toolsHeaderHeight : 0, __stickyOffset: stickyHeaderVerticalOffset, ...focusMarkers.root },
@@ -344,113 +354,120 @@ const InternalTable = React.forwardRef(({ header, footer, empty, filter, paginat
344
354
  totalItemsCount,
345
355
  })))),
346
356
  React.createElement(GridNavigationProvider, { keyboardNavigation: !!enableKeyboardNavigation, pageSize: GRID_NAVIGATION_PAGE_SIZE, getTable: () => tableRefObject.current },
347
- React.createElement("table", { ...performanceMarkAttributes, ref: tableRef, className: clsx(styles.table, resizableColumns && styles['table-layout-fixed'], contentDensity === 'compact' && getVisualContextClassname('compact-table')), ...getTableRoleProps({
357
+ React.createElement("table", { ...performanceMarkAttributes, ref: tableRef, className: clsx(styles.table, resizableColumns && styles['table-layout-fixed'], columnGroupsLayout && columnGroupsLayout.rows.length > 1 && styles['has-grouped-header'], contentDensity === 'compact' && getVisualContextClassname('compact-table')), ...getTableRoleProps({
348
358
  tableRole,
349
359
  totalItemsCount,
350
360
  totalColumnsCount: totalColumnsCount,
361
+ headerRowCount,
351
362
  ariaLabel: ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.tableLabel,
352
363
  ariaLabelledby,
353
364
  }) },
365
+ resizableColumns && columnGroupsLayout && columnGroupsLayout.rows.length > 1 && (React.createElement(TableColGroup, { visibleColumnDefinitions: visibleColumnDefinitions, hasSelection: hasSelection })),
354
366
  React.createElement(Thead, { ref: theadRef, hidden: stickyHeader, onFocusedComponentChange: focusId => { var _a; return (_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.setFocus(focusId); }, ...theadProps }),
355
- React.createElement("tbody", null, loading || allItems.length === 0 ? (React.createElement("tr", null,
356
- React.createElement(NoDataCell, { totalColumnsCount: totalColumnsCount, hasFooter: hasFooter, loading: loading, loadingText: loadingText, empty: empty, tableRef: tableRefObject, containerRef: wrapperMeasureRefObject }))) : (allRows.map((row, rowIndex) => {
357
- const isFirstRow = rowIndex === 0;
358
- const isLastRow = rowIndex === allRows.length - 1;
359
- const rowExpandableProps = row.type === 'data' ? expandableRows.getExpandableItemProps(row.item) : undefined;
360
- const rowRoleProps = getTableRowRoleProps({
361
- tableRole,
362
- firstIndex,
363
- rowIndex,
364
- level: row.type === 'loader' ? row.level : undefined,
365
- ...rowExpandableProps,
366
- });
367
- const getTableItemKey = (item) => getItemKey(trackBy, item, rowIndex);
368
- const sharedCellProps = {
369
- isFirstRow,
370
- isLastRow,
371
- isSelected: hasSelection && isRowSelected(row),
372
- isPrevSelected: hasSelection && !isFirstRow && isRowSelected(allRows[rowIndex - 1]),
373
- isNextSelected: hasSelection && !isLastRow && isRowSelected(allRows[rowIndex + 1]),
374
- isEvenRow: rowIndex % 2 === 0,
375
- stripedRows,
376
- hasSelection,
377
- hasFooter,
378
- stickyState,
379
- tableRole,
380
- };
381
- if (row.type === 'data') {
382
- const rowId = `${getTableItemKey(row.item)}`;
383
- return (React.createElement("tr", { key: rowId, className: clsx(styles.row, sharedCellProps.isSelected && styles['row-selected']), onFocus: ({ currentTarget }) => {
384
- var _a;
385
- // When an element inside table row receives focus we want to adjust the scroll.
386
- // However, that behavior is unwanted when the focus is received as result of a click
387
- // as it causes the click to never reach the target element.
388
- if (!currentTarget.contains(getMouseDownTarget())) {
389
- (_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.scrollToRow(currentTarget);
390
- }
391
- }, ...focusMarkers.item, onClick: onRowClickHandler && onRowClickHandler.bind(null, rowIndex, row.item), onContextMenu: onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, row.item), ...rowRoleProps },
392
- selection.getItemSelectionProps && (React.createElement(TableBodySelectionCell, { ...sharedCellProps, columnId: selectionColumnId, selectionControlProps: {
393
- ...selection.getItemSelectionProps(row.item),
394
- onFocusDown: moveFocusDown,
395
- onFocusUp: moveFocusUp,
396
- rowIndex,
397
- itemKey: rowId,
398
- }, verticalAlign: cellVerticalAlign, tableVariant: computedVariant })),
399
- visibleColumnDefinitions.map((column, colIndex) => {
400
- var _a, _b, _c;
401
- const colId = `${getColumnKey(column, colIndex)}`;
402
- const cellId = { row: rowId, col: colId };
403
- const isEditing = cellEditing.checkEditing(cellId);
404
- const successfulEdit = cellEditing.checkLastSuccessfulEdit(cellId);
405
- const isEditable = !!column.editConfig && !cellEditing.isLoading;
406
- const cellExpandableProps = isExpandable && colIndex === 0 ? rowExpandableProps : undefined;
407
- const counter = (_a = column.counter) === null || _a === void 0 ? void 0 : _a.call(column, {
408
- item: row.item,
409
- itemsCount: rowExpandableProps === null || rowExpandableProps === void 0 ? void 0 : rowExpandableProps.itemsCount,
410
- selectedItemsCount: rowExpandableProps === null || rowExpandableProps === void 0 ? void 0 : rowExpandableProps.selectedItemsCount,
411
- });
412
- const analyticsMetadata = {
413
- component: {
414
- innerContext: {
415
- position: `${rowIndex + 1},${colIndex + 1}`,
416
- columnId: column.id ? `${column.id}` : '',
417
- columnLabel: {
418
- selector: `table thead tr th:nth-child(${colIndex + (selectionType ? 2 : 1)})`,
419
- root: 'component',
367
+ React.createElement("tbody", null,
368
+ skeleton && allItems.length === 0 && loading ? (React.createElement(SkeletonRows, { count: skeleton.totalRows, hasDataRows: false, totalColumnsCount: totalColumnsCount, loadingText: loadingText, hasSelection: hasSelection, hasFooter: hasFooter, stickyState: stickyState, tableRole: tableRole, ariaLabels: ariaLabels, cellVerticalAlign: cellVerticalAlign, computedVariant: computedVariant, visibleColumnDefinitions: visibleColumnDefinitions, wrapLines: wrapLines, resizableColumns: resizableColumns, colIndexOffset: colIndexOffset })) : !skeleton && (loading || allItems.length === 0) ? (React.createElement("tr", null,
369
+ React.createElement(NoDataCell, { totalColumnsCount: totalColumnsCount, hasFooter: hasFooter, loading: loading, loadingText: loadingText, empty: empty, tableRef: tableRefObject, containerRef: wrapperMeasureRefObject }))) : (allRows.map((row, rowIndex) => {
370
+ const isFirstRow = rowIndex === 0;
371
+ const hasSkeletonBelow = loading && skeleton && allItems.length > 0 && skeleton.totalRows - allItems.length > 0;
372
+ const isLastDataRow = rowIndex === allRows.length - 1;
373
+ const isLastRow = isLastDataRow && !hasSkeletonBelow;
374
+ const rowExpandableProps = row.type === 'data' ? expandableRows.getExpandableItemProps(row.item) : undefined;
375
+ const rowRoleProps = getTableRowRoleProps({
376
+ tableRole,
377
+ firstIndex,
378
+ rowIndex,
379
+ headerRowCount,
380
+ level: row.type === 'loader' ? row.level : undefined,
381
+ ...rowExpandableProps,
382
+ });
383
+ const getTableItemKey = (item) => getItemKey(trackBy, item, rowIndex);
384
+ const sharedCellProps = {
385
+ isFirstRow,
386
+ isLastRow,
387
+ isSelected: hasSelection && isRowSelected(row),
388
+ isPrevSelected: hasSelection && !isFirstRow && isRowSelected(allRows[rowIndex - 1]),
389
+ isNextSelected: hasSelection && !isLastDataRow && isRowSelected(allRows[rowIndex + 1]),
390
+ isEvenRow: rowIndex % 2 === 0,
391
+ stripedRows,
392
+ hasSelection,
393
+ hasFooter,
394
+ stickyState,
395
+ tableRole,
396
+ };
397
+ if (row.type === 'data') {
398
+ const rowId = `${getTableItemKey(row.item)}`;
399
+ return (React.createElement("tr", { key: rowId, className: clsx(styles.row, sharedCellProps.isSelected && styles['row-selected']), onFocus: ({ currentTarget }) => {
400
+ var _a;
401
+ // When an element inside table row receives focus we want to adjust the scroll.
402
+ // However, that behavior is unwanted when the focus is received as result of a click
403
+ // as it causes the click to never reach the target element.
404
+ if (!currentTarget.contains(getMouseDownTarget())) {
405
+ (_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.scrollToRow(currentTarget);
406
+ }
407
+ }, ...focusMarkers.item, onClick: onRowClickHandler && onRowClickHandler.bind(null, rowIndex, row.item), onContextMenu: onRowContextMenuHandler && onRowContextMenuHandler.bind(null, rowIndex, row.item), ...rowRoleProps },
408
+ selection.getItemSelectionProps && (React.createElement(TableBodySelectionCell, { ...sharedCellProps, columnId: selectionColumnId, selectionControlProps: {
409
+ ...selection.getItemSelectionProps(row.item),
410
+ onFocusDown: moveFocusDown,
411
+ onFocusUp: moveFocusUp,
412
+ rowIndex,
413
+ itemKey: rowId,
414
+ }, verticalAlign: cellVerticalAlign, tableVariant: computedVariant })),
415
+ visibleColumnDefinitions.map((column, colIndex) => {
416
+ var _a, _b, _c;
417
+ const colId = `${getColumnKey(column, colIndex)}`;
418
+ const cellId = { row: rowId, col: colId };
419
+ const isEditing = cellEditing.checkEditing(cellId);
420
+ const successfulEdit = cellEditing.checkLastSuccessfulEdit(cellId);
421
+ const isEditable = !!column.editConfig && !cellEditing.isLoading;
422
+ const cellExpandableProps = isExpandable && colIndex === 0 ? rowExpandableProps : undefined;
423
+ const counter = (_a = column.counter) === null || _a === void 0 ? void 0 : _a.call(column, {
424
+ item: row.item,
425
+ itemsCount: rowExpandableProps === null || rowExpandableProps === void 0 ? void 0 : rowExpandableProps.itemsCount,
426
+ selectedItemsCount: rowExpandableProps === null || rowExpandableProps === void 0 ? void 0 : rowExpandableProps.selectedItemsCount,
427
+ });
428
+ const analyticsMetadata = {
429
+ component: {
430
+ innerContext: {
431
+ position: `${rowIndex + 1},${colIndex + 1}`,
432
+ columnId: column.id ? `${column.id}` : '',
433
+ columnLabel: {
434
+ selector: `table thead tr th:nth-child(${colIndex + (selectionType ? 2 : 1)})`,
435
+ root: 'component',
436
+ },
437
+ item: rowId,
420
438
  },
421
- item: rowId,
422
439
  },
423
- },
424
- };
425
- return (React.createElement(TableBodyCell, { key: colId, ...sharedCellProps, resizableStyle: {
426
- width: column.width,
427
- minWidth: column.minWidth,
428
- maxWidth: column.maxWidth,
429
- }, ariaLabels: ariaLabels, column: column, item: row.item, wrapLines: wrapLines, isEditable: isEditable, isEditing: isEditing, isRowHeader: column.isRowHeader, successfulEdit: successfulEdit, resizableColumns: resizableColumns, onEditStart: () => cellEditing.startEdit(cellId), onEditEnd: editCancelled => cellEditing.completeEdit(cellId, editCancelled), submitEdit: cellEditing.submitEdit, columnId: (_b = column.id) !== null && _b !== void 0 ? _b : colIndex, colIndex: colIndex + colIndexOffset, verticalAlign: (_c = column.verticalAlign) !== null && _c !== void 0 ? _c : cellVerticalAlign, tableVariant: computedVariant, counter: counter, ...cellExpandableProps, ...getAnalyticsMetadataAttribute(analyticsMetadata) }));
430
- })));
431
- }
432
- const loaderSelectionProps = selection.getLoaderSelectionProps && selection.getLoaderSelectionProps(row.item);
433
- const rowSelection = selectionType === 'group' ? loaderSelectionProps : undefined;
434
- const loaderContent = getLoaderContent({
435
- item: row.item,
436
- loadingStatus: row.status,
437
- renderLoaderPending,
438
- renderLoaderLoading,
439
- renderLoaderError,
440
- renderLoaderEmpty,
441
- });
442
- const loaderCounter = renderLoaderCounter === null || renderLoaderCounter === void 0 ? void 0 : renderLoaderCounter({
443
- item: row.item,
444
- loadingStatus: row.status,
445
- selected: !!(rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.checked),
446
- });
447
- return (loaderContent && (React.createElement("tr", { key: (row.item ? getTableItemKey(row.item) : 'root-' + rowIndex) + '-' + row.from, className: styles.row, ...rowRoleProps },
448
- selectionType ? (React.createElement(TableBodySelectionCell, { ...sharedCellProps, columnId: selectionColumnId, verticalAlign: cellVerticalAlign, tableVariant: computedVariant, selectionControlProps: selectionType === 'group' ? loaderSelectionProps : undefined, isSelected: selectionType === 'group' && !!(loaderSelectionProps === null || loaderSelectionProps === void 0 ? void 0 : loaderSelectionProps.checked) })) : null,
449
- visibleColumnDefinitions.map((column, colIndex) => {
450
- var _a;
451
- return (React.createElement(TableLoaderCell, { key: getColumnKey(column, colIndex), ...sharedCellProps, wrapLines: false, columnId: (_a = column.id) !== null && _a !== void 0 ? _a : colIndex, colIndex: colIndex + colIndexOffset, isSelected: selectionType === 'group' && !!(loaderSelectionProps === null || loaderSelectionProps === void 0 ? void 0 : loaderSelectionProps.checked), isRowHeader: colIndex === 0, level: row.level, item: row.item, trackBy: trackBy, counter: loaderCounter }, loaderContent));
452
- }))));
453
- }))))),
440
+ };
441
+ return (React.createElement(TableBodyCell, { key: colId, ...sharedCellProps, resizableStyle: {
442
+ width: column.width,
443
+ minWidth: column.minWidth,
444
+ maxWidth: column.maxWidth,
445
+ }, ariaLabels: ariaLabels, column: column, item: row.item, wrapLines: wrapLines, isEditable: isEditable, isEditing: isEditing, isRowHeader: column.isRowHeader, successfulEdit: successfulEdit, resizableColumns: resizableColumns, onEditStart: () => cellEditing.startEdit(cellId), onEditEnd: editCancelled => cellEditing.completeEdit(cellId, editCancelled), submitEdit: cellEditing.submitEdit, columnId: (_b = column.id) !== null && _b !== void 0 ? _b : colIndex, colIndex: colIndex + colIndexOffset, verticalAlign: (_c = column.verticalAlign) !== null && _c !== void 0 ? _c : cellVerticalAlign, tableVariant: computedVariant, counter: counter, ...cellExpandableProps, ...getAnalyticsMetadataAttribute(analyticsMetadata) }));
446
+ })));
447
+ }
448
+ const loaderSelectionProps = selection.getLoaderSelectionProps && selection.getLoaderSelectionProps(row.item);
449
+ const rowSelection = selectionType === 'group' ? loaderSelectionProps : undefined;
450
+ const loaderContent = getLoaderContent({
451
+ item: row.item,
452
+ loadingStatus: row.status,
453
+ renderLoaderPending,
454
+ renderLoaderLoading,
455
+ renderLoaderError,
456
+ renderLoaderEmpty,
457
+ });
458
+ const loaderCounter = renderLoaderCounter === null || renderLoaderCounter === void 0 ? void 0 : renderLoaderCounter({
459
+ item: row.item,
460
+ loadingStatus: row.status,
461
+ selected: !!(rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.checked),
462
+ });
463
+ return (loaderContent && (React.createElement("tr", { key: (row.item ? getTableItemKey(row.item) : 'root-' + rowIndex) + '-' + row.from, className: styles.row, ...rowRoleProps },
464
+ selectionType ? (React.createElement(TableBodySelectionCell, { ...sharedCellProps, columnId: selectionColumnId, verticalAlign: cellVerticalAlign, tableVariant: computedVariant, selectionControlProps: selectionType === 'group' ? loaderSelectionProps : undefined, isSelected: selectionType === 'group' && !!(loaderSelectionProps === null || loaderSelectionProps === void 0 ? void 0 : loaderSelectionProps.checked) })) : null,
465
+ visibleColumnDefinitions.map((column, colIndex) => {
466
+ var _a;
467
+ return (React.createElement(TableLoaderCell, { key: getColumnKey(column, colIndex), ...sharedCellProps, wrapLines: false, columnId: (_a = column.id) !== null && _a !== void 0 ? _a : colIndex, colIndex: colIndex + colIndexOffset, isSelected: selectionType === 'group' && !!(loaderSelectionProps === null || loaderSelectionProps === void 0 ? void 0 : loaderSelectionProps.checked), isRowHeader: colIndex === 0, level: row.level, item: row.item, trackBy: trackBy, counter: loaderCounter }, loaderContent));
468
+ }))));
469
+ })),
470
+ loading && skeleton && allItems.length > 0 && skeleton.totalRows - allItems.length > 0 && (React.createElement(SkeletonRows, { count: skeleton.totalRows - allItems.length, hasDataRows: true, totalColumnsCount: totalColumnsCount, loadingText: loadingText, hasSelection: hasSelection, hasFooter: hasFooter, stickyState: stickyState, tableRole: tableRole, ariaLabels: ariaLabels, cellVerticalAlign: cellVerticalAlign, computedVariant: computedVariant, visibleColumnDefinitions: visibleColumnDefinitions, wrapLines: wrapLines, resizableColumns: resizableColumns, colIndexOffset: colIndexOffset }))))),
454
471
  resizableColumns && React.createElement(ResizeTracker, null)),
455
472
  React.createElement(StickyScrollbar, { ref: scrollbarRef, wrapperRef: wrapperRefObject, tableRef: tableRefObject, onScroll: handleScroll, hasStickyColumns: hasStickyColumns }))))));
456
473
  });