@rio-cloud/uikit-mcp 1.1.10 → 1.1.12

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 (210) hide show
  1. package/README.md +2 -1
  2. package/dist/doc-metadata.json +92 -92
  3. package/dist/docs/components/accentBar.md +1 -1
  4. package/dist/docs/components/activity.md +1 -1
  5. package/dist/docs/components/analyticsAnalysisOverlay.md +3 -1
  6. package/dist/docs/components/animatedNumber.md +2 -2
  7. package/dist/docs/components/animatedTextReveal.md +6 -6
  8. package/dist/docs/components/animations.md +22 -22
  9. package/dist/docs/components/appHeader.md +1 -1
  10. package/dist/docs/components/appLayout.md +31 -65
  11. package/dist/docs/components/appNavigationBar.md +1 -1
  12. package/dist/docs/components/areaCharts.md +7 -5
  13. package/dist/docs/components/aspectRatioPlaceholder.md +1 -1
  14. package/dist/docs/components/assetTree.md +160 -142
  15. package/dist/docs/components/autosuggests.md +1 -1
  16. package/dist/docs/components/avatar.md +1 -1
  17. package/dist/docs/components/banner.md +2 -2
  18. package/dist/docs/components/barCharts.md +16 -14
  19. package/dist/docs/components/barList.md +9 -9
  20. package/dist/docs/components/basicMap.md +45 -1
  21. package/dist/docs/components/bottomSheet.md +1 -1
  22. package/dist/docs/components/button.md +1 -1
  23. package/dist/docs/components/buttonToolbar.md +1 -1
  24. package/dist/docs/components/calendarStripe.md +56 -56
  25. package/dist/docs/components/card.md +1 -1
  26. package/dist/docs/components/carousel.md +1 -1
  27. package/dist/docs/components/chartColors.md +3 -1
  28. package/dist/docs/components/chartsGettingStarted.md +3 -1
  29. package/dist/docs/components/chat.md +1 -1
  30. package/dist/docs/components/checkbox.md +3 -1
  31. package/dist/docs/components/circularProgress.md +5 -5
  32. package/dist/docs/components/clearableInput.md +1 -1
  33. package/dist/docs/components/collapse.md +4 -2
  34. package/dist/docs/components/composedCharts.md +17 -15
  35. package/dist/docs/components/contentLoader.md +1 -1
  36. package/dist/docs/components/dataTabs.md +1 -1
  37. package/dist/docs/components/datepickers.md +662 -660
  38. package/dist/docs/components/dayPicker.md +55 -5
  39. package/dist/docs/components/dayPickerCalendar.md +488 -468
  40. package/dist/docs/components/dialogs.md +1 -1
  41. package/dist/docs/components/divider.md +1 -1
  42. package/dist/docs/components/dropdowns.md +3270 -3244
  43. package/dist/docs/components/editableContent.md +1 -1
  44. package/dist/docs/components/expander.md +1 -1
  45. package/dist/docs/components/fade.md +1 -1
  46. package/dist/docs/components/fadeExpander.md +1 -1
  47. package/dist/docs/components/fadeUp.md +2 -2
  48. package/dist/docs/components/feedback.md +1 -1
  49. package/dist/docs/components/filePickers.md +1 -1
  50. package/dist/docs/components/formLabel.md +1 -1
  51. package/dist/docs/components/groupedItemList.md +1 -1
  52. package/dist/docs/components/htmlTable.md +113 -115
  53. package/dist/docs/components/iconList.md +3 -3
  54. package/dist/docs/components/imagePreloader.md +1 -1
  55. package/dist/docs/components/labeledElement.md +1 -1
  56. package/dist/docs/components/licensePlate.md +1 -1
  57. package/dist/docs/components/lineCharts.md +6 -4
  58. package/dist/docs/components/listMenu.md +1 -1
  59. package/dist/docs/components/loadMore.md +1 -1
  60. package/dist/docs/components/mainNavigation.md +1 -1
  61. package/dist/docs/components/mapCircle.md +1 -1
  62. package/dist/docs/components/mapCluster.md +3 -1
  63. package/dist/docs/components/mapContext.md +1 -1
  64. package/dist/docs/components/mapDraggableMarker.md +1 -1
  65. package/dist/docs/components/mapGettingStarted.md +39 -1
  66. package/dist/docs/components/mapInfoBubble.md +1 -1
  67. package/dist/docs/components/mapLayerGroup.md +1 -1
  68. package/dist/docs/components/mapMarker.md +3 -1
  69. package/dist/docs/components/mapPolygon.md +1 -1
  70. package/dist/docs/components/mapRoute.md +1 -1
  71. package/dist/docs/components/mapSettings.md +36 -9
  72. package/dist/docs/components/mapUtils.md +65 -2
  73. package/dist/docs/components/mapViewportHistory.md +287 -0
  74. package/dist/docs/components/multiselects.md +171 -1
  75. package/dist/docs/components/noData.md +1 -1
  76. package/dist/docs/components/notifications.md +1 -1
  77. package/dist/docs/components/numbercontrol.md +1 -1
  78. package/dist/docs/components/onboarding.md +1 -1
  79. package/dist/docs/components/page.md +1 -1
  80. package/dist/docs/components/pager.md +1 -1
  81. package/dist/docs/components/pieCharts.md +38 -36
  82. package/dist/docs/components/popover.md +1 -1
  83. package/dist/docs/components/position.md +1 -1
  84. package/dist/docs/components/radialBarCharts.md +27 -25
  85. package/dist/docs/components/radioCardGroup.md +1 -1
  86. package/dist/docs/components/radiobutton.md +3 -1
  87. package/dist/docs/components/releaseNotes.md +1 -1
  88. package/dist/docs/components/resizer.md +3 -1
  89. package/dist/docs/components/responsiveColumnStripe.md +3 -1
  90. package/dist/docs/components/responsiveVideo.md +1 -1
  91. package/dist/docs/components/rioglyph.md +1 -1
  92. package/dist/docs/components/rules.md +1 -1
  93. package/dist/docs/components/saveableInput.md +247 -247
  94. package/dist/docs/components/selects.md +168 -51
  95. package/dist/docs/components/sidebar.md +1 -1
  96. package/dist/docs/components/sliders.md +1 -1
  97. package/dist/docs/components/smoothScrollbars.md +3 -1
  98. package/dist/docs/components/spinners.md +1 -1
  99. package/dist/docs/components/states.md +15 -1
  100. package/dist/docs/components/statsWidgets.md +1 -1
  101. package/dist/docs/components/statusBar.md +3 -1
  102. package/dist/docs/components/stepButton.md +1 -1
  103. package/dist/docs/components/steppedProgressBars.md +1 -1
  104. package/dist/docs/components/subNavigation.md +1 -1
  105. package/dist/docs/components/supportMarker.md +1 -1
  106. package/dist/docs/components/svgImage.md +1 -1
  107. package/dist/docs/components/switch.md +3 -1
  108. package/dist/docs/components/table.md +1998 -221
  109. package/dist/docs/components/tableControls.md +51 -51
  110. package/dist/docs/components/tagManager.md +1 -1
  111. package/dist/docs/components/tags.md +1 -1
  112. package/dist/docs/components/teaser.md +3 -1
  113. package/dist/docs/components/textTruncateMiddle.md +1 -1
  114. package/dist/docs/components/timeline.md +1 -1
  115. package/dist/docs/components/timepicker.md +3 -1
  116. package/dist/docs/components/toggleButton.md +1 -1
  117. package/dist/docs/components/tooltip.md +5 -1
  118. package/dist/docs/components/tracker.md +1 -1
  119. package/dist/docs/components/virtualList.md +58 -56
  120. package/dist/docs/foundations.md +271 -105
  121. package/dist/docs/start/changelog.md +44 -212
  122. package/dist/docs/start/goodtoknow.md +8 -2
  123. package/dist/docs/start/guidelines/color-combinations.md +5 -1
  124. package/dist/docs/start/guidelines/custom-css.md +26 -2
  125. package/dist/docs/start/guidelines/custom-rioglyph.md +20 -2
  126. package/dist/docs/start/guidelines/formatting.md +2256 -249
  127. package/dist/docs/start/guidelines/iframe.md +37 -1
  128. package/dist/docs/start/guidelines/obfuscate-data.md +26 -2
  129. package/dist/docs/start/guidelines/print-css.md +16 -2
  130. package/dist/docs/start/guidelines/spinner.md +1 -1
  131. package/dist/docs/start/guidelines/state-in-url.md +1138 -11
  132. package/dist/docs/start/guidelines/supported-browsers.md +9 -2
  133. package/dist/docs/start/guidelines/writing.md +228 -2
  134. package/dist/docs/start/howto.md +160 -10
  135. package/dist/docs/start/intro.md +40 -2
  136. package/dist/docs/start/responsiveness.md +29 -1
  137. package/dist/docs/templates/ai-assistant.md +1 -1
  138. package/dist/docs/templates/common-table.md +55 -55
  139. package/dist/docs/templates/detail-views.md +2 -2
  140. package/dist/docs/templates/expandable-details.md +1 -1
  141. package/dist/docs/templates/feature-cards.md +37 -37
  142. package/dist/docs/templates/form-summary.md +15 -15
  143. package/dist/docs/templates/form-toggle.md +1 -1
  144. package/dist/docs/templates/list-blocks.md +137 -137
  145. package/dist/docs/templates/loading-progress.md +1 -1
  146. package/dist/docs/templates/options-panel.md +1 -1
  147. package/dist/docs/templates/panel-variants.md +1 -1
  148. package/dist/docs/templates/progress-cards.md +1 -1
  149. package/dist/docs/templates/progress-success.md +1 -1
  150. package/dist/docs/templates/settings-form.md +18 -18
  151. package/dist/docs/templates/stats-blocks.md +10 -10
  152. package/dist/docs/templates/table-panel.md +1 -1
  153. package/dist/docs/templates/usage-cards.md +1 -1
  154. package/dist/docs/utilities/classNames.md +89 -1
  155. package/dist/docs/utilities/deviceUtils.md +1 -1
  156. package/dist/docs/utilities/featureToggles.md +182 -2
  157. package/dist/docs/utilities/fuelTypeUtils.md +1 -1
  158. package/dist/docs/utilities/getTrackingAttributes.md +46 -1
  159. package/dist/docs/utilities/routeUtils.md +210 -2
  160. package/dist/docs/utilities/useAfterMount.md +1 -1
  161. package/dist/docs/utilities/useAutoAnimate.md +1 -1
  162. package/dist/docs/utilities/useAverage.md +1 -1
  163. package/dist/docs/utilities/useClickOutside.md +1 -1
  164. package/dist/docs/utilities/useClipboard.md +2 -2
  165. package/dist/docs/utilities/useCookies.md +1 -1
  166. package/dist/docs/utilities/useCount.md +1 -1
  167. package/dist/docs/utilities/useDarkMode.md +1 -1
  168. package/dist/docs/utilities/useDebugInfo.md +3 -3
  169. package/dist/docs/utilities/useDraggableElement.md +1 -1
  170. package/dist/docs/utilities/useEffectOnce.md +1 -1
  171. package/dist/docs/utilities/useElapsedTime.md +1 -1
  172. package/dist/docs/utilities/useElementSize.md +1 -1
  173. package/dist/docs/utilities/useEsc.md +1 -1
  174. package/dist/docs/utilities/useEvent.md +1 -1
  175. package/dist/docs/utilities/useFocusTrap.md +1 -1
  176. package/dist/docs/utilities/useFullscreen.md +1 -1
  177. package/dist/docs/utilities/useHover.md +1 -1
  178. package/dist/docs/utilities/useIncomingPostMessages.md +1 -1
  179. package/dist/docs/utilities/useInterval.md +1 -1
  180. package/dist/docs/utilities/useIsFocusWithin.md +1 -1
  181. package/dist/docs/utilities/useKey.md +1 -1
  182. package/dist/docs/utilities/useLocalStorage.md +1 -1
  183. package/dist/docs/utilities/useLocationSuggestions.md +1 -1
  184. package/dist/docs/utilities/useMax.md +1 -1
  185. package/dist/docs/utilities/useMin.md +1 -1
  186. package/dist/docs/utilities/useMutationObserver.md +1 -1
  187. package/dist/docs/utilities/useOnScreen.md +1 -1
  188. package/dist/docs/utilities/useOnlineStatus.md +1 -1
  189. package/dist/docs/utilities/usePostMessage.md +1 -1
  190. package/dist/docs/utilities/usePostMessageSender.md +1 -1
  191. package/dist/docs/utilities/usePrevious.md +111 -1
  192. package/dist/docs/utilities/useResizeObserver.md +1 -1
  193. package/dist/docs/utilities/useRioCookieConsent.md +1 -1
  194. package/dist/docs/utilities/useScrollPosition.md +1 -1
  195. package/dist/docs/utilities/useSearch.md +1 -1
  196. package/dist/docs/utilities/useSearchHighlight.md +1 -1
  197. package/dist/docs/utilities/useSorting.md +1 -1
  198. package/dist/docs/utilities/useStateWithValidation.md +1 -1
  199. package/dist/docs/utilities/useSum.md +1 -1
  200. package/dist/docs/utilities/useTableExport.md +61 -61
  201. package/dist/docs/utilities/useTableSelection.md +72 -72
  202. package/dist/docs/utilities/useTimeout.md +1 -1
  203. package/dist/docs/utilities/useToggle.md +1 -1
  204. package/dist/docs/utilities/useUrlState.md +1 -1
  205. package/dist/docs/utilities/useWindowResize.md +1 -1
  206. package/dist/index.mjs +174 -70
  207. package/dist/search-synonyms.json +214 -76
  208. package/dist/version.json +2 -2
  209. package/package.json +8 -6
  210. package/dist/docs/components/mapRouteGenerator.md +0 -6
@@ -3,7 +3,7 @@
3
3
  *Category:* Components
4
4
  *Section:* Table
5
5
  *Source:* https://uikit.developers.rio.cloud/#/components/table
6
- *Captured:* 2026-04-20T12:56:03.494Z
6
+ *Captured:* 2026-05-06T12:15:46.902Z
7
7
 
8
8
  The new Table component is the preferred approach for building tables in the UIKIT. It provides a declarative API for headers, rows, cells, and footers while keeping table and card views consistent across responsive layouts.
9
9
 
@@ -1445,6 +1445,7 @@ const TableResizableSortableExample = () => {
1445
1445
  sortBy: String(sortKey),
1446
1446
  sortDirection,
1447
1447
  });
1448
+ const visibleColumns = columns.filter(column => column.visible !== false);
1448
1449
 
1449
1450
  const selection = useTableSelection({
1450
1451
  rows: sortedItems,
@@ -1518,41 +1519,84 @@ const TableResizableSortableExample = () => {
1518
1519
  onColumnOrderChange={handleColumnOrderChange}
1519
1520
  >
1520
1521
  <TableHeader>
1521
- {columns
1522
- .filter(column => column.visible !== false)
1523
- .map(column => (
1524
- <TableHeaderColumn
1525
- key={column.key}
1526
- columnKey={column.key}
1527
- width={column.width}
1528
- sortable={column.sortable}
1529
- resizeable={column.resizeable}
1530
- draggable={column.draggable}
1531
- horizontalAlign={column.horizontalAlign}
1532
- icon={column.icon}
1533
- hideLabel={column.hideLabel}
1534
- >
1535
- {column.label}
1536
- </TableHeaderColumn>
1537
- ))}
1522
+ {visibleColumns.map(column => (
1523
+ <TableHeaderColumn
1524
+ key={column.key}
1525
+ columnKey={column.key}
1526
+ width={column.width}
1527
+ sortable={column.sortable}
1528
+ resizeable={column.resizeable}
1529
+ draggable={column.draggable}
1530
+ horizontalAlign={column.horizontalAlign}
1531
+ icon={column.icon}
1532
+ hideLabel={column.hideLabel}
1533
+ >
1534
+ {column.label}
1535
+ </TableHeaderColumn>
1536
+ ))}
1538
1537
  </TableHeader>
1539
1538
 
1540
1539
  <TableBody>
1541
1540
  {sortedItems.map(row => (
1542
1541
  <TableRow key={row.id} id={row.id}>
1543
- <TableColumn columnKey='orderId'>{row.orderId}</TableColumn>
1544
- <TableColumn columnKey='vehicle'>{row.vehicle}</TableColumn>
1545
- <TableColumn columnKey='route'>{row.route}</TableColumn>
1546
- <TableColumn columnKey='cargo'>{row.cargo}</TableColumn>
1547
- <TableColumn columnKey='status'>
1548
- <span className={resolveStatusLabelClassName(row.status)}>{row.status}</span>
1549
- </TableColumn>
1550
- <TableColumn columnKey='eta' horizontalAlign='right'>
1551
- {row.eta}
1552
- </TableColumn>
1553
- <TableColumn columnKey='actions' horizontalAlign='right'>
1554
- <Button bsStyle='default' iconName='rioglyph-pencil' iconOnly />
1555
- </TableColumn>
1542
+ {visibleColumns.map(column => {
1543
+ switch (column.key) {
1544
+ case 'status':
1545
+ return (
1546
+ <TableColumn key={column.key} columnKey={column.key}>
1547
+ <span className={resolveStatusLabelClassName(row.status)}>
1548
+ {row.status}
1549
+ </span>
1550
+ </TableColumn>
1551
+ );
1552
+ case 'eta':
1553
+ return (
1554
+ <TableColumn
1555
+ key={column.key}
1556
+ columnKey={column.key}
1557
+ horizontalAlign='right'
1558
+ >
1559
+ {row.eta}
1560
+ </TableColumn>
1561
+ );
1562
+ case 'actions':
1563
+ return (
1564
+ <TableColumn
1565
+ key={column.key}
1566
+ columnKey={column.key}
1567
+ horizontalAlign='right'
1568
+ >
1569
+ <Button bsStyle='default' iconName='rioglyph-pencil' iconOnly />
1570
+ </TableColumn>
1571
+ );
1572
+ case 'orderId':
1573
+ return (
1574
+ <TableColumn key={column.key} columnKey={column.key}>
1575
+ {row.orderId}
1576
+ </TableColumn>
1577
+ );
1578
+ case 'vehicle':
1579
+ return (
1580
+ <TableColumn key={column.key} columnKey={column.key}>
1581
+ {row.vehicle}
1582
+ </TableColumn>
1583
+ );
1584
+ case 'route':
1585
+ return (
1586
+ <TableColumn key={column.key} columnKey={column.key}>
1587
+ {row.route}
1588
+ </TableColumn>
1589
+ );
1590
+ case 'cargo':
1591
+ return (
1592
+ <TableColumn key={column.key} columnKey={column.key}>
1593
+ {row.cargo}
1594
+ </TableColumn>
1595
+ );
1596
+ default:
1597
+ return null;
1598
+ }
1599
+ })}
1556
1600
  </TableRow>
1557
1601
  ))}
1558
1602
  </TableBody>
@@ -1637,7 +1681,7 @@ const useTableDemoUrlState = (params: {
1637
1681
  <div class="table-toolbar-group-right">
1638
1682
  <div class="table-toolbar-column align-self-end">
1639
1683
  <div class="dropdown btn-group">
1640
- <button type="button" id="qi45h0fgeg" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
1684
+ <button type="button" id="d77tyokvyod" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
1641
1685
  <span class="display-inline-flex align-items-center gap-5">
1642
1686
  <span class="rioglyph rioglyph-table-view">
1643
1687
  </span>
@@ -1652,7 +1696,7 @@ const useTableDemoUrlState = (params: {
1652
1696
  <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(0, 100px) minmax(0, 100px) minmax(0, 68px); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3 table-col-4 table-col-5 table-col-6 table-col-7&quot;; --table-column-count: 8; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="8">
1653
1697
  <div class="table-head" role="rowgroup">
1654
1698
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
1655
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1699
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1656
1700
  <div class="table-selection-control">
1657
1701
  <label class="checkbox" tabindex="0">
1658
1702
  <input type="checkbox" class="indeterminate">
@@ -1696,7 +1740,7 @@ const useTableDemoUrlState = (params: {
1696
1740
  <div class="table-head-cell-content-row">
1697
1741
  <span class="table-head-label-wrapper table-head-drag-label" tabindex="0" aria-disabled="false" aria-roledescription="sortable" aria-describedby="DndDescribedBy-0">
1698
1742
  <span class="table-head-label">
1699
- <span class="display-inline-flex align-items-center gap-5">
1743
+ <span class="display-flex align-items-center gap-5">
1700
1744
  <span class="text-color-dark rioglyph rioglyph-route">
1701
1745
  </span>
1702
1746
  <span>Route</span>
@@ -1716,7 +1760,7 @@ const useTableDemoUrlState = (params: {
1716
1760
  <span class="sort-arrows ">
1717
1761
  </span>
1718
1762
  <span class="table-head-label">
1719
- <span class="display-inline-flex align-items-center gap-5">
1763
+ <span class="display-flex align-items-center gap-5">
1720
1764
  <span class="text-color-dark rioglyph rioglyph-palette">
1721
1765
  </span>
1722
1766
  <span>Cargo</span>
@@ -1778,7 +1822,7 @@ const useTableDemoUrlState = (params: {
1778
1822
  </div>
1779
1823
  <div class="table-body" role="rowgroup">
1780
1824
  <div id="row-1" class="table-row" data-index="0" data-row-id="row-1" role="row">
1781
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1825
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1782
1826
  <div class="table-selection-control">
1783
1827
  <label class="checkbox" tabindex="0">
1784
1828
  <input type="checkbox" class="">
@@ -1817,7 +1861,7 @@ const useTableDemoUrlState = (params: {
1817
1861
  </div>
1818
1862
  </div>
1819
1863
  <div id="row-2" class="table-row table-row-selected" data-index="1" data-row-id="row-2" role="row">
1820
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1864
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1821
1865
  <div class="table-selection-control">
1822
1866
  <label class="checkbox" tabindex="0">
1823
1867
  <input type="checkbox" class="" checked="">
@@ -1856,7 +1900,7 @@ const useTableDemoUrlState = (params: {
1856
1900
  </div>
1857
1901
  </div>
1858
1902
  <div id="row-3" class="table-row" data-index="2" data-row-id="row-3" role="row">
1859
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1903
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1860
1904
  <div class="table-selection-control">
1861
1905
  <label class="checkbox" tabindex="0">
1862
1906
  <input type="checkbox" class="">
@@ -1895,7 +1939,7 @@ const useTableDemoUrlState = (params: {
1895
1939
  </div>
1896
1940
  </div>
1897
1941
  <div id="row-4" class="table-row" data-index="3" data-row-id="row-4" role="row">
1898
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1942
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
1899
1943
  <div class="table-selection-control">
1900
1944
  <label class="checkbox" tabindex="0">
1901
1945
  <input type="checkbox" class="">
@@ -2092,7 +2136,7 @@ export default TableSelectionExample;
2092
2136
  <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3&quot;; --table-column-count: 4; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="4">
2093
2137
  <div class="table-head" role="rowgroup">
2094
2138
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
2095
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2139
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2096
2140
  <div class="table-selection-control">
2097
2141
  <label class="checkbox" tabindex="0">
2098
2142
  <input type="checkbox" class="">
@@ -2132,7 +2176,7 @@ export default TableSelectionExample;
2132
2176
  </div>
2133
2177
  <div class="table-body" role="rowgroup">
2134
2178
  <div id="101" class="table-row table-row-clickable" data-index="0" data-row-id="101" role="row" tabindex="0">
2135
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2179
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2136
2180
  <div class="table-selection-control">
2137
2181
  <label class="checkbox" tabindex="0">
2138
2182
  <input type="checkbox" class="">
@@ -2152,7 +2196,7 @@ export default TableSelectionExample;
2152
2196
  </div>
2153
2197
  </div>
2154
2198
  <div id="102" class="table-row table-row-active table-row-clickable" data-index="1" data-row-id="102" role="row" tabindex="0">
2155
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2199
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2156
2200
  <div class="table-selection-control">
2157
2201
  <label class="checkbox" tabindex="0">
2158
2202
  <input type="checkbox" class="">
@@ -2172,7 +2216,7 @@ export default TableSelectionExample;
2172
2216
  </div>
2173
2217
  </div>
2174
2218
  <div id="103" class="table-row table-row-clickable" data-index="2" data-row-id="103" role="row" tabindex="0">
2175
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2219
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2176
2220
  <div class="table-selection-control">
2177
2221
  <label class="checkbox" tabindex="0">
2178
2222
  <input type="checkbox" class="">
@@ -2192,7 +2236,7 @@ export default TableSelectionExample;
2192
2236
  </div>
2193
2237
  </div>
2194
2238
  <div id="104" class="table-row table-row-clickable" data-index="3" data-row-id="104" role="row" tabindex="0">
2195
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2239
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2196
2240
  <div class="table-selection-control">
2197
2241
  <label class="checkbox" tabindex="0">
2198
2242
  <input type="checkbox" class="">
@@ -2402,10 +2446,10 @@ export default TableSelectionBatchExample;
2402
2446
  <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3&quot;; --table-column-count: 4; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="4">
2403
2447
  <div class="table-head" role="rowgroup">
2404
2448
  <div class="table-head-grid table-head-grid-custom-selection" role="row" style="grid-template-rows: repeat(1, auto);">
2405
- <div class="table-head-cell table-selection-cell table-align-center table-selection-cell-custom-content" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2449
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle table-selection-cell-custom-content" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2406
2450
  <div class="table-selection-control">
2407
2451
  <div class="dropdown btn-group">
2408
- <button type="button" id="ak0ltwcaxb7" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
2452
+ <button type="button" id="6gdh9taa73u" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
2409
2453
  <span class="rioglyph rioglyph-checkboxes">
2410
2454
  </span>
2411
2455
  </button>
@@ -2443,7 +2487,7 @@ export default TableSelectionBatchExample;
2443
2487
  </div>
2444
2488
  <div class="table-body" role="rowgroup">
2445
2489
  <div id="101" class="table-row table-row-clickable" data-index="0" data-row-id="101" role="row" tabindex="0">
2446
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2490
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2447
2491
  <div class="table-selection-control">
2448
2492
  <label class="checkbox" tabindex="0">
2449
2493
  <input type="checkbox" class="">
@@ -2463,7 +2507,7 @@ export default TableSelectionBatchExample;
2463
2507
  </div>
2464
2508
  </div>
2465
2509
  <div id="102" class="table-row table-row-clickable" data-index="1" data-row-id="102" role="row" tabindex="0">
2466
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2510
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2467
2511
  <div class="table-selection-control">
2468
2512
  <label class="checkbox" tabindex="0">
2469
2513
  <input type="checkbox" class="">
@@ -2483,7 +2527,7 @@ export default TableSelectionBatchExample;
2483
2527
  </div>
2484
2528
  </div>
2485
2529
  <div id="103" class="table-row table-row-clickable" data-index="2" data-row-id="103" role="row" tabindex="0">
2486
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2530
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2487
2531
  <div class="table-selection-control">
2488
2532
  <label class="checkbox" tabindex="0">
2489
2533
  <input type="checkbox" class="">
@@ -2503,7 +2547,7 @@ export default TableSelectionBatchExample;
2503
2547
  </div>
2504
2548
  </div>
2505
2549
  <div id="104" class="table-row table-row-clickable" data-index="3" data-row-id="104" role="row" tabindex="0">
2506
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2550
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2507
2551
  <div class="table-selection-control">
2508
2552
  <label class="checkbox" tabindex="0">
2509
2553
  <input type="checkbox" class="">
@@ -2714,7 +2758,7 @@ export default TableSelectionFooterBatchExample;
2714
2758
  <div class="table table-view-table table-hover border table-rounded table-has-head table-has-footer" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3&quot;; --table-column-count: 4; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="4">
2715
2759
  <div class="table-head" role="rowgroup">
2716
2760
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
2717
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2761
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2718
2762
  <div class="table-selection-control">
2719
2763
  <label class="checkbox" tabindex="0">
2720
2764
  <input type="checkbox" class="">
@@ -2754,7 +2798,7 @@ export default TableSelectionFooterBatchExample;
2754
2798
  </div>
2755
2799
  <div class="table-body" role="rowgroup">
2756
2800
  <div id="201" class="table-row" data-index="0" data-row-id="201" role="row">
2757
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2801
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2758
2802
  <div class="table-selection-control">
2759
2803
  <label class="checkbox" tabindex="0">
2760
2804
  <input type="checkbox" class="">
@@ -2774,7 +2818,7 @@ export default TableSelectionFooterBatchExample;
2774
2818
  </div>
2775
2819
  </div>
2776
2820
  <div id="202" class="table-row" data-index="1" data-row-id="202" role="row">
2777
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2821
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2778
2822
  <div class="table-selection-control">
2779
2823
  <label class="checkbox" tabindex="0">
2780
2824
  <input type="checkbox" class="">
@@ -2794,7 +2838,7 @@ export default TableSelectionFooterBatchExample;
2794
2838
  </div>
2795
2839
  </div>
2796
2840
  <div id="203" class="table-row" data-index="2" data-row-id="203" role="row">
2797
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2841
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2798
2842
  <div class="table-selection-control">
2799
2843
  <label class="checkbox" tabindex="0">
2800
2844
  <input type="checkbox" class="">
@@ -2814,7 +2858,7 @@ export default TableSelectionFooterBatchExample;
2814
2858
  </div>
2815
2859
  </div>
2816
2860
  <div id="204" class="table-row" data-index="3" data-row-id="204" role="row">
2817
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2861
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
2818
2862
  <div class="table-selection-control">
2819
2863
  <label class="checkbox" tabindex="0">
2820
2864
  <input type="checkbox" class="">
@@ -2840,7 +2884,7 @@ export default TableSelectionFooterBatchExample;
2840
2884
  <div class="table-cell-content">
2841
2885
  <div class="display-flex gap-15 align-items-center">
2842
2886
  <div class="dropdown btn-group">
2843
- <button type="button" id="vzevzgkeqeg" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
2887
+ <button type="button" id="71i91m21ver" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
2844
2888
  <span class="rioglyph rioglyph-checkboxes">
2845
2889
  </span>
2846
2890
  </button>
@@ -3036,7 +3080,7 @@ export default TableSelectiveRowsExample;
3036
3080
  <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3&quot;; --table-column-count: 4; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="4">
3037
3081
  <div class="table-head" role="rowgroup">
3038
3082
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
3039
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3083
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3040
3084
  <div class="table-selection-control">
3041
3085
  <label class="checkbox" tabindex="0">
3042
3086
  <input type="checkbox" class="">
@@ -3076,7 +3120,7 @@ export default TableSelectiveRowsExample;
3076
3120
  </div>
3077
3121
  <div class="table-body" role="rowgroup">
3078
3122
  <div id="101" class="table-row table-row-clickable" data-index="0" data-row-id="101" role="row" tabindex="0">
3079
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3123
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3080
3124
  <div class="table-selection-control">
3081
3125
  <label class="checkbox" tabindex="0">
3082
3126
  <input type="checkbox" class="">
@@ -3096,7 +3140,7 @@ export default TableSelectiveRowsExample;
3096
3140
  </div>
3097
3141
  </div>
3098
3142
  <div id="102" class="table-row table-row-clickable" data-index="1" data-row-id="102" role="row" tabindex="0">
3099
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3143
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3100
3144
  </div>
3101
3145
  <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
3102
3146
  <div class="table-cell-content overflow-hidden">Munich to Cologne</div>
@@ -3110,7 +3154,7 @@ export default TableSelectiveRowsExample;
3110
3154
  </div>
3111
3155
  </div>
3112
3156
  <div id="103" class="table-row table-row-clickable" data-index="2" data-row-id="103" role="row" tabindex="0">
3113
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3157
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3114
3158
  <div class="table-selection-control">
3115
3159
  <label class="checkbox" tabindex="0">
3116
3160
  <input type="checkbox" class="">
@@ -3130,7 +3174,7 @@ export default TableSelectiveRowsExample;
3130
3174
  </div>
3131
3175
  </div>
3132
3176
  <div id="104" class="table-row table-row-clickable" data-index="3" data-row-id="104" role="row" tabindex="0">
3133
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3177
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3134
3178
  </div>
3135
3179
  <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
3136
3180
  <div class="table-cell-content overflow-hidden">Nürnberg to Frankfurt</div>
@@ -3300,7 +3344,7 @@ export default TableDisabledRowsExample;
3300
3344
  <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3 table-col-4&quot;; --table-column-count: 5; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="5">
3301
3345
  <div class="table-head" role="rowgroup">
3302
3346
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
3303
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3347
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3304
3348
  <div class="table-selection-control">
3305
3349
  <label class="checkbox" tabindex="0">
3306
3350
  <input type="checkbox" class="indeterminate">
@@ -3349,7 +3393,7 @@ export default TableDisabledRowsExample;
3349
3393
  </div>
3350
3394
  <div class="table-body" role="rowgroup">
3351
3395
  <div id="row-1" class="table-row table-row-selected table-row-clickable" data-index="0" data-row-id="row-1" role="row" tabindex="0">
3352
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3396
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3353
3397
  <div class="table-selection-control">
3354
3398
  <label class="checkbox" tabindex="0">
3355
3399
  <input type="checkbox" class="" checked="">
@@ -3372,7 +3416,7 @@ export default TableDisabledRowsExample;
3372
3416
  </div>
3373
3417
  </div>
3374
3418
  <div id="row-2" class="table-row table-row-disabled table-row-no-hover" data-index="1" data-row-id="row-2" role="row">
3375
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3419
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3376
3420
  <div class="table-selection-control">
3377
3421
  <label class="checkbox disabled" tabindex="0">
3378
3422
  <input type="checkbox" disabled="" class="">
@@ -3395,7 +3439,7 @@ export default TableDisabledRowsExample;
3395
3439
  </div>
3396
3440
  </div>
3397
3441
  <div id="row-3" class="table-row table-row-clickable" data-index="2" data-row-id="row-3" role="row" tabindex="0">
3398
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3442
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
3399
3443
  <div class="table-selection-control">
3400
3444
  <label class="checkbox" tabindex="0">
3401
3445
  <input type="checkbox" class="">
@@ -3961,7 +4005,7 @@ export default TableToolbarLayoutGuidelineExample;
3961
4005
  </div>
3962
4006
  <div class="table-toolbar-column align-self-end table-toolbar-column-separator">
3963
4007
  <div class="dropdown btn-group">
3964
- <button type="button" id="t77nqu8ak1j" class="btn btn-default btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
4008
+ <button type="button" id="xbcdoub07go" class="btn btn-default btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
3965
4009
  <span class="rioglyph rioglyph-filter">
3966
4010
  </span>
3967
4011
  </button>
@@ -4038,7 +4082,7 @@ export default TableToolbarLayoutGuidelineExample;
4038
4082
  </div>
4039
4083
  </div>
4040
4084
  <div class="dropdown btn-group">
4041
- <button type="button" id="uqq5utpsksr" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
4085
+ <button type="button" id="rka0nzxen7" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
4042
4086
  <span class="display-inline-flex align-items-center gap-5">
4043
4087
  <span class="rioglyph rioglyph-table-view">
4044
4088
  </span>
@@ -4054,10 +4098,10 @@ export default TableToolbarLayoutGuidelineExample;
4054
4098
  <div class="table table-view-table border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3 table-col-4&quot;; --table-column-count: 5; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="5">
4055
4099
  <div class="table-head" role="rowgroup">
4056
4100
  <div class="table-head-grid table-head-grid-custom-selection" role="row" style="grid-template-rows: repeat(1, auto);">
4057
- <div class="table-head-cell table-selection-cell table-align-center table-selection-cell-custom-content" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4101
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle table-selection-cell-custom-content" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4058
4102
  <div class="table-selection-control">
4059
4103
  <div class="dropdown btn-group">
4060
- <button type="button" id="ii1tw49mapb" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
4104
+ <button type="button" id="kye79jtq46l" class="btn btn-default btn-outline btn-sm btn-icon-only btn-component dropdown-toggle table-batch-dropdown-button no-hover-scale" tabindex="0">
4061
4105
  <span class="rioglyph rioglyph-checkboxes">
4062
4106
  </span>
4063
4107
  </button>
@@ -4104,7 +4148,7 @@ export default TableToolbarLayoutGuidelineExample;
4104
4148
  </div>
4105
4149
  <div class="table-body" role="rowgroup">
4106
4150
  <div id="request-1" class="table-row" data-index="0" data-row-id="request-1" role="row">
4107
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4151
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4108
4152
  <div class="table-selection-control">
4109
4153
  <label class="checkbox" tabindex="0">
4110
4154
  <input type="checkbox" class="">
@@ -4127,7 +4171,7 @@ export default TableToolbarLayoutGuidelineExample;
4127
4171
  </div>
4128
4172
  </div>
4129
4173
  <div id="request-2" class="table-row table-row-selected" data-index="1" data-row-id="request-2" role="row">
4130
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4174
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4131
4175
  <div class="table-selection-control">
4132
4176
  <label class="checkbox" tabindex="0">
4133
4177
  <input type="checkbox" class="" checked="">
@@ -4150,7 +4194,7 @@ export default TableToolbarLayoutGuidelineExample;
4150
4194
  </div>
4151
4195
  </div>
4152
4196
  <div id="request-3" class="table-row" data-index="2" data-row-id="request-3" role="row">
4153
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4197
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4154
4198
  <div class="table-selection-control">
4155
4199
  <label class="checkbox" tabindex="0">
4156
4200
  <input type="checkbox" class="">
@@ -4173,7 +4217,7 @@ export default TableToolbarLayoutGuidelineExample;
4173
4217
  </div>
4174
4218
  </div>
4175
4219
  <div id="request-4" class="table-row table-row-selected" data-index="3" data-row-id="request-4" role="row">
4176
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4220
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4177
4221
  <div class="table-selection-control">
4178
4222
  <label class="checkbox" tabindex="0">
4179
4223
  <input type="checkbox" class="" checked="">
@@ -4196,7 +4240,7 @@ export default TableToolbarLayoutGuidelineExample;
4196
4240
  </div>
4197
4241
  </div>
4198
4242
  <div id="request-5" class="table-row" data-index="4" data-row-id="request-5" role="row">
4199
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4243
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4200
4244
  <div class="table-selection-control">
4201
4245
  <label class="checkbox" tabindex="0">
4202
4246
  <input type="checkbox" class="">
@@ -4219,7 +4263,7 @@ export default TableToolbarLayoutGuidelineExample;
4219
4263
  </div>
4220
4264
  </div>
4221
4265
  <div id="request-6" class="table-row" data-index="5" data-row-id="request-6" role="row">
4222
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4266
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4223
4267
  <div class="table-selection-control">
4224
4268
  <label class="checkbox" tabindex="0">
4225
4269
  <input type="checkbox" class="">
@@ -4242,7 +4286,7 @@ export default TableToolbarLayoutGuidelineExample;
4242
4286
  </div>
4243
4287
  </div>
4244
4288
  <div id="request-7" class="table-row" data-index="6" data-row-id="request-7" role="row">
4245
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4289
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4246
4290
  <div class="table-selection-control">
4247
4291
  <label class="checkbox" tabindex="0">
4248
4292
  <input type="checkbox" class="">
@@ -4265,7 +4309,7 @@ export default TableToolbarLayoutGuidelineExample;
4265
4309
  </div>
4266
4310
  </div>
4267
4311
  <div id="request-8" class="table-row" data-index="7" data-row-id="request-8" role="row">
4268
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4312
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
4269
4313
  <div class="table-selection-control">
4270
4314
  <label class="checkbox" tabindex="0">
4271
4315
  <input type="checkbox" class="">
@@ -5670,7 +5714,7 @@ export default TableToolbarDropdownFilterExample;
5670
5714
  <div class="table-toolbar-group-right">
5671
5715
  <div class="table-toolbar-column align-self-end table-toolbar-column-separator">
5672
5716
  <div class="dropdown btn-group">
5673
- <button type="button" id="fxw9flmpscr" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
5717
+ <button type="button" id="4pdt96djmoi" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
5674
5718
  <span class="rioglyph rioglyph-filter">
5675
5719
  </span>Filter</button>
5676
5720
  </div>
@@ -7351,7 +7395,7 @@ export default TableColumnFilterExample;
7351
7395
  </button>
7352
7396
  <span class="table-head-filter">
7353
7397
  <div class="dropdown btn-group">
7354
- <button type="button" id="1zuz0hop01ij" class="btn btn-default btn-outline btn-xs btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small padding-left-2" tabindex="0">
7398
+ <button type="button" id="301ayxijtrt" class="btn btn-default btn-outline btn-xs btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small padding-left-2" tabindex="0">
7355
7399
  <span class="display-flex gap-0 align-items-center text-color-dark">
7356
7400
  <span class="text-size-16 rioglyph rioglyph-filter-active" aria-hidden="true">
7357
7401
  </span>
@@ -7375,7 +7419,7 @@ export default TableColumnFilterExample;
7375
7419
  </button>
7376
7420
  <span class="table-head-filter">
7377
7421
  <div class="dropdown btn-group">
7378
- <button type="button" id="f8qc1nsnml7" class="btn btn-default btn-outline btn-xs btn-icon-only btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small" tabindex="0">
7422
+ <button type="button" id="v2mj5nb9dad" class="btn btn-default btn-outline btn-xs btn-icon-only btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small" tabindex="0">
7379
7423
  <span class="display-flex gap-0 align-items-center text-color-dark">
7380
7424
  <span class="text-size-16 rioglyph rioglyph-filter-active" aria-hidden="true">
7381
7425
  </span>
@@ -7560,7 +7604,7 @@ export default TableHeaderTruncationExample;
7560
7604
  </span>
7561
7605
  <span class="table-head-filter">
7562
7606
  <div class="dropdown btn-group">
7563
- <button type="button" id="3vovlpk1hqw" class="btn btn-default btn-outline btn-xs btn-icon-only btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small" tabindex="0">
7607
+ <button type="button" id="d3bx5yb31it" class="btn btn-default btn-outline btn-xs btn-icon-only btn-component dropdown-toggle table-head-filter-button no-hover-scale border-color-light bg-decent hover-bg-lighter rounded-small" tabindex="0">
7564
7608
  <span class="display-flex gap-0 align-items-center text-color-dark">
7565
7609
  <span class="text-size-16 rioglyph rioglyph-filter" aria-hidden="true">
7566
7610
  </span>
@@ -7774,7 +7818,7 @@ export default TableHeaderContentVariantsExample;
7774
7818
  <div class="table-head-cell-content-row">
7775
7819
  <span class="table-head-label-wrapper">
7776
7820
  <span class="table-head-label">
7777
- <span class="display-inline-flex align-items-center gap-5">
7821
+ <span class="display-flex align-items-center gap-5">
7778
7822
  <span class="text-color-dark rioglyph rioglyph-volume">
7779
7823
  </span>
7780
7824
  <span>
@@ -9818,7 +9862,7 @@ export default TableGroupedStickyRowsExample;
9818
9862
  <div class="scrollbar-view" style="position: relative; overflow: scroll; margin-right: 0px; margin-bottom: 0px; min-height: 0px; max-height: calc(320px);">
9819
9863
  <div class="scrollbar-content-wrapper">
9820
9864
  <div class="table-body" role="rowgroup">
9821
- <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="0" role="row">
9865
+ <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="0" data-row-id="group-0" role="row">
9822
9866
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
9823
9867
  <div class="table-cell-content">
9824
9868
  <div class="display-flex align-items-center gap-10">
@@ -9890,7 +9934,7 @@ export default TableGroupedStickyRowsExample;
9890
9934
  <div class="table-cell-content">Total projects for Amy Elsner: 5</div>
9891
9935
  </div>
9892
9936
  </div>
9893
- <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="7" role="row">
9937
+ <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="7" data-row-id="group-7" role="row">
9894
9938
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
9895
9939
  <div class="table-cell-content">
9896
9940
  <div class="display-flex align-items-center gap-10">
@@ -9962,7 +10006,7 @@ export default TableGroupedStickyRowsExample;
9962
10006
  <div class="table-cell-content">Total projects for Anna Fali: 5</div>
9963
10007
  </div>
9964
10008
  </div>
9965
- <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="14" role="row">
10009
+ <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="14" data-row-id="group-14" role="row">
9966
10010
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
9967
10011
  <div class="table-cell-content">
9968
10012
  <div class="display-flex align-items-center gap-10">
@@ -10034,7 +10078,7 @@ export default TableGroupedStickyRowsExample;
10034
10078
  <div class="table-cell-content">Total projects for Ben Turner: 5</div>
10035
10079
  </div>
10036
10080
  </div>
10037
- <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="21" role="row">
10081
+ <div class="table-row table-row-group table-row-group-sticky table-row-sticky-in-container" data-index="21" data-row-id="group-21" role="row">
10038
10082
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
10039
10083
  <div class="table-cell-content">
10040
10084
  <div class="display-flex align-items-center gap-10">
@@ -10575,6 +10619,10 @@ Use stickyColumns={{ left: 1 }} to keep the currently first visible data column
10575
10619
 
10576
10620
  > Note: Sticky columns currently work reliably only when no TableBody maxHeight is set.
10577
10621
 
10622
+ > Note
10623
+
10624
+ Sticky columns currently work reliably only when no TableBody maxHeight is set.
10625
+
10578
10626
  ### Example: Vehicle access handover
10579
10627
 
10580
10628
  Request
@@ -10930,7 +10978,7 @@ export default TableStickyFirstColumnExample;
10930
10978
  <div class="table-scroll-content" role="presentation">
10931
10979
  <div class="table-head" role="rowgroup">
10932
10980
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
10933
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
10981
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
10934
10982
  <div class="table-selection-control">
10935
10983
  <label class="checkbox" tabindex="0">
10936
10984
  <input type="checkbox" class="">
@@ -11021,13 +11069,13 @@ export default TableStickyFirstColumnExample;
11021
11069
  </div>
11022
11070
  </div>
11023
11071
  <div class="table-body" role="rowgroup">
11024
- <div class="table-row table-row-group" data-index="0" role="row">
11072
+ <div class="table-row table-row-group" data-index="0" data-row-id="group-0" role="row">
11025
11073
  <div class="table-cell table-group-cell" role="cell" aria-colspan="9">
11026
11074
  <div class="table-cell-content">Morning shift</div>
11027
11075
  </div>
11028
11076
  </div>
11029
11077
  <div id="REQ-3004" class="table-row" data-index="1" data-row-id="REQ-3004" role="row">
11030
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11078
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11031
11079
  <div class="table-selection-control">
11032
11080
  <label class="checkbox" tabindex="0">
11033
11081
  <input type="checkbox" class="">
@@ -11069,7 +11117,7 @@ export default TableStickyFirstColumnExample;
11069
11117
  </div>
11070
11118
  </div>
11071
11119
  <div id="REQ-3021" class="table-row" data-index="2" data-row-id="REQ-3021" role="row">
11072
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11120
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11073
11121
  <div class="table-selection-control">
11074
11122
  <label class="checkbox" tabindex="0">
11075
11123
  <input type="checkbox" class="">
@@ -11115,13 +11163,13 @@ export default TableStickyFirstColumnExample;
11115
11163
  <div class="table-cell-content">2 requests in morning shift</div>
11116
11164
  </div>
11117
11165
  </div>
11118
- <div class="table-row table-row-group" data-index="4" role="row">
11166
+ <div class="table-row table-row-group" data-index="4" data-row-id="group-4" role="row">
11119
11167
  <div class="table-cell table-group-cell" role="cell" aria-colspan="9">
11120
11168
  <div class="table-cell-content">Night shift</div>
11121
11169
  </div>
11122
11170
  </div>
11123
11171
  <div id="REQ-3057" class="table-row" data-index="5" data-row-id="REQ-3057" role="row">
11124
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11172
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11125
11173
  <div class="table-selection-control">
11126
11174
  <label class="checkbox" tabindex="0">
11127
11175
  <input type="checkbox" class="">
@@ -11163,7 +11211,7 @@ export default TableStickyFirstColumnExample;
11163
11211
  </div>
11164
11212
  </div>
11165
11213
  <div id="REQ-3072" class="table-row" data-index="6" data-row-id="REQ-3072" role="row">
11166
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11214
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11167
11215
  <div class="table-selection-control">
11168
11216
  <label class="checkbox" tabindex="0">
11169
11217
  <input type="checkbox" class="">
@@ -11286,6 +11334,10 @@ Use stickyColumns={{ right: 1 }} to keep the currently last visible data column
11286
11334
 
11287
11335
  > Note: Sticky columns currently work reliably only when no TableBody maxHeight is set.
11288
11336
 
11337
+ > Note
11338
+
11339
+ Sticky columns currently work reliably only when no TableBody maxHeight is set.
11340
+
11289
11341
  ### Example: Vehicle access handover
11290
11342
 
11291
11343
  Request
@@ -11662,7 +11714,7 @@ export default TableStickyLastColumnExample;
11662
11714
  <div class="table-scroll-content" role="presentation">
11663
11715
  <div class="table-head" role="rowgroup">
11664
11716
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
11665
- <div class="table-head-cell table-selection-cell table-align-center" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11717
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11666
11718
  <div class="table-selection-control">
11667
11719
  <label class="checkbox" tabindex="0">
11668
11720
  <input type="checkbox" class="">
@@ -11753,13 +11805,13 @@ export default TableStickyLastColumnExample;
11753
11805
  </div>
11754
11806
  </div>
11755
11807
  <div class="table-body" role="rowgroup">
11756
- <div class="table-row table-row-group" data-index="0" role="row">
11808
+ <div class="table-row table-row-group" data-index="0" data-row-id="group-0" role="row">
11757
11809
  <div class="table-cell table-group-cell" role="cell" aria-colspan="9">
11758
11810
  <div class="table-cell-content">Morning shift</div>
11759
11811
  </div>
11760
11812
  </div>
11761
11813
  <div id="REQ-3004" class="table-row" data-index="1" data-row-id="REQ-3004" role="row">
11762
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11814
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11763
11815
  <div class="table-selection-control">
11764
11816
  <label class="checkbox" tabindex="0">
11765
11817
  <input type="checkbox" class="">
@@ -11807,7 +11859,7 @@ export default TableStickyLastColumnExample;
11807
11859
  </div>
11808
11860
  </div>
11809
11861
  <div id="REQ-3021" class="table-row" data-index="2" data-row-id="REQ-3021" role="row">
11810
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11862
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11811
11863
  <div class="table-selection-control">
11812
11864
  <label class="checkbox" tabindex="0">
11813
11865
  <input type="checkbox" class="">
@@ -11859,13 +11911,13 @@ export default TableStickyLastColumnExample;
11859
11911
  <div class="table-cell-content">2 requests in morning shift</div>
11860
11912
  </div>
11861
11913
  </div>
11862
- <div class="table-row table-row-group" data-index="4" role="row">
11914
+ <div class="table-row table-row-group" data-index="4" data-row-id="group-4" role="row">
11863
11915
  <div class="table-cell table-group-cell" role="cell" aria-colspan="9">
11864
11916
  <div class="table-cell-content">Night shift</div>
11865
11917
  </div>
11866
11918
  </div>
11867
11919
  <div id="REQ-3057" class="table-row" data-index="5" data-row-id="REQ-3057" role="row">
11868
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11920
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11869
11921
  <div class="table-selection-control">
11870
11922
  <label class="checkbox" tabindex="0">
11871
11923
  <input type="checkbox" class="">
@@ -11913,7 +11965,7 @@ export default TableStickyLastColumnExample;
11913
11965
  </div>
11914
11966
  </div>
11915
11967
  <div id="REQ-3072" class="table-row" data-index="6" data-row-id="REQ-3072" role="row">
11916
- <div class="table-cell table-selection-cell" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11968
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
11917
11969
  <div class="table-selection-control">
11918
11970
  <label class="checkbox" tabindex="0">
11919
11971
  <input type="checkbox" class="">
@@ -12450,10 +12502,10 @@ const TableMultiRowHeaderExample = () => (
12450
12502
  <Table rowKey='id' {...tableStyle}>
12451
12503
  <TableHeader>
12452
12504
  <TableHeaderRow>
12453
- <TableHeaderColumn columnKey='product' rowSpan={2}>
12505
+ <TableHeaderColumn columnKey='product' rowSpan={2} verticalAlign='bottom'>
12454
12506
  Product
12455
12507
  </TableHeaderColumn>
12456
- <TableHeaderColumn columnKey='metric' rowSpan={2}>
12508
+ <TableHeaderColumn columnKey='metric' rowSpan={2} verticalAlign='bottom'>
12457
12509
  Metric
12458
12510
  </TableHeaderColumn>
12459
12511
  <TableHeaderColumn colSpan={3} horizontalAlign='center'>
@@ -12508,7 +12560,7 @@ export default TableMultiRowHeaderExample;
12508
12560
  <div class="table table-view-table table-grid-lines border table-rounded table-has-head table-has-footer" role="table" style="--table-columns: minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-col-1 table-col-2 table-col-3 table-col-4 table-col-5&quot;; --table-column-count: 5; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="5">
12509
12561
  <div class="table-head" role="rowgroup">
12510
12562
  <div class="table-head-grid" role="presentation" style="grid-template-rows: repeat(2, auto);">
12511
- <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="product" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-rowspan="2" style="grid-area: 1 / 1 / span 2 / span 1;">
12563
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-bottom" data-column="product" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-rowspan="2" style="grid-area: 1 / 1 / span 2 / span 1;">
12512
12564
  <div class="table-head-cell-content">
12513
12565
  <div class="table-head-cell-content-row">
12514
12566
  <span class="table-head-label-wrapper">
@@ -12517,7 +12569,7 @@ export default TableMultiRowHeaderExample;
12517
12569
  </div>
12518
12570
  </div>
12519
12571
  </div>
12520
- <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="metric" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-rowspan="2" style="grid-area: 1 / 2 / span 2 / span 1;">
12572
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-bottom" data-column="metric" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-rowspan="2" style="grid-area: 1 / 2 / span 2 / span 1;">
12521
12573
  <div class="table-head-cell-content">
12522
12574
  <div class="table-head-cell-content-row">
12523
12575
  <span class="table-head-label-wrapper">
@@ -12566,10 +12618,10 @@ export default TableMultiRowHeaderExample;
12566
12618
  </div>
12567
12619
  <div class="table-body" role="rowgroup">
12568
12620
  <div id="1" class="table-row" data-index="0" data-row-id="1" role="row">
12569
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12621
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12570
12622
  <div class="table-cell-content overflow-hidden">Product 1</div>
12571
12623
  </div>
12572
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12624
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12573
12625
  <div class="table-cell-content overflow-hidden">Income</div>
12574
12626
  </div>
12575
12627
  <div class="table-cell table-align-right table-vertical-align-middle" data-column="year2023" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
@@ -12583,10 +12635,10 @@ export default TableMultiRowHeaderExample;
12583
12635
  </div>
12584
12636
  </div>
12585
12637
  <div id="2" class="table-row" data-index="1" data-row-id="2" role="row">
12586
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12638
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12587
12639
  <div class="table-cell-content overflow-hidden">Product 1</div>
12588
12640
  </div>
12589
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12641
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12590
12642
  <div class="table-cell-content overflow-hidden">Profit</div>
12591
12643
  </div>
12592
12644
  <div class="table-cell table-align-right table-vertical-align-middle" data-column="year2023" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
@@ -12604,10 +12656,10 @@ export default TableMultiRowHeaderExample;
12604
12656
  </div>
12605
12657
  </div>
12606
12658
  <div id="3" class="table-row" data-index="3" data-row-id="3" role="row">
12607
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12659
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12608
12660
  <div class="table-cell-content overflow-hidden">Product 2</div>
12609
12661
  </div>
12610
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12662
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12611
12663
  <div class="table-cell-content overflow-hidden">Income</div>
12612
12664
  </div>
12613
12665
  <div class="table-cell table-align-right table-vertical-align-middle" data-column="year2023" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
@@ -12621,10 +12673,10 @@ export default TableMultiRowHeaderExample;
12621
12673
  </div>
12622
12674
  </div>
12623
12675
  <div id="4" class="table-row" data-index="4" data-row-id="4" role="row">
12624
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12676
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="product" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
12625
12677
  <div class="table-cell-content overflow-hidden">Product 2</div>
12626
12678
  </div>
12627
- <div class="table-cell table-align-left table-vertical-align-middle" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12679
+ <div class="table-cell table-align-left table-vertical-align-bottom" data-column="metric" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
12628
12680
  <div class="table-cell-content overflow-hidden">Profit</div>
12629
12681
  </div>
12630
12682
  <div class="table-cell table-align-right table-vertical-align-middle" data-column="year2023" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
@@ -12640,7 +12692,7 @@ export default TableMultiRowHeaderExample;
12640
12692
  </div>
12641
12693
  <div class="table-footer" role="rowgroup">
12642
12694
  <div class="table-row table-row-footer bg-white text-bold" role="row">
12643
- <div class="table-cell table-footer-cell table-align-left table-vertical-align-middle" data-column="product" role="cell" aria-colindex="1" aria-colspan="2" style="grid-area: 1 / 1 / span 1 / span 2;">
12695
+ <div class="table-cell table-footer-cell table-align-left table-vertical-align-bottom" data-column="product" role="cell" aria-colindex="1" aria-colspan="2" style="grid-area: 1 / 1 / span 1 / span 2;">
12644
12696
  <div class="table-cell-content overflow-hidden">Total Profit</div>
12645
12697
  </div>
12646
12698
  <div class="table-cell table-footer-cell table-align-right table-vertical-align-middle" data-column="year2023" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
@@ -15065,7 +15117,7 @@ export default TableRowActionsExample;
15065
15117
  <div class="table-cell table-align-right table-vertical-align-middle padding-10" data-column="actions" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
15066
15118
  <div class="table-cell-content overflow-hidden">
15067
15119
  <div class="dropdown btn-group">
15068
- <button type="button" aria-label="Row actions" id="vfhq8fte1g" class="btn btn-muted btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
15120
+ <button type="button" aria-label="Row actions" id="0r0xcntfo24a" class="btn btn-muted btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
15069
15121
  <span class="rioglyph rioglyph-option-horizontal" aria-hidden="true">
15070
15122
  </span>
15071
15123
  </button>
@@ -15087,7 +15139,7 @@ export default TableRowActionsExample;
15087
15139
  <span class="rioglyph rioglyph-unassigned">
15088
15140
  </span>Assign</button>
15089
15141
  <div class="dropdown btn-group">
15090
- <button type="button" aria-label="Row actions" id="9b6oifiy6yv" class="btn btn-muted btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
15142
+ <button type="button" aria-label="Row actions" id="a6ax7llrezs" class="btn btn-muted btn-md btn-icon-only btn-component dropdown-toggle" tabindex="0">
15091
15143
  <span class="rioglyph rioglyph-option-horizontal" aria-hidden="true">
15092
15144
  </span>
15093
15145
  </button>
@@ -15613,8 +15665,8 @@ export default TableExpandedRowsExample;
15613
15665
  </div>
15614
15666
  <div class="table-cell table-align-right table-vertical-align-middle padding-y-0" data-column="actions" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
15615
15667
  <div class="table-cell-content overflow-hidden">
15616
- <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
15617
- <span class="rioglyph rioglyph-chevron-up">
15668
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button table-expander-button-expanded" tabindex="0">
15669
+ <span class="rioglyph rioglyph-chevron-down">
15618
15670
  </span>
15619
15671
  </button>
15620
15672
  </div>
@@ -15949,8 +16001,8 @@ export default TableExpandedChildRowsExample;
15949
16001
  </div>
15950
16002
  <div class="table-cell table-align-right table-vertical-align-middle padding-y-0" data-column="actions" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
15951
16003
  <div class="table-cell-content overflow-hidden">
15952
- <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
15953
- <span class="rioglyph rioglyph-chevron-up">
16004
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button table-expander-button-expanded" tabindex="0">
16005
+ <span class="rioglyph rioglyph-chevron-down">
15954
16006
  </span>
15955
16007
  </button>
15956
16008
  </div>
@@ -16535,12 +16587,12 @@ export default TableExpandableGroupRowsExample;
16535
16587
  </div>
16536
16588
  </div>
16537
16589
  <div class="table-body" role="rowgroup">
16538
- <div class="table-row table-row-group" data-index="0" role="row">
16590
+ <div class="table-row table-row-group" data-index="0" data-row-id="group-0" role="row">
16539
16591
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
16540
16592
  <div class="table-cell-content">
16541
16593
  <div class="display-flex align-items-center gap-10">
16542
- <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
16543
- <span class="rioglyph rioglyph-chevron-up">
16594
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button table-expander-button-expanded" tabindex="0">
16595
+ <span class="rioglyph rioglyph-chevron-down">
16544
16596
  </span>
16545
16597
  </button>
16546
16598
  <div class="Avatar bg-lighter" style="height: 35px;">
@@ -16600,7 +16652,7 @@ export default TableExpandableGroupRowsExample;
16600
16652
  <div class="table-cell-content">Total projects for Amy Elsner: 4</div>
16601
16653
  </div>
16602
16654
  </div>
16603
- <div class="table-row table-row-group" data-index="6" role="row">
16655
+ <div class="table-row table-row-group" data-index="6" data-row-id="group-6" role="row">
16604
16656
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
16605
16657
  <div class="table-cell-content">
16606
16658
  <div class="display-flex align-items-center gap-10">
@@ -16616,7 +16668,7 @@ export default TableExpandableGroupRowsExample;
16616
16668
  </div>
16617
16669
  </div>
16618
16670
  </div>
16619
- <div class="table-row table-row-group" data-index="7" role="row">
16671
+ <div class="table-row table-row-group" data-index="7" data-row-id="group-7" role="row">
16620
16672
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
16621
16673
  <div class="table-cell-content">
16622
16674
  <div class="display-flex align-items-center gap-10">
@@ -16632,7 +16684,7 @@ export default TableExpandableGroupRowsExample;
16632
16684
  </div>
16633
16685
  </div>
16634
16686
  </div>
16635
- <div class="table-row table-row-group" data-index="8" role="row">
16687
+ <div class="table-row table-row-group" data-index="8" data-row-id="group-8" role="row">
16636
16688
  <div class="table-cell table-group-cell" role="cell" aria-colspan="3">
16637
16689
  <div class="table-cell-content">
16638
16690
  <div class="display-flex align-items-center gap-10">
@@ -16658,148 +16710,1857 @@ export default TableExpandableGroupRowsExample;
16658
16710
  rowClassName={(row) => (row.disabled ? 'my-class-name' : '')}
16659
16711
  ```
16660
16712
 
16661
- ## Row animation
16713
+ ## Grouped rows with selection
16662
16714
 
16663
- ### Example: Example 40
16715
+ Group rows can control which rows are shown while the expanded data rows still render against the table columns. Keep multi-selection controlled on Table with selectedRowIds, onSelectionChange, and showSelectionColumn.
16664
16716
 
16665
- Remove row Reset table
16717
+ ### Example: 5 of 33 departures
16666
16718
 
16667
- Id
16719
+ Vehicle
16668
16720
 
16669
- Name
16721
+ Driver
16670
16722
 
16671
- VIN
16723
+ Route
16724
+
16725
+ ETA
16672
16726
 
16673
16727
  Status
16674
16728
 
16675
- 1
16729
+ Berlin Hub 5 of 33 departures
16676
16730
 
16677
- Lorem
16731
+ R-2041
16678
16732
 
16679
- 7354
16733
+ Lena Vogt
16680
16734
 
16681
- Active
16735
+ Berlin - Hamburg
16682
16736
 
16683
- 2
16737
+ 08:40
16684
16738
 
16685
- Ipsum
16739
+ Ready
16686
16740
 
16687
- 456457
16741
+ R-2042
16688
16742
 
16689
- Inactive
16743
+ Milan Weber
16690
16744
 
16691
- 3
16745
+ Berlin - Leipzig
16692
16746
 
16693
- Dolor
16747
+ 09:10
16694
16748
 
16695
- 895
16749
+ Loading
16696
16750
 
16697
- Active
16751
+ R-2043
16698
16752
 
16699
- 4
16753
+ Eva Kruger
16700
16754
 
16701
- Sit
16755
+ Berlin - Dresden
16702
16756
 
16703
- 3456
16757
+ 09:35
16704
16758
 
16705
- Active
16759
+ Ready
16706
16760
 
16707
- 5
16761
+ R-2044
16708
16762
 
16709
- Amet
16763
+ Jonas Brandt
16710
16764
 
16711
- 2445
16765
+ Berlin - Rostock
16712
16766
 
16713
- Active
16767
+ 10:05
16714
16768
 
16715
- 6
16769
+ Delayed
16716
16770
 
16717
- Consectetur
16771
+ R-2045
16718
16772
 
16719
- 878
16773
+ Nora Seidel
16720
16774
 
16721
- Active
16775
+ Berlin - Bremen
16776
+
16777
+ 10:30
16778
+
16779
+ Ready
16780
+
16781
+ Hamburg Yard 6 of 33 departures
16782
+
16783
+ Munich Depot 5 of 33 departures
16784
+
16785
+ Cologne Crossdock 6 of 33 departures
16786
+
16787
+ Frankfurt Gate 5 of 33 departures
16788
+
16789
+ Stuttgart Terminal 6 of 33 departures
16722
16790
 
16723
16791
  #### React (tsx)
16724
16792
 
16725
16793
  ```tsx
16726
- import { useState } from 'react';
16794
+ import { Fragment, useMemo, useState } from 'react';
16727
16795
 
16728
- import Button from '@rio-cloud/rio-uikit/Button';
16729
- import Table, { TableBody, TableColumn, TableHeader, TableHeaderColumn, TableRow } from '@rio-cloud/rio-uikit/Table';
16730
- import TableToolbar, { TableToolbarColumn } from '@rio-cloud/rio-uikit/TableToolbar';
16731
- import useSorting from '@rio-cloud/rio-uikit/useSorting';
16796
+ import Checkbox from '@rio-cloud/rio-uikit/Checkbox';
16797
+ import Table, {
16798
+ TableBody,
16799
+ TableColumn,
16800
+ TableExpandAllGroupsButton,
16801
+ TableExpandedRow,
16802
+ TableExpanderButton,
16803
+ TableGroupRow,
16804
+ TableHeader,
16805
+ TableHeaderColumn,
16806
+ type TableRowId,
16807
+ } from '@rio-cloud/rio-uikit/Table';
16732
16808
 
16733
- type TableRowAnimationItem = {
16734
- id: number;
16735
- name: string;
16736
- vin: string;
16809
+ type DemoGroupedRowsSelectionRow = {
16810
+ id: string;
16811
+ groupId: string;
16812
+ vehicle: string;
16813
+ driver: string;
16814
+ route: string;
16815
+ eta: string;
16737
16816
  status: string;
16738
16817
  };
16739
16818
 
16740
- const tableData: TableRowAnimationItem[] = [
16819
+ type DemoGroupedRowsSelectionGroup = {
16820
+ id: string;
16821
+ terminal: string;
16822
+ };
16823
+
16824
+ const groups: DemoGroupedRowsSelectionGroup[] = [
16825
+ { id: 'berlin', terminal: 'Berlin Hub' },
16826
+ { id: 'hamburg', terminal: 'Hamburg Yard' },
16827
+ { id: 'munich', terminal: 'Munich Depot' },
16828
+ { id: 'cologne', terminal: 'Cologne Crossdock' },
16829
+ { id: 'frankfurt', terminal: 'Frankfurt Gate' },
16830
+ { id: 'stuttgart', terminal: 'Stuttgart Terminal' },
16831
+ ];
16832
+
16833
+ const groupIds = groups.map(group => group.id);
16834
+
16835
+ const rows: DemoGroupedRowsSelectionRow[] = [
16741
16836
  {
16742
- id: 1,
16743
- name: 'Lorem',
16744
- vin: '7354',
16745
- status: 'Active',
16837
+ id: 'berlin-1',
16838
+ groupId: 'berlin',
16839
+ vehicle: 'R-2041',
16840
+ driver: 'Lena Vogt',
16841
+ route: 'Berlin - Hamburg',
16842
+ eta: '08:40',
16843
+ status: 'Ready',
16746
16844
  },
16747
16845
  {
16748
- id: 2,
16749
- name: 'Ipsum',
16750
- vin: '456457',
16751
- status: 'Inactive',
16846
+ id: 'berlin-2',
16847
+ groupId: 'berlin',
16848
+ vehicle: 'R-2042',
16849
+ driver: 'Milan Weber',
16850
+ route: 'Berlin - Leipzig',
16851
+ eta: '09:10',
16852
+ status: 'Loading',
16752
16853
  },
16753
16854
  {
16754
- id: 3,
16755
- name: 'Dolor',
16756
- vin: '895',
16757
- status: 'Active',
16855
+ id: 'berlin-3',
16856
+ groupId: 'berlin',
16857
+ vehicle: 'R-2043',
16858
+ driver: 'Eva Kruger',
16859
+ route: 'Berlin - Dresden',
16860
+ eta: '09:35',
16861
+ status: 'Ready',
16758
16862
  },
16759
16863
  {
16760
- id: 4,
16761
- name: 'Sit',
16762
- vin: '3456',
16763
- status: 'Active',
16864
+ id: 'berlin-4',
16865
+ groupId: 'berlin',
16866
+ vehicle: 'R-2044',
16867
+ driver: 'Jonas Brandt',
16868
+ route: 'Berlin - Rostock',
16869
+ eta: '10:05',
16870
+ status: 'Delayed',
16764
16871
  },
16765
16872
  {
16766
- id: 5,
16767
- name: 'Amet',
16768
- vin: '2445',
16769
- status: 'Active',
16873
+ id: 'berlin-5',
16874
+ groupId: 'berlin',
16875
+ vehicle: 'R-2045',
16876
+ driver: 'Nora Seidel',
16877
+ route: 'Berlin - Bremen',
16878
+ eta: '10:30',
16879
+ status: 'Ready',
16770
16880
  },
16771
16881
  {
16772
- id: 6,
16773
- name: 'Consectetur',
16774
- vin: '878',
16775
- status: 'Active',
16882
+ id: 'hamburg-1',
16883
+ groupId: 'hamburg',
16884
+ vehicle: 'H-1180',
16885
+ driver: 'Oskar Klein',
16886
+ route: 'Hamburg - Kiel',
16887
+ eta: '08:55',
16888
+ status: 'In transit',
16889
+ },
16890
+ {
16891
+ id: 'hamburg-2',
16892
+ groupId: 'hamburg',
16893
+ vehicle: 'H-1181',
16894
+ driver: 'Mara Stein',
16895
+ route: 'Hamburg - Bremen',
16896
+ eta: '09:20',
16897
+ status: 'Ready',
16898
+ },
16899
+ {
16900
+ id: 'hamburg-3',
16901
+ groupId: 'hamburg',
16902
+ vehicle: 'H-1182',
16903
+ driver: 'Timo Wolf',
16904
+ route: 'Hamburg - Lubeck',
16905
+ eta: '09:45',
16906
+ status: 'Loading',
16907
+ },
16908
+ {
16909
+ id: 'hamburg-4',
16910
+ groupId: 'hamburg',
16911
+ vehicle: 'H-1183',
16912
+ driver: 'Sina Roth',
16913
+ route: 'Hamburg - Hannover',
16914
+ eta: '10:15',
16915
+ status: 'Ready',
16916
+ },
16917
+ {
16918
+ id: 'hamburg-5',
16919
+ groupId: 'hamburg',
16920
+ vehicle: 'H-1184',
16921
+ driver: 'Felix Graf',
16922
+ route: 'Hamburg - Schwerin',
16923
+ eta: '10:50',
16924
+ status: 'Delayed',
16925
+ },
16926
+ {
16927
+ id: 'hamburg-6',
16928
+ groupId: 'hamburg',
16929
+ vehicle: 'H-1185',
16930
+ driver: 'Iris Lind',
16931
+ route: 'Hamburg - Flensburg',
16932
+ eta: '11:10',
16933
+ status: 'Ready',
16934
+ },
16935
+ {
16936
+ id: 'munich-1',
16937
+ groupId: 'munich',
16938
+ vehicle: 'M-3301',
16939
+ driver: 'Anja Hofmann',
16940
+ route: 'Munich - Augsburg',
16941
+ eta: '08:25',
16942
+ status: 'Ready',
16943
+ },
16944
+ {
16945
+ id: 'munich-2',
16946
+ groupId: 'munich',
16947
+ vehicle: 'M-3302',
16948
+ driver: 'David Lang',
16949
+ route: 'Munich - Salzburg',
16950
+ eta: '09:05',
16951
+ status: 'In transit',
16952
+ },
16953
+ {
16954
+ id: 'munich-3',
16955
+ groupId: 'munich',
16956
+ vehicle: 'M-3303',
16957
+ driver: 'Clara Beck',
16958
+ route: 'Munich - Regensburg',
16959
+ eta: '09:40',
16960
+ status: 'Ready',
16961
+ },
16962
+ {
16963
+ id: 'munich-4',
16964
+ groupId: 'munich',
16965
+ vehicle: 'M-3304',
16966
+ driver: 'Erik Hahn',
16967
+ route: 'Munich - Ulm',
16968
+ eta: '10:20',
16969
+ status: 'Loading',
16970
+ },
16971
+ {
16972
+ id: 'munich-5',
16973
+ groupId: 'munich',
16974
+ vehicle: 'M-3305',
16975
+ driver: 'Paula Rehm',
16976
+ route: 'Munich - Passau',
16977
+ eta: '11:00',
16978
+ status: 'Ready',
16979
+ },
16980
+ {
16981
+ id: 'cologne-1',
16982
+ groupId: 'cologne',
16983
+ vehicle: 'C-7101',
16984
+ driver: 'Ben Keller',
16985
+ route: 'Cologne - Bonn',
16986
+ eta: '08:45',
16987
+ status: 'Ready',
16988
+ },
16989
+ {
16990
+ id: 'cologne-2',
16991
+ groupId: 'cologne',
16992
+ vehicle: 'C-7102',
16993
+ driver: 'Lea Sommer',
16994
+ route: 'Cologne - Essen',
16995
+ eta: '09:25',
16996
+ status: 'Delayed',
16997
+ },
16998
+ {
16999
+ id: 'cologne-3',
17000
+ groupId: 'cologne',
17001
+ vehicle: 'C-7103',
17002
+ driver: 'Noah Frey',
17003
+ route: 'Cologne - Dortmund',
17004
+ eta: '09:55',
17005
+ status: 'Loading',
17006
+ },
17007
+ {
17008
+ id: 'cologne-4',
17009
+ groupId: 'cologne',
17010
+ vehicle: 'C-7104',
17011
+ driver: 'Mia Busch',
17012
+ route: 'Cologne - Aachen',
17013
+ eta: '10:35',
17014
+ status: 'Ready',
17015
+ },
17016
+ {
17017
+ id: 'cologne-5',
17018
+ groupId: 'cologne',
17019
+ vehicle: 'C-7105',
17020
+ driver: 'Lars Kunz',
17021
+ route: 'Cologne - Koblenz',
17022
+ eta: '11:05',
17023
+ status: 'Ready',
17024
+ },
17025
+ {
17026
+ id: 'cologne-6',
17027
+ groupId: 'cologne',
17028
+ vehicle: 'C-7106',
17029
+ driver: 'Rosa Dietz',
17030
+ route: 'Cologne - Mainz',
17031
+ eta: '11:35',
17032
+ status: 'In transit',
17033
+ },
17034
+ {
17035
+ id: 'frankfurt-1',
17036
+ groupId: 'frankfurt',
17037
+ vehicle: 'F-5201',
17038
+ driver: 'Klara May',
17039
+ route: 'Frankfurt - Kassel',
17040
+ eta: '08:35',
17041
+ status: 'Ready',
17042
+ },
17043
+ {
17044
+ id: 'frankfurt-2',
17045
+ groupId: 'frankfurt',
17046
+ vehicle: 'F-5202',
17047
+ driver: 'Jan Otto',
17048
+ route: 'Frankfurt - Wurzburg',
17049
+ eta: '09:15',
17050
+ status: 'Loading',
17051
+ },
17052
+ {
17053
+ id: 'frankfurt-3',
17054
+ groupId: 'frankfurt',
17055
+ vehicle: 'F-5203',
17056
+ driver: 'Sarah Blum',
17057
+ route: 'Frankfurt - Mannheim',
17058
+ eta: '09:50',
17059
+ status: 'Ready',
17060
+ },
17061
+ {
17062
+ id: 'frankfurt-4',
17063
+ groupId: 'frankfurt',
17064
+ vehicle: 'F-5204',
17065
+ driver: 'Tom Ritter',
17066
+ route: 'Frankfurt - Trier',
17067
+ eta: '10:40',
17068
+ status: 'In transit',
17069
+ },
17070
+ {
17071
+ id: 'frankfurt-5',
17072
+ groupId: 'frankfurt',
17073
+ vehicle: 'F-5205',
17074
+ driver: 'Nina Adler',
17075
+ route: 'Frankfurt - Fulda',
17076
+ eta: '11:20',
17077
+ status: 'Delayed',
17078
+ },
17079
+ {
17080
+ id: 'stuttgart-1',
17081
+ groupId: 'stuttgart',
17082
+ vehicle: 'S-4101',
17083
+ driver: 'Luis Horn',
17084
+ route: 'Stuttgart - Karlsruhe',
17085
+ eta: '08:50',
17086
+ status: 'Ready',
17087
+ },
17088
+ {
17089
+ id: 'stuttgart-2',
17090
+ groupId: 'stuttgart',
17091
+ vehicle: 'S-4102',
17092
+ driver: 'Greta Vogler',
17093
+ route: 'Stuttgart - Freiburg',
17094
+ eta: '09:30',
17095
+ status: 'Loading',
17096
+ },
17097
+ {
17098
+ id: 'stuttgart-3',
17099
+ groupId: 'stuttgart',
17100
+ vehicle: 'S-4103',
17101
+ driver: 'Aron Weiss',
17102
+ route: 'Stuttgart - Ulm',
17103
+ eta: '10:00',
17104
+ status: 'Ready',
17105
+ },
17106
+ {
17107
+ id: 'stuttgart-4',
17108
+ groupId: 'stuttgart',
17109
+ vehicle: 'S-4104',
17110
+ driver: 'Lina Fuchs',
17111
+ route: 'Stuttgart - Tubingen',
17112
+ eta: '10:45',
17113
+ status: 'In transit',
17114
+ },
17115
+ {
17116
+ id: 'stuttgart-5',
17117
+ groupId: 'stuttgart',
17118
+ vehicle: 'S-4105',
17119
+ driver: 'Theo Bach',
17120
+ route: 'Stuttgart - Heilbronn',
17121
+ eta: '11:25',
17122
+ status: 'Ready',
17123
+ },
17124
+ {
17125
+ id: 'stuttgart-6',
17126
+ groupId: 'stuttgart',
17127
+ vehicle: 'S-4106',
17128
+ driver: 'Emma Koch',
17129
+ route: 'Stuttgart - Singen',
17130
+ eta: '12:00',
17131
+ status: 'Delayed',
16776
17132
  },
16777
17133
  ];
16778
17134
 
16779
- const TableRowAnimationExample = () => {
16780
- const [data, setData] = useState(tableData);
16781
-
16782
- const { sortedItems, sortKey, sortDirection, setSortKey, setSortDirection } = useSorting(data, 'id');
17135
+ const TableGroupedRowsSelectionExample = () => {
17136
+ const [expandedGroups, setExpandedGroups] = useState<string[]>(['berlin']);
17137
+ const [selectedRowIds, setSelectedRowIds] = useState<TableRowId[]>([]);
16783
17138
 
16784
- const handleRemoveRow = (fatalRow: number) => {
16785
- setData(previousData => previousData.filter(item => item.id !== fatalRow));
17139
+ const rowsByGroupId = useMemo(() => Map.groupBy(rows, row => row.groupId), []);
17140
+ const rowIds = useMemo(() => rows.map(row => row.id), []);
17141
+ const areAllGroupsExpanded = groupIds.every(groupId => expandedGroups.includes(groupId));
17142
+ const areAllRowsSelected = rowIds.every(rowId => selectedRowIds.includes(rowId));
17143
+ const areSomeRowsSelected = selectedRowIds.some(rowId => rowIds.includes(String(rowId)));
17144
+
17145
+ const toggleGroup = (groupId: string) => {
17146
+ setExpandedGroups(currentExpandedGroups =>
17147
+ currentExpandedGroups.includes(groupId)
17148
+ ? currentExpandedGroups.filter(expandedGroupId => expandedGroupId !== groupId)
17149
+ : [...currentExpandedGroups, groupId]
17150
+ );
16786
17151
  };
16787
17152
 
16788
- const handleReset = () => setData(tableData);
17153
+ const toggleAllGroups = () => {
17154
+ setExpandedGroups(currentExpandedGroups =>
17155
+ groupIds.every(groupId => currentExpandedGroups.includes(groupId)) ? [] : groupIds
17156
+ );
17157
+ };
16789
17158
 
16790
- const handleSortChange = (columnKey: string, direction: 'asc' | 'desc') => {
16791
- setSortKey(columnKey as keyof TableRowAnimationItem);
16792
- setSortDirection(direction);
17159
+ const toggleAllRowsSelection = () => {
17160
+ setSelectedRowIds(areAllRowsSelected ? [] : rowIds);
16793
17161
  };
16794
17162
 
16795
17163
  return (
16796
- <div>
16797
- <TableToolbar disableResponsiveCollapse>
16798
- <TableToolbarColumn>
16799
- <div className='btn-toolbar'>
16800
- <Button bsStyle={Button.PRIMARY} onClick={() => handleRemoveRow(3)}>
16801
- Remove row
16802
- </Button>
17164
+ <Table
17165
+ rowKey='id'
17166
+ hover
17167
+ selectedRowIds={selectedRowIds}
17168
+ onSelectionChange={setSelectedRowIds}
17169
+ showSelectionColumn
17170
+ selectionHeaderContent={
17171
+ <Checkbox
17172
+ checked={areAllRowsSelected}
17173
+ indeterminate={!areAllRowsSelected && areSomeRowsSelected}
17174
+ onChange={toggleAllRowsSelection}
17175
+ />
17176
+ }
17177
+ >
17178
+ <TableHeader>
17179
+ <TableHeaderColumn columnKey='vehicle'>Vehicle</TableHeaderColumn>
17180
+ <TableHeaderColumn columnKey='driver'>Driver</TableHeaderColumn>
17181
+ <TableHeaderColumn columnKey='route'>Route</TableHeaderColumn>
17182
+ <TableHeaderColumn columnKey='eta'>ETA</TableHeaderColumn>
17183
+ <TableHeaderColumn columnKey='status'>Status</TableHeaderColumn>
17184
+ <TableHeaderColumn columnKey='actions' horizontalAlign='right' className='padding-y-0'>
17185
+ <TableExpandAllGroupsButton expanded={areAllGroupsExpanded} onClick={toggleAllGroups} />
17186
+ </TableHeaderColumn>
17187
+ </TableHeader>
17188
+
17189
+ <TableBody>
17190
+ {groups.map(group => {
17191
+ const isExpanded = expandedGroups.includes(group.id);
17192
+ const groupRows = rowsByGroupId.get(group.id) ?? [];
17193
+
17194
+ return (
17195
+ <Fragment key={group.id}>
17196
+ <TableGroupRow noHover>
17197
+ <div className='display-flex align-items-center justify-content-between gap-15 width-100pct'>
17198
+ <div className='display-flex align-items-center gap-10'>
17199
+ <span className='text-bold'>{group.terminal}</span>
17200
+ <span className='text-color-dark'>
17201
+ {groupRows.length} of {rows.length} departures
17202
+ </span>
17203
+ </div>
17204
+ <TableExpanderButton expanded={isExpanded} onClick={() => toggleGroup(group.id)} />
17205
+ </div>
17206
+ </TableGroupRow>
17207
+
17208
+ {isExpanded &&
17209
+ groupRows.map(row => (
17210
+ <TableExpandedRow key={row.id} parentKey={group.id} className='bg-white' {...row}>
17211
+ <TableColumn columnKey='vehicle'>{row.vehicle}</TableColumn>
17212
+ <TableColumn columnKey='driver'>{row.driver}</TableColumn>
17213
+ <TableColumn columnKey='route'>{row.route}</TableColumn>
17214
+ <TableColumn columnKey='eta'>{row.eta}</TableColumn>
17215
+ <TableColumn columnKey='status'>{row.status}</TableColumn>
17216
+ <TableColumn columnKey='actions' />
17217
+ </TableExpandedRow>
17218
+ ))}
17219
+ </Fragment>
17220
+ );
17221
+ })}
17222
+ </TableBody>
17223
+ </Table>
17224
+ );
17225
+ };
17226
+
17227
+ export default TableGroupedRowsSelectionExample;
17228
+ ```
17229
+
17230
+ #### HTML (html)
17231
+
17232
+ ```html
17233
+ <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3 table-col-4 table-col-5 table-col-6&quot;; --table-column-count: 7; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="7">
17234
+ <div class="table-head" role="rowgroup">
17235
+ <div class="table-head-grid table-head-grid-custom-selection" role="row" style="grid-template-rows: repeat(1, auto);">
17236
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle table-selection-cell-custom-content" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17237
+ <div class="table-selection-control">
17238
+ <label class="checkbox" tabindex="0">
17239
+ <input type="checkbox" class="">
17240
+ <span class="checkbox-text">
17241
+ </span>
17242
+ </label>
17243
+ </div>
17244
+ </div>
17245
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="vehicle" role="columnheader" aria-colindex="2" aria-rowindex="1" style="grid-area: 1 / 2 / span 1 / span 1;">
17246
+ <div class="table-head-cell-content">
17247
+ <div class="table-head-cell-content-row">
17248
+ <span class="table-head-label-wrapper">
17249
+ <span class="table-head-label">Vehicle</span>
17250
+ </span>
17251
+ </div>
17252
+ </div>
17253
+ </div>
17254
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="driver" role="columnheader" aria-colindex="3" aria-rowindex="1" style="grid-area: 1 / 3 / span 1 / span 1;">
17255
+ <div class="table-head-cell-content">
17256
+ <div class="table-head-cell-content-row">
17257
+ <span class="table-head-label-wrapper">
17258
+ <span class="table-head-label">Driver</span>
17259
+ </span>
17260
+ </div>
17261
+ </div>
17262
+ </div>
17263
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="route" role="columnheader" aria-colindex="4" aria-rowindex="1" style="grid-area: 1 / 4 / span 1 / span 1;">
17264
+ <div class="table-head-cell-content">
17265
+ <div class="table-head-cell-content-row">
17266
+ <span class="table-head-label-wrapper">
17267
+ <span class="table-head-label">Route</span>
17268
+ </span>
17269
+ </div>
17270
+ </div>
17271
+ </div>
17272
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="eta" role="columnheader" aria-colindex="5" aria-rowindex="1" style="grid-area: 1 / 5 / span 1 / span 1;">
17273
+ <div class="table-head-cell-content">
17274
+ <div class="table-head-cell-content-row">
17275
+ <span class="table-head-label-wrapper">
17276
+ <span class="table-head-label">ETA</span>
17277
+ </span>
17278
+ </div>
17279
+ </div>
17280
+ </div>
17281
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="status" role="columnheader" aria-colindex="6" aria-rowindex="1" style="grid-area: 1 / 6 / span 1 / span 1;">
17282
+ <div class="table-head-cell-content">
17283
+ <div class="table-head-cell-content-row">
17284
+ <span class="table-head-label-wrapper">
17285
+ <span class="table-head-label">Status</span>
17286
+ </span>
17287
+ </div>
17288
+ </div>
17289
+ </div>
17290
+ <div class="table-head-cell table-align-right table-vertical-align-middle padding-y-0" data-column="actions" role="columnheader" aria-colindex="7" aria-rowindex="1" style="grid-area: 1 / 7 / span 1 / span 1;">
17291
+ <div class="table-head-cell-content">
17292
+ <div class="table-head-cell-content-row">
17293
+ <span class="table-head-label-wrapper">
17294
+ <span class="table-head-label">
17295
+ <button type="button" class="btn btn-muted btn-sm btn-icon-only btn-component table-expand-all-groups-button" tabindex="0">
17296
+ <span class="rioglyph rioglyph-angle-double-down text-size-16">
17297
+ </span>
17298
+ </button>
17299
+ </span>
17300
+ </span>
17301
+ </div>
17302
+ </div>
17303
+ </div>
17304
+ </div>
17305
+ </div>
17306
+ <div class="table-body" role="rowgroup">
17307
+ <div class="table-row table-row-group table-row-no-hover" data-index="0" data-row-id="group-0" role="row">
17308
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17309
+ <div class="table-cell-content">
17310
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17311
+ <div class="display-flex align-items-center gap-10">
17312
+ <span class="text-bold">Berlin Hub</span>
17313
+ <span class="text-color-dark">5 of 33 departures</span>
17314
+ </div>
17315
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button table-expander-button-expanded" tabindex="0">
17316
+ <span class="rioglyph rioglyph-chevron-down">
17317
+ </span>
17318
+ </button>
17319
+ </div>
17320
+ </div>
17321
+ </div>
17322
+ </div>
17323
+ <div id="berlin-1" class="table-row table-row-expanded-data bg-white" data-index="1" data-row-id="berlin-1" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
17324
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17325
+ <div class="table-selection-control">
17326
+ <label class="checkbox" tabindex="0">
17327
+ <input type="checkbox" class="">
17328
+ <span class="checkbox-text">
17329
+ </span>
17330
+ </label>
17331
+ </div>
17332
+ </div>
17333
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
17334
+ <div class="table-cell-content overflow-hidden">R-2041</div>
17335
+ </div>
17336
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
17337
+ <div class="table-cell-content overflow-hidden">Lena Vogt</div>
17338
+ </div>
17339
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
17340
+ <div class="table-cell-content overflow-hidden">Berlin - Hamburg</div>
17341
+ </div>
17342
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="eta" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
17343
+ <div class="table-cell-content overflow-hidden">08:40</div>
17344
+ </div>
17345
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
17346
+ <div class="table-cell-content overflow-hidden">Ready</div>
17347
+ </div>
17348
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
17349
+ <div class="table-cell-content overflow-hidden">
17350
+ </div>
17351
+ </div>
17352
+ </div>
17353
+ <div id="berlin-2" class="table-row table-row-expanded-data bg-white" data-index="2" data-row-id="berlin-2" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
17354
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17355
+ <div class="table-selection-control">
17356
+ <label class="checkbox" tabindex="0">
17357
+ <input type="checkbox" class="">
17358
+ <span class="checkbox-text">
17359
+ </span>
17360
+ </label>
17361
+ </div>
17362
+ </div>
17363
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
17364
+ <div class="table-cell-content overflow-hidden">R-2042</div>
17365
+ </div>
17366
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
17367
+ <div class="table-cell-content overflow-hidden">Milan Weber</div>
17368
+ </div>
17369
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
17370
+ <div class="table-cell-content overflow-hidden">Berlin - Leipzig</div>
17371
+ </div>
17372
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="eta" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
17373
+ <div class="table-cell-content overflow-hidden">09:10</div>
17374
+ </div>
17375
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
17376
+ <div class="table-cell-content overflow-hidden">Loading</div>
17377
+ </div>
17378
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
17379
+ <div class="table-cell-content overflow-hidden">
17380
+ </div>
17381
+ </div>
17382
+ </div>
17383
+ <div id="berlin-3" class="table-row table-row-expanded-data bg-white" data-index="3" data-row-id="berlin-3" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
17384
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17385
+ <div class="table-selection-control">
17386
+ <label class="checkbox" tabindex="0">
17387
+ <input type="checkbox" class="">
17388
+ <span class="checkbox-text">
17389
+ </span>
17390
+ </label>
17391
+ </div>
17392
+ </div>
17393
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
17394
+ <div class="table-cell-content overflow-hidden">R-2043</div>
17395
+ </div>
17396
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
17397
+ <div class="table-cell-content overflow-hidden">Eva Kruger</div>
17398
+ </div>
17399
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
17400
+ <div class="table-cell-content overflow-hidden">Berlin - Dresden</div>
17401
+ </div>
17402
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="eta" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
17403
+ <div class="table-cell-content overflow-hidden">09:35</div>
17404
+ </div>
17405
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
17406
+ <div class="table-cell-content overflow-hidden">Ready</div>
17407
+ </div>
17408
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
17409
+ <div class="table-cell-content overflow-hidden">
17410
+ </div>
17411
+ </div>
17412
+ </div>
17413
+ <div id="berlin-4" class="table-row table-row-expanded-data bg-white" data-index="4" data-row-id="berlin-4" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
17414
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17415
+ <div class="table-selection-control">
17416
+ <label class="checkbox" tabindex="0">
17417
+ <input type="checkbox" class="">
17418
+ <span class="checkbox-text">
17419
+ </span>
17420
+ </label>
17421
+ </div>
17422
+ </div>
17423
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
17424
+ <div class="table-cell-content overflow-hidden">R-2044</div>
17425
+ </div>
17426
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
17427
+ <div class="table-cell-content overflow-hidden">Jonas Brandt</div>
17428
+ </div>
17429
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
17430
+ <div class="table-cell-content overflow-hidden">Berlin - Rostock</div>
17431
+ </div>
17432
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="eta" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
17433
+ <div class="table-cell-content overflow-hidden">10:05</div>
17434
+ </div>
17435
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
17436
+ <div class="table-cell-content overflow-hidden">Delayed</div>
17437
+ </div>
17438
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
17439
+ <div class="table-cell-content overflow-hidden">
17440
+ </div>
17441
+ </div>
17442
+ </div>
17443
+ <div id="berlin-5" class="table-row table-row-expanded-data bg-white" data-index="5" data-row-id="berlin-5" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
17444
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
17445
+ <div class="table-selection-control">
17446
+ <label class="checkbox" tabindex="0">
17447
+ <input type="checkbox" class="">
17448
+ <span class="checkbox-text">
17449
+ </span>
17450
+ </label>
17451
+ </div>
17452
+ </div>
17453
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
17454
+ <div class="table-cell-content overflow-hidden">R-2045</div>
17455
+ </div>
17456
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
17457
+ <div class="table-cell-content overflow-hidden">Nora Seidel</div>
17458
+ </div>
17459
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
17460
+ <div class="table-cell-content overflow-hidden">Berlin - Bremen</div>
17461
+ </div>
17462
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="eta" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
17463
+ <div class="table-cell-content overflow-hidden">10:30</div>
17464
+ </div>
17465
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
17466
+ <div class="table-cell-content overflow-hidden">Ready</div>
17467
+ </div>
17468
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
17469
+ <div class="table-cell-content overflow-hidden">
17470
+ </div>
17471
+ </div>
17472
+ </div>
17473
+ <div class="table-row table-row-group table-row-no-hover" data-index="6" data-row-id="group-6" role="row">
17474
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17475
+ <div class="table-cell-content">
17476
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17477
+ <div class="display-flex align-items-center gap-10">
17478
+ <span class="text-bold">Hamburg Yard</span>
17479
+ <span class="text-color-dark">6 of 33 departures</span>
17480
+ </div>
17481
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
17482
+ <span class="rioglyph rioglyph-chevron-down">
17483
+ </span>
17484
+ </button>
17485
+ </div>
17486
+ </div>
17487
+ </div>
17488
+ </div>
17489
+ <div class="table-row table-row-group table-row-no-hover" data-index="7" data-row-id="group-7" role="row">
17490
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17491
+ <div class="table-cell-content">
17492
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17493
+ <div class="display-flex align-items-center gap-10">
17494
+ <span class="text-bold">Munich Depot</span>
17495
+ <span class="text-color-dark">5 of 33 departures</span>
17496
+ </div>
17497
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
17498
+ <span class="rioglyph rioglyph-chevron-down">
17499
+ </span>
17500
+ </button>
17501
+ </div>
17502
+ </div>
17503
+ </div>
17504
+ </div>
17505
+ <div class="table-row table-row-group table-row-no-hover" data-index="8" data-row-id="group-8" role="row">
17506
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17507
+ <div class="table-cell-content">
17508
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17509
+ <div class="display-flex align-items-center gap-10">
17510
+ <span class="text-bold">Cologne Crossdock</span>
17511
+ <span class="text-color-dark">6 of 33 departures</span>
17512
+ </div>
17513
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
17514
+ <span class="rioglyph rioglyph-chevron-down">
17515
+ </span>
17516
+ </button>
17517
+ </div>
17518
+ </div>
17519
+ </div>
17520
+ </div>
17521
+ <div class="table-row table-row-group table-row-no-hover" data-index="9" data-row-id="group-9" role="row">
17522
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17523
+ <div class="table-cell-content">
17524
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17525
+ <div class="display-flex align-items-center gap-10">
17526
+ <span class="text-bold">Frankfurt Gate</span>
17527
+ <span class="text-color-dark">5 of 33 departures</span>
17528
+ </div>
17529
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
17530
+ <span class="rioglyph rioglyph-chevron-down">
17531
+ </span>
17532
+ </button>
17533
+ </div>
17534
+ </div>
17535
+ </div>
17536
+ </div>
17537
+ <div class="table-row table-row-group table-row-no-hover" data-index="10" data-row-id="group-10" role="row">
17538
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="7">
17539
+ <div class="table-cell-content">
17540
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
17541
+ <div class="display-flex align-items-center gap-10">
17542
+ <span class="text-bold">Stuttgart Terminal</span>
17543
+ <span class="text-color-dark">6 of 33 departures</span>
17544
+ </div>
17545
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
17546
+ <span class="rioglyph rioglyph-chevron-down">
17547
+ </span>
17548
+ </button>
17549
+ </div>
17550
+ </div>
17551
+ </div>
17552
+ </div>
17553
+ </div>
17554
+ </div>
17555
+ ```
17556
+
17557
+ #### Props (json)
17558
+
17559
+ ```json
17560
+ rowClassName={(row) => (row.disabled ? 'my-class-name' : '')}
17561
+ ```
17562
+
17563
+ ## Selectable groups with expanded rows
17564
+
17565
+ When selection should apply to groups instead of expanded data rows, enable the table selection column and make only the TableGroupRow selectable. Expanded rows can opt out with selectable={false} and hide their empty selection controls via hideSelectionCheckboxesForExcludedRows.
17566
+
17567
+ ### Example: 5 departures
17568
+
17569
+ Vehicle
17570
+
17571
+ Driver
17572
+
17573
+ Destination
17574
+
17575
+ Departure
17576
+
17577
+ Status
17578
+
17579
+ North region 5 departures
17580
+
17581
+ N-1041
17582
+
17583
+ Lena Vogt
17584
+
17585
+ Hamburg
17586
+
17587
+ 08:00
17588
+
17589
+ Ready
17590
+
17591
+ N-1042
17592
+
17593
+ Milan Weber
17594
+
17595
+ Kiel
17596
+
17597
+ 08:25
17598
+
17599
+ Loading
17600
+
17601
+ N-1043
17602
+
17603
+ Eva Kruger
17604
+
17605
+ Bremen
17606
+
17607
+ 08:50
17608
+
17609
+ Ready
17610
+
17611
+ N-1044
17612
+
17613
+ Jonas Brandt
17614
+
17615
+ Lubeck
17616
+
17617
+ 09:15
17618
+
17619
+ Delayed
17620
+
17621
+ N-1045
17622
+
17623
+ Nora Seidel
17624
+
17625
+ Rostock
17626
+
17627
+ 09:40
17628
+
17629
+ Ready
17630
+
17631
+ East region 6 departures
17632
+
17633
+ South region 5 departures
17634
+
17635
+ West region 6 departures
17636
+
17637
+ Central region 5 departures
17638
+
17639
+ Southwest region 6 departures
17640
+
17641
+ #### React (tsx)
17642
+
17643
+ ```tsx
17644
+ import { Fragment, useMemo, useState } from 'react';
17645
+
17646
+ import Table, {
17647
+ TableBody,
17648
+ TableColumn,
17649
+ TableExpandAllGroupsButton,
17650
+ TableExpandedRow,
17651
+ TableExpanderButton,
17652
+ TableGroupRow,
17653
+ TableHeader,
17654
+ TableHeaderColumn,
17655
+ type TableRowId,
17656
+ } from '@rio-cloud/rio-uikit/Table';
17657
+
17658
+ type DemoSelectableGroupRow = {
17659
+ id: string;
17660
+ groupId: string;
17661
+ vehicle: string;
17662
+ driver: string;
17663
+ destination: string;
17664
+ departure: string;
17665
+ status: string;
17666
+ };
17667
+
17668
+ type DemoSelectableGroup = {
17669
+ id: string;
17670
+ name: string;
17671
+ };
17672
+
17673
+ const groups: DemoSelectableGroup[] = [
17674
+ { id: 'north', name: 'North region' },
17675
+ { id: 'east', name: 'East region' },
17676
+ { id: 'south', name: 'South region' },
17677
+ { id: 'west', name: 'West region' },
17678
+ { id: 'central', name: 'Central region' },
17679
+ { id: 'southwest', name: 'Southwest region' },
17680
+ ];
17681
+
17682
+ const groupIds = groups.map(group => group.id);
17683
+
17684
+ const rows: DemoSelectableGroupRow[] = [
17685
+ {
17686
+ id: 'north-1',
17687
+ groupId: 'north',
17688
+ vehicle: 'N-1041',
17689
+ driver: 'Lena Vogt',
17690
+ destination: 'Hamburg',
17691
+ departure: '08:00',
17692
+ status: 'Ready',
17693
+ },
17694
+ {
17695
+ id: 'north-2',
17696
+ groupId: 'north',
17697
+ vehicle: 'N-1042',
17698
+ driver: 'Milan Weber',
17699
+ destination: 'Kiel',
17700
+ departure: '08:25',
17701
+ status: 'Loading',
17702
+ },
17703
+ {
17704
+ id: 'north-3',
17705
+ groupId: 'north',
17706
+ vehicle: 'N-1043',
17707
+ driver: 'Eva Kruger',
17708
+ destination: 'Bremen',
17709
+ departure: '08:50',
17710
+ status: 'Ready',
17711
+ },
17712
+ {
17713
+ id: 'north-4',
17714
+ groupId: 'north',
17715
+ vehicle: 'N-1044',
17716
+ driver: 'Jonas Brandt',
17717
+ destination: 'Lubeck',
17718
+ departure: '09:15',
17719
+ status: 'Delayed',
17720
+ },
17721
+ {
17722
+ id: 'north-5',
17723
+ groupId: 'north',
17724
+ vehicle: 'N-1045',
17725
+ driver: 'Nora Seidel',
17726
+ destination: 'Rostock',
17727
+ departure: '09:40',
17728
+ status: 'Ready',
17729
+ },
17730
+ {
17731
+ id: 'east-1',
17732
+ groupId: 'east',
17733
+ vehicle: 'E-2081',
17734
+ driver: 'Oskar Klein',
17735
+ destination: 'Leipzig',
17736
+ departure: '08:10',
17737
+ status: 'Ready',
17738
+ },
17739
+ {
17740
+ id: 'east-2',
17741
+ groupId: 'east',
17742
+ vehicle: 'E-2082',
17743
+ driver: 'Mara Stein',
17744
+ destination: 'Dresden',
17745
+ departure: '08:35',
17746
+ status: 'Loading',
17747
+ },
17748
+ {
17749
+ id: 'east-3',
17750
+ groupId: 'east',
17751
+ vehicle: 'E-2083',
17752
+ driver: 'Timo Wolf',
17753
+ destination: 'Potsdam',
17754
+ departure: '09:05',
17755
+ status: 'In transit',
17756
+ },
17757
+ {
17758
+ id: 'east-4',
17759
+ groupId: 'east',
17760
+ vehicle: 'E-2084',
17761
+ driver: 'Sina Roth',
17762
+ destination: 'Cottbus',
17763
+ departure: '09:30',
17764
+ status: 'Ready',
17765
+ },
17766
+ {
17767
+ id: 'east-5',
17768
+ groupId: 'east',
17769
+ vehicle: 'E-2085',
17770
+ driver: 'Felix Graf',
17771
+ destination: 'Erfurt',
17772
+ departure: '10:00',
17773
+ status: 'Ready',
17774
+ },
17775
+ {
17776
+ id: 'east-6',
17777
+ groupId: 'east',
17778
+ vehicle: 'E-2086',
17779
+ driver: 'Iris Lind',
17780
+ destination: 'Jena',
17781
+ departure: '10:25',
17782
+ status: 'Delayed',
17783
+ },
17784
+ {
17785
+ id: 'south-1',
17786
+ groupId: 'south',
17787
+ vehicle: 'S-3301',
17788
+ driver: 'Anja Hofmann',
17789
+ destination: 'Munich',
17790
+ departure: '08:15',
17791
+ status: 'Ready',
17792
+ },
17793
+ {
17794
+ id: 'south-2',
17795
+ groupId: 'south',
17796
+ vehicle: 'S-3302',
17797
+ driver: 'David Lang',
17798
+ destination: 'Augsburg',
17799
+ departure: '08:45',
17800
+ status: 'In transit',
17801
+ },
17802
+ {
17803
+ id: 'south-3',
17804
+ groupId: 'south',
17805
+ vehicle: 'S-3303',
17806
+ driver: 'Clara Beck',
17807
+ destination: 'Ulm',
17808
+ departure: '09:10',
17809
+ status: 'Ready',
17810
+ },
17811
+ {
17812
+ id: 'south-4',
17813
+ groupId: 'south',
17814
+ vehicle: 'S-3304',
17815
+ driver: 'Erik Hahn',
17816
+ destination: 'Passau',
17817
+ departure: '09:50',
17818
+ status: 'Loading',
17819
+ },
17820
+ {
17821
+ id: 'south-5',
17822
+ groupId: 'south',
17823
+ vehicle: 'S-3305',
17824
+ driver: 'Paula Rehm',
17825
+ destination: 'Regensburg',
17826
+ departure: '10:20',
17827
+ status: 'Ready',
17828
+ },
17829
+ {
17830
+ id: 'west-1',
17831
+ groupId: 'west',
17832
+ vehicle: 'W-4101',
17833
+ driver: 'Ben Keller',
17834
+ destination: 'Cologne',
17835
+ departure: '08:05',
17836
+ status: 'Ready',
17837
+ },
17838
+ {
17839
+ id: 'west-2',
17840
+ groupId: 'west',
17841
+ vehicle: 'W-4102',
17842
+ driver: 'Lea Sommer',
17843
+ destination: 'Dortmund',
17844
+ departure: '08:30',
17845
+ status: 'Delayed',
17846
+ },
17847
+ {
17848
+ id: 'west-3',
17849
+ groupId: 'west',
17850
+ vehicle: 'W-4103',
17851
+ driver: 'Noah Frey',
17852
+ destination: 'Essen',
17853
+ departure: '09:00',
17854
+ status: 'Loading',
17855
+ },
17856
+ {
17857
+ id: 'west-4',
17858
+ groupId: 'west',
17859
+ vehicle: 'W-4104',
17860
+ driver: 'Mia Busch',
17861
+ destination: 'Aachen',
17862
+ departure: '09:35',
17863
+ status: 'Ready',
17864
+ },
17865
+ {
17866
+ id: 'west-5',
17867
+ groupId: 'west',
17868
+ vehicle: 'W-4105',
17869
+ driver: 'Lars Kunz',
17870
+ destination: 'Bonn',
17871
+ departure: '10:05',
17872
+ status: 'Ready',
17873
+ },
17874
+ {
17875
+ id: 'west-6',
17876
+ groupId: 'west',
17877
+ vehicle: 'W-4106',
17878
+ driver: 'Rosa Dietz',
17879
+ destination: 'Koblenz',
17880
+ departure: '10:35',
17881
+ status: 'In transit',
17882
+ },
17883
+ {
17884
+ id: 'central-1',
17885
+ groupId: 'central',
17886
+ vehicle: 'C-5201',
17887
+ driver: 'Klara May',
17888
+ destination: 'Frankfurt',
17889
+ departure: '08:20',
17890
+ status: 'Ready',
17891
+ },
17892
+ {
17893
+ id: 'central-2',
17894
+ groupId: 'central',
17895
+ vehicle: 'C-5202',
17896
+ driver: 'Jan Otto',
17897
+ destination: 'Kassel',
17898
+ departure: '08:55',
17899
+ status: 'Loading',
17900
+ },
17901
+ {
17902
+ id: 'central-3',
17903
+ groupId: 'central',
17904
+ vehicle: 'C-5203',
17905
+ driver: 'Sarah Blum',
17906
+ destination: 'Mannheim',
17907
+ departure: '09:25',
17908
+ status: 'Ready',
17909
+ },
17910
+ {
17911
+ id: 'central-4',
17912
+ groupId: 'central',
17913
+ vehicle: 'C-5204',
17914
+ driver: 'Tom Ritter',
17915
+ destination: 'Mainz',
17916
+ departure: '09:55',
17917
+ status: 'In transit',
17918
+ },
17919
+ {
17920
+ id: 'central-5',
17921
+ groupId: 'central',
17922
+ vehicle: 'C-5205',
17923
+ driver: 'Nina Adler',
17924
+ destination: 'Fulda',
17925
+ departure: '10:30',
17926
+ status: 'Delayed',
17927
+ },
17928
+ {
17929
+ id: 'southwest-1',
17930
+ groupId: 'southwest',
17931
+ vehicle: 'SW-6101',
17932
+ driver: 'Luis Horn',
17933
+ destination: 'Stuttgart',
17934
+ departure: '08:30',
17935
+ status: 'Ready',
17936
+ },
17937
+ {
17938
+ id: 'southwest-2',
17939
+ groupId: 'southwest',
17940
+ vehicle: 'SW-6102',
17941
+ driver: 'Greta Vogler',
17942
+ destination: 'Freiburg',
17943
+ departure: '09:00',
17944
+ status: 'Loading',
17945
+ },
17946
+ {
17947
+ id: 'southwest-3',
17948
+ groupId: 'southwest',
17949
+ vehicle: 'SW-6103',
17950
+ driver: 'Aron Weiss',
17951
+ destination: 'Karlsruhe',
17952
+ departure: '09:30',
17953
+ status: 'Ready',
17954
+ },
17955
+ {
17956
+ id: 'southwest-4',
17957
+ groupId: 'southwest',
17958
+ vehicle: 'SW-6104',
17959
+ driver: 'Lina Fuchs',
17960
+ destination: 'Tubingen',
17961
+ departure: '10:10',
17962
+ status: 'In transit',
17963
+ },
17964
+ {
17965
+ id: 'southwest-5',
17966
+ groupId: 'southwest',
17967
+ vehicle: 'SW-6105',
17968
+ driver: 'Theo Bach',
17969
+ destination: 'Heilbronn',
17970
+ departure: '10:45',
17971
+ status: 'Ready',
17972
+ },
17973
+ {
17974
+ id: 'southwest-6',
17975
+ groupId: 'southwest',
17976
+ vehicle: 'SW-6106',
17977
+ driver: 'Emma Koch',
17978
+ destination: 'Singen',
17979
+ departure: '11:15',
17980
+ status: 'Delayed',
17981
+ },
17982
+ ];
17983
+
17984
+ const TableSelectableGroupRowsExample = () => {
17985
+ const [expandedGroups, setExpandedGroups] = useState<string[]>(['north']);
17986
+ const [selectedGroupIds, setSelectedGroupIds] = useState<TableRowId[]>([]);
17987
+
17988
+ const rowsByGroupId = useMemo(() => Map.groupBy(rows, row => row.groupId), []);
17989
+ const areAllGroupsExpanded = groupIds.every(groupId => expandedGroups.includes(groupId));
17990
+
17991
+ const toggleGroup = (groupId: string) => {
17992
+ setExpandedGroups(currentExpandedGroups =>
17993
+ currentExpandedGroups.includes(groupId)
17994
+ ? currentExpandedGroups.filter(expandedGroupId => expandedGroupId !== groupId)
17995
+ : [...currentExpandedGroups, groupId]
17996
+ );
17997
+ };
17998
+
17999
+ const toggleAllGroups = () => {
18000
+ setExpandedGroups(currentExpandedGroups =>
18001
+ groupIds.every(groupId => currentExpandedGroups.includes(groupId)) ? [] : groupIds
18002
+ );
18003
+ };
18004
+
18005
+ return (
18006
+ <Table
18007
+ rowKey='id'
18008
+ hover
18009
+ selectedRowIds={selectedGroupIds}
18010
+ onSelectionChange={setSelectedGroupIds}
18011
+ showSelectionColumn
18012
+ hideSelectionCheckboxesForExcludedRows
18013
+ >
18014
+ <TableHeader>
18015
+ <TableHeaderColumn columnKey='vehicle'>Vehicle</TableHeaderColumn>
18016
+ <TableHeaderColumn columnKey='driver'>Driver</TableHeaderColumn>
18017
+ <TableHeaderColumn columnKey='destination'>Destination</TableHeaderColumn>
18018
+ <TableHeaderColumn columnKey='departure'>Departure</TableHeaderColumn>
18019
+ <TableHeaderColumn columnKey='status'>Status</TableHeaderColumn>
18020
+ <TableHeaderColumn columnKey='actions' horizontalAlign='right' className='padding-y-0'>
18021
+ <TableExpandAllGroupsButton expanded={areAllGroupsExpanded} onClick={toggleAllGroups} />
18022
+ </TableHeaderColumn>
18023
+ </TableHeader>
18024
+
18025
+ <TableBody>
18026
+ {groups.map(group => {
18027
+ const isExpanded = expandedGroups.includes(group.id);
18028
+ const groupRows = rowsByGroupId.get(group.id) ?? [];
18029
+
18030
+ return (
18031
+ <Fragment key={group.id}>
18032
+ <TableGroupRow id={group.id} selectable noHover>
18033
+ <div className='display-flex align-items-center justify-content-between gap-15 width-100pct'>
18034
+ <div className='display-flex align-items-center gap-10'>
18035
+ <span className='text-bold'>{group.name}</span>
18036
+ <span className='text-color-dark'>{groupRows.length} departures</span>
18037
+ </div>
18038
+ <TableExpanderButton expanded={isExpanded} onClick={() => toggleGroup(group.id)} />
18039
+ </div>
18040
+ </TableGroupRow>
18041
+
18042
+ {isExpanded &&
18043
+ groupRows.map(row => (
18044
+ <TableExpandedRow
18045
+ key={row.id}
18046
+ parentKey={group.id}
18047
+ selectable={false}
18048
+ className='bg-white'
18049
+ {...row}
18050
+ >
18051
+ <TableColumn columnKey='vehicle'>{row.vehicle}</TableColumn>
18052
+ <TableColumn columnKey='driver'>{row.driver}</TableColumn>
18053
+ <TableColumn columnKey='destination'>{row.destination}</TableColumn>
18054
+ <TableColumn columnKey='departure'>{row.departure}</TableColumn>
18055
+ <TableColumn columnKey='status'>{row.status}</TableColumn>
18056
+ <TableColumn columnKey='actions' />
18057
+ </TableExpandedRow>
18058
+ ))}
18059
+ </Fragment>
18060
+ );
18061
+ })}
18062
+ </TableBody>
18063
+ </Table>
18064
+ );
18065
+ };
18066
+
18067
+ export default TableSelectableGroupRowsExample;
18068
+ ```
18069
+
18070
+ #### HTML (html)
18071
+
18072
+ ```html
18073
+ <div class="table table-view-table table-hover border table-rounded table-has-head" role="table" style="--table-columns: 50px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: &quot;table-selection table-col-1 table-col-2 table-col-3 table-col-4 table-col-5 table-col-6&quot;; --table-column-count: 7; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="7">
18074
+ <div class="table-head" role="rowgroup">
18075
+ <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
18076
+ <div class="table-head-cell table-selection-cell table-align-center table-vertical-align-middle" role="columnheader" aria-colindex="1" aria-rowindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18077
+ <div class="table-selection-control">
18078
+ <label class="checkbox" tabindex="0">
18079
+ <input type="checkbox" class="">
18080
+ <span class="checkbox-text">
18081
+ </span>
18082
+ </label>
18083
+ </div>
18084
+ </div>
18085
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="vehicle" role="columnheader" aria-colindex="2" aria-rowindex="1" style="grid-area: 1 / 2 / span 1 / span 1;">
18086
+ <div class="table-head-cell-content">
18087
+ <div class="table-head-cell-content-row">
18088
+ <span class="table-head-label-wrapper">
18089
+ <span class="table-head-label">Vehicle</span>
18090
+ </span>
18091
+ </div>
18092
+ </div>
18093
+ </div>
18094
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="driver" role="columnheader" aria-colindex="3" aria-rowindex="1" style="grid-area: 1 / 3 / span 1 / span 1;">
18095
+ <div class="table-head-cell-content">
18096
+ <div class="table-head-cell-content-row">
18097
+ <span class="table-head-label-wrapper">
18098
+ <span class="table-head-label">Driver</span>
18099
+ </span>
18100
+ </div>
18101
+ </div>
18102
+ </div>
18103
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="destination" role="columnheader" aria-colindex="4" aria-rowindex="1" style="grid-area: 1 / 4 / span 1 / span 1;">
18104
+ <div class="table-head-cell-content">
18105
+ <div class="table-head-cell-content-row">
18106
+ <span class="table-head-label-wrapper">
18107
+ <span class="table-head-label">Destination</span>
18108
+ </span>
18109
+ </div>
18110
+ </div>
18111
+ </div>
18112
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="departure" role="columnheader" aria-colindex="5" aria-rowindex="1" style="grid-area: 1 / 5 / span 1 / span 1;">
18113
+ <div class="table-head-cell-content">
18114
+ <div class="table-head-cell-content-row">
18115
+ <span class="table-head-label-wrapper">
18116
+ <span class="table-head-label">Departure</span>
18117
+ </span>
18118
+ </div>
18119
+ </div>
18120
+ </div>
18121
+ <div class="table-head-cell table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="status" role="columnheader" aria-colindex="6" aria-rowindex="1" style="grid-area: 1 / 6 / span 1 / span 1;">
18122
+ <div class="table-head-cell-content">
18123
+ <div class="table-head-cell-content-row">
18124
+ <span class="table-head-label-wrapper">
18125
+ <span class="table-head-label">Status</span>
18126
+ </span>
18127
+ </div>
18128
+ </div>
18129
+ </div>
18130
+ <div class="table-head-cell table-align-right table-vertical-align-middle padding-y-0" data-column="actions" role="columnheader" aria-colindex="7" aria-rowindex="1" style="grid-area: 1 / 7 / span 1 / span 1;">
18131
+ <div class="table-head-cell-content">
18132
+ <div class="table-head-cell-content-row">
18133
+ <span class="table-head-label-wrapper">
18134
+ <span class="table-head-label">
18135
+ <button type="button" class="btn btn-muted btn-sm btn-icon-only btn-component table-expand-all-groups-button" tabindex="0">
18136
+ <span class="rioglyph rioglyph-angle-double-down text-size-16">
18137
+ </span>
18138
+ </button>
18139
+ </span>
18140
+ </span>
18141
+ </div>
18142
+ </div>
18143
+ </div>
18144
+ </div>
18145
+ </div>
18146
+ <div class="table-body" role="rowgroup">
18147
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="0" data-row-id="north" role="row">
18148
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18149
+ <div class="table-selection-control">
18150
+ <label class="checkbox" tabindex="0">
18151
+ <input type="checkbox" class="">
18152
+ <span class="checkbox-text">
18153
+ </span>
18154
+ </label>
18155
+ </div>
18156
+ </div>
18157
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18158
+ <div class="table-cell-content">
18159
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18160
+ <div class="display-flex align-items-center gap-10">
18161
+ <span class="text-bold">North region</span>
18162
+ <span class="text-color-dark">5 departures</span>
18163
+ </div>
18164
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button table-expander-button-expanded" tabindex="0">
18165
+ <span class="rioglyph rioglyph-chevron-down">
18166
+ </span>
18167
+ </button>
18168
+ </div>
18169
+ </div>
18170
+ </div>
18171
+ </div>
18172
+ <div id="north-1" class="table-row table-row-expanded-data bg-white" data-index="1" data-row-id="north-1" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
18173
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18174
+ </div>
18175
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
18176
+ <div class="table-cell-content overflow-hidden">N-1041</div>
18177
+ </div>
18178
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
18179
+ <div class="table-cell-content overflow-hidden">Lena Vogt</div>
18180
+ </div>
18181
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="destination" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
18182
+ <div class="table-cell-content overflow-hidden">Hamburg</div>
18183
+ </div>
18184
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="departure" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
18185
+ <div class="table-cell-content overflow-hidden">08:00</div>
18186
+ </div>
18187
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
18188
+ <div class="table-cell-content overflow-hidden">Ready</div>
18189
+ </div>
18190
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
18191
+ <div class="table-cell-content overflow-hidden">
18192
+ </div>
18193
+ </div>
18194
+ </div>
18195
+ <div id="north-2" class="table-row table-row-expanded-data bg-white" data-index="2" data-row-id="north-2" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
18196
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18197
+ </div>
18198
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
18199
+ <div class="table-cell-content overflow-hidden">N-1042</div>
18200
+ </div>
18201
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
18202
+ <div class="table-cell-content overflow-hidden">Milan Weber</div>
18203
+ </div>
18204
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="destination" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
18205
+ <div class="table-cell-content overflow-hidden">Kiel</div>
18206
+ </div>
18207
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="departure" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
18208
+ <div class="table-cell-content overflow-hidden">08:25</div>
18209
+ </div>
18210
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
18211
+ <div class="table-cell-content overflow-hidden">Loading</div>
18212
+ </div>
18213
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
18214
+ <div class="table-cell-content overflow-hidden">
18215
+ </div>
18216
+ </div>
18217
+ </div>
18218
+ <div id="north-3" class="table-row table-row-expanded-data bg-white" data-index="3" data-row-id="north-3" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
18219
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18220
+ </div>
18221
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
18222
+ <div class="table-cell-content overflow-hidden">N-1043</div>
18223
+ </div>
18224
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
18225
+ <div class="table-cell-content overflow-hidden">Eva Kruger</div>
18226
+ </div>
18227
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="destination" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
18228
+ <div class="table-cell-content overflow-hidden">Bremen</div>
18229
+ </div>
18230
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="departure" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
18231
+ <div class="table-cell-content overflow-hidden">08:50</div>
18232
+ </div>
18233
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
18234
+ <div class="table-cell-content overflow-hidden">Ready</div>
18235
+ </div>
18236
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
18237
+ <div class="table-cell-content overflow-hidden">
18238
+ </div>
18239
+ </div>
18240
+ </div>
18241
+ <div id="north-4" class="table-row table-row-expanded-data bg-white" data-index="4" data-row-id="north-4" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
18242
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18243
+ </div>
18244
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
18245
+ <div class="table-cell-content overflow-hidden">N-1044</div>
18246
+ </div>
18247
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
18248
+ <div class="table-cell-content overflow-hidden">Jonas Brandt</div>
18249
+ </div>
18250
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="destination" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
18251
+ <div class="table-cell-content overflow-hidden">Lubeck</div>
18252
+ </div>
18253
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="departure" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
18254
+ <div class="table-cell-content overflow-hidden">09:15</div>
18255
+ </div>
18256
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
18257
+ <div class="table-cell-content overflow-hidden">Delayed</div>
18258
+ </div>
18259
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
18260
+ <div class="table-cell-content overflow-hidden">
18261
+ </div>
18262
+ </div>
18263
+ </div>
18264
+ <div id="north-5" class="table-row table-row-expanded-data bg-white" data-index="5" data-row-id="north-5" role="row" style="overflow: hidden; opacity: 1; height: auto; transform: none;">
18265
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18266
+ </div>
18267
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="vehicle" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
18268
+ <div class="table-cell-content overflow-hidden">N-1045</div>
18269
+ </div>
18270
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="driver" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
18271
+ <div class="table-cell-content overflow-hidden">Nora Seidel</div>
18272
+ </div>
18273
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="destination" role="cell" aria-colindex="4" style="grid-area: 1 / 4 / span 1 / span 1;">
18274
+ <div class="table-cell-content overflow-hidden">Rostock</div>
18275
+ </div>
18276
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="departure" role="cell" aria-colindex="5" style="grid-area: 1 / 5 / span 1 / span 1;">
18277
+ <div class="table-cell-content overflow-hidden">09:40</div>
18278
+ </div>
18279
+ <div class="table-cell table-align-left table-vertical-align-middle" data-column="status" role="cell" aria-colindex="6" style="grid-area: 1 / 6 / span 1 / span 1;">
18280
+ <div class="table-cell-content overflow-hidden">Ready</div>
18281
+ </div>
18282
+ <div class="table-cell table-align-right table-vertical-align-middle" data-column="actions" role="cell" aria-colindex="7" style="grid-area: 1 / 7 / span 1 / span 1;">
18283
+ <div class="table-cell-content overflow-hidden">
18284
+ </div>
18285
+ </div>
18286
+ </div>
18287
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="6" data-row-id="east" role="row">
18288
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18289
+ <div class="table-selection-control">
18290
+ <label class="checkbox" tabindex="0">
18291
+ <input type="checkbox" class="">
18292
+ <span class="checkbox-text">
18293
+ </span>
18294
+ </label>
18295
+ </div>
18296
+ </div>
18297
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18298
+ <div class="table-cell-content">
18299
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18300
+ <div class="display-flex align-items-center gap-10">
18301
+ <span class="text-bold">East region</span>
18302
+ <span class="text-color-dark">6 departures</span>
18303
+ </div>
18304
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
18305
+ <span class="rioglyph rioglyph-chevron-down">
18306
+ </span>
18307
+ </button>
18308
+ </div>
18309
+ </div>
18310
+ </div>
18311
+ </div>
18312
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="7" data-row-id="south" role="row">
18313
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18314
+ <div class="table-selection-control">
18315
+ <label class="checkbox" tabindex="0">
18316
+ <input type="checkbox" class="">
18317
+ <span class="checkbox-text">
18318
+ </span>
18319
+ </label>
18320
+ </div>
18321
+ </div>
18322
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18323
+ <div class="table-cell-content">
18324
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18325
+ <div class="display-flex align-items-center gap-10">
18326
+ <span class="text-bold">South region</span>
18327
+ <span class="text-color-dark">5 departures</span>
18328
+ </div>
18329
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
18330
+ <span class="rioglyph rioglyph-chevron-down">
18331
+ </span>
18332
+ </button>
18333
+ </div>
18334
+ </div>
18335
+ </div>
18336
+ </div>
18337
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="8" data-row-id="west" role="row">
18338
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18339
+ <div class="table-selection-control">
18340
+ <label class="checkbox" tabindex="0">
18341
+ <input type="checkbox" class="">
18342
+ <span class="checkbox-text">
18343
+ </span>
18344
+ </label>
18345
+ </div>
18346
+ </div>
18347
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18348
+ <div class="table-cell-content">
18349
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18350
+ <div class="display-flex align-items-center gap-10">
18351
+ <span class="text-bold">West region</span>
18352
+ <span class="text-color-dark">6 departures</span>
18353
+ </div>
18354
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
18355
+ <span class="rioglyph rioglyph-chevron-down">
18356
+ </span>
18357
+ </button>
18358
+ </div>
18359
+ </div>
18360
+ </div>
18361
+ </div>
18362
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="9" data-row-id="central" role="row">
18363
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18364
+ <div class="table-selection-control">
18365
+ <label class="checkbox" tabindex="0">
18366
+ <input type="checkbox" class="">
18367
+ <span class="checkbox-text">
18368
+ </span>
18369
+ </label>
18370
+ </div>
18371
+ </div>
18372
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18373
+ <div class="table-cell-content">
18374
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18375
+ <div class="display-flex align-items-center gap-10">
18376
+ <span class="text-bold">Central region</span>
18377
+ <span class="text-color-dark">5 departures</span>
18378
+ </div>
18379
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
18380
+ <span class="rioglyph rioglyph-chevron-down">
18381
+ </span>
18382
+ </button>
18383
+ </div>
18384
+ </div>
18385
+ </div>
18386
+ </div>
18387
+ <div class="table-row table-row-group table-row-group-selectable table-row-no-hover" data-index="10" data-row-id="southwest" role="row">
18388
+ <div class="table-cell table-selection-cell table-vertical-align-middle" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
18389
+ <div class="table-selection-control">
18390
+ <label class="checkbox" tabindex="0">
18391
+ <input type="checkbox" class="">
18392
+ <span class="checkbox-text">
18393
+ </span>
18394
+ </label>
18395
+ </div>
18396
+ </div>
18397
+ <div class="table-cell table-group-cell" role="cell" aria-colspan="6">
18398
+ <div class="table-cell-content">
18399
+ <div class="display-flex align-items-center justify-content-between gap-15 width-100pct">
18400
+ <div class="display-flex align-items-center gap-10">
18401
+ <span class="text-bold">Southwest region</span>
18402
+ <span class="text-color-dark">6 departures</span>
18403
+ </div>
18404
+ <button type="button" class="btn btn-muted btn-xs btn-icon-only btn-component table-expander-button" tabindex="0">
18405
+ <span class="rioglyph rioglyph-chevron-down">
18406
+ </span>
18407
+ </button>
18408
+ </div>
18409
+ </div>
18410
+ </div>
18411
+ </div>
18412
+ </div>
18413
+ </div>
18414
+ ```
18415
+
18416
+ #### Props (json)
18417
+
18418
+ ```json
18419
+ rowClassName={(row) => (row.disabled ? 'my-class-name' : '')}
18420
+ ```
18421
+
18422
+ ## Row animation
18423
+
18424
+ ### Example: Example 42
18425
+
18426
+ Remove row Reset table
18427
+
18428
+ Id
18429
+
18430
+ Name
18431
+
18432
+ VIN
18433
+
18434
+ Status
18435
+
18436
+ 1
18437
+
18438
+ Lorem
18439
+
18440
+ 7354
18441
+
18442
+ Active
18443
+
18444
+ 2
18445
+
18446
+ Ipsum
18447
+
18448
+ 456457
18449
+
18450
+ Inactive
18451
+
18452
+ 3
18453
+
18454
+ Dolor
18455
+
18456
+ 895
18457
+
18458
+ Active
18459
+
18460
+ 4
18461
+
18462
+ Sit
18463
+
18464
+ 3456
18465
+
18466
+ Active
18467
+
18468
+ 5
18469
+
18470
+ Amet
18471
+
18472
+ 2445
18473
+
18474
+ Active
18475
+
18476
+ 6
18477
+
18478
+ Consectetur
18479
+
18480
+ 878
18481
+
18482
+ Active
18483
+
18484
+ #### React (tsx)
18485
+
18486
+ ```tsx
18487
+ import { useState } from 'react';
18488
+
18489
+ import Button from '@rio-cloud/rio-uikit/Button';
18490
+ import Table, { TableBody, TableColumn, TableHeader, TableHeaderColumn, TableRow } from '@rio-cloud/rio-uikit/Table';
18491
+ import TableToolbar, { TableToolbarColumn } from '@rio-cloud/rio-uikit/TableToolbar';
18492
+ import useSorting from '@rio-cloud/rio-uikit/useSorting';
18493
+
18494
+ type TableRowAnimationItem = {
18495
+ id: number;
18496
+ name: string;
18497
+ vin: string;
18498
+ status: string;
18499
+ };
18500
+
18501
+ const tableData: TableRowAnimationItem[] = [
18502
+ {
18503
+ id: 1,
18504
+ name: 'Lorem',
18505
+ vin: '7354',
18506
+ status: 'Active',
18507
+ },
18508
+ {
18509
+ id: 2,
18510
+ name: 'Ipsum',
18511
+ vin: '456457',
18512
+ status: 'Inactive',
18513
+ },
18514
+ {
18515
+ id: 3,
18516
+ name: 'Dolor',
18517
+ vin: '895',
18518
+ status: 'Active',
18519
+ },
18520
+ {
18521
+ id: 4,
18522
+ name: 'Sit',
18523
+ vin: '3456',
18524
+ status: 'Active',
18525
+ },
18526
+ {
18527
+ id: 5,
18528
+ name: 'Amet',
18529
+ vin: '2445',
18530
+ status: 'Active',
18531
+ },
18532
+ {
18533
+ id: 6,
18534
+ name: 'Consectetur',
18535
+ vin: '878',
18536
+ status: 'Active',
18537
+ },
18538
+ ];
18539
+
18540
+ const TableRowAnimationExample = () => {
18541
+ const [data, setData] = useState(tableData);
18542
+
18543
+ const { sortedItems, sortKey, sortDirection, setSortKey, setSortDirection } = useSorting(data, 'id');
18544
+
18545
+ const handleRemoveRow = (fatalRow: number) => {
18546
+ setData(previousData => previousData.filter(item => item.id !== fatalRow));
18547
+ };
18548
+
18549
+ const handleReset = () => setData(tableData);
18550
+
18551
+ const handleSortChange = (columnKey: string, direction: 'asc' | 'desc') => {
18552
+ setSortKey(columnKey as keyof TableRowAnimationItem);
18553
+ setSortDirection(direction);
18554
+ };
18555
+
18556
+ return (
18557
+ <div>
18558
+ <TableToolbar disableResponsiveCollapse>
18559
+ <TableToolbarColumn>
18560
+ <div className='btn-toolbar'>
18561
+ <Button bsStyle={Button.PRIMARY} onClick={() => handleRemoveRow(3)}>
18562
+ Remove row
18563
+ </Button>
16803
18564
  <Button onClick={handleReset}>Reset table</Button>
16804
18565
  </div>
16805
18566
  </TableToolbarColumn>
@@ -17738,7 +19499,7 @@ bottom
17738
19499
 
17739
19500
  Table flags
17740
19501
 
17741
- Selection column Virtualized 3rd row sticky
19502
+ Selection column Selection checkbox top aligned Virtualized 3rd row sticky
17742
19503
 
17743
19504
  #### React (tsx)
17744
19505
 
@@ -17785,18 +19546,14 @@ const styleToggles: { key: keyof DemoTableStyle; label: string }[] = [
17785
19546
 
17786
19547
  type DemoTableFlags = {
17787
19548
  showSelectionColumn: boolean;
19549
+ selectionCheckboxVerticalAlignmentTop: boolean;
17788
19550
  virtualizedRows: boolean;
17789
19551
  stickyThirdRow: boolean;
17790
19552
  };
17791
19553
 
17792
- const flagToggles: { key: keyof DemoTableFlags; label: string }[] = [
17793
- { key: 'showSelectionColumn', label: 'Selection column' },
17794
- { key: 'virtualizedRows', label: 'Virtualized' },
17795
- { key: 'stickyThirdRow', label: '3rd row sticky' },
17796
- ];
17797
-
17798
19554
  const defaultTableFlags: DemoTableFlags = {
17799
19555
  showSelectionColumn: false,
19556
+ selectionCheckboxVerticalAlignmentTop: false,
17800
19557
  virtualizedRows: false,
17801
19558
  stickyThirdRow: false,
17802
19559
  };
@@ -17899,6 +19656,17 @@ const TableWithSettingsExample = () => {
17899
19656
  setColumns(demoTableColumnsForComponents.map(column => ({ ...column })));
17900
19657
  };
17901
19658
 
19659
+ const flagToggles: { key: keyof DemoTableFlags; label: string; disabled?: boolean }[] = [
19660
+ { key: 'showSelectionColumn', label: 'Selection column' },
19661
+ {
19662
+ key: 'selectionCheckboxVerticalAlignmentTop',
19663
+ label: 'Selection checkbox top aligned',
19664
+ disabled: !tableFlags.showSelectionColumn,
19665
+ },
19666
+ { key: 'virtualizedRows', label: 'Virtualized' },
19667
+ { key: 'stickyThirdRow', label: '3rd row sticky' },
19668
+ ];
19669
+
17902
19670
  const cardSortingSelectOptions = sortableColumns.map(column => ({
17903
19671
  id: column.key,
17904
19672
  label: column.label,
@@ -17969,6 +19737,7 @@ const TableWithSettingsExample = () => {
17969
19737
  cardsStyle={demoTableCardsStyle}
17970
19738
  {...tableStyle}
17971
19739
  showSelectionColumn={tableFlags.showSelectionColumn}
19740
+ selectionCheckboxVerticalAlignment={tableFlags.selectionCheckboxVerticalAlignmentTop ? 'top' : 'middle'}
17972
19741
  virtualizedRows={isTableView && tableFlags.virtualizedRows}
17973
19742
  sortBy={String(displayedSortKey)}
17974
19743
  sortDirection={sortDirection}
@@ -17987,7 +19756,6 @@ const TableWithSettingsExample = () => {
17987
19756
  sortable={column.sortable}
17988
19757
  draggable={column.draggable}
17989
19758
  icon={column.icon}
17990
- verticalAlign={column.verticalAlign}
17991
19759
  resizeable
17992
19760
  minResizeWidth={100}
17993
19761
  maxResizeWidth={500}
@@ -18012,6 +19780,7 @@ const TableWithSettingsExample = () => {
18012
19780
  key={column.key}
18013
19781
  columnKey={column.key}
18014
19782
  horizontalAlign={column.horizontalAlign}
19783
+ verticalAlign={column.verticalAlign}
18015
19784
  >
18016
19785
  <div className='max-width-100'>
18017
19786
  <LicensePlate>{row.licensePlate}</LicensePlate>
@@ -18026,6 +19795,7 @@ const TableWithSettingsExample = () => {
18026
19795
  key={column.key}
18027
19796
  columnKey={column.key}
18028
19797
  horizontalAlign={column.horizontalAlign}
19798
+ verticalAlign={column.verticalAlign}
18029
19799
  >
18030
19800
  <div className='margin-bottom-3'>{row.route.name}</div>
18031
19801
  <div>
@@ -18042,6 +19812,7 @@ const TableWithSettingsExample = () => {
18042
19812
  key={column.key}
18043
19813
  columnKey={column.key}
18044
19814
  horizontalAlign={column.horizontalAlign}
19815
+ verticalAlign={column.verticalAlign}
18045
19816
  >
18046
19817
  <div>{row.cargo}</div>
18047
19818
  </TableColumn>
@@ -18232,7 +20003,7 @@ export default TableWithSettingsExample;
18232
20003
  </div>
18233
20004
  </div>
18234
20005
  <div class="dropdown btn-group">
18235
- <button type="button" id="6gvfcn35zvi" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
20006
+ <button type="button" id="k4fkypb9c6p" class="btn btn-default btn-md btn-component dropdown-toggle" tabindex="0">
18236
20007
  <span class="display-inline-flex align-items-center gap-5">
18237
20008
  <span class="rioglyph rioglyph-table-view">
18238
20009
  </span>
@@ -18248,7 +20019,7 @@ export default TableWithSettingsExample;
18248
20019
  <div class="table table-view-table shadow-default border table-rounded table-has-head table-has-footer" role="table" style="--table-columns: minmax(0, 180px) minmax(0, 280px) minmax(50px, 1fr); --table-areas: &quot;table-col-1 table-col-2 table-col-3&quot;; --table-cards-min: 280px; --table-cards-max: 380px; --table-column-count: 3; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="3">
18249
20020
  <div class="table-head" role="rowgroup">
18250
20021
  <div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
18251
- <div class="table-head-cell table-head-cell-sortable table-head-cell-draggable table-head-cell-resizable table-head-cell-has-column-divider table-align-left table-vertical-align-top" data-column="licensePlate" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-sort="ascending" style="grid-area: 1 / 1 / span 1 / span 1; transition: transform linear;">
20022
+ <div class="table-head-cell table-head-cell-sortable table-head-cell-draggable table-head-cell-resizable table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="licensePlate" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-sort="ascending" style="grid-area: 1 / 1 / span 1 / span 1; transition: transform linear;">
18252
20023
  <div class="table-head-cell-content">
18253
20024
  <div class="table-head-cell-content-row">
18254
20025
  <button type="button" class="table-head-button">
@@ -18263,7 +20034,7 @@ export default TableWithSettingsExample;
18263
20034
  <div class="table-column-resize-handle">
18264
20035
  </div>
18265
20036
  </div>
18266
- <div class="table-head-cell table-head-cell-sortable table-head-cell-draggable table-head-cell-resizable table-head-cell-has-column-divider table-align-left table-vertical-align-top" data-column="route" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-sort="none" style="grid-area: 1 / 2 / span 1 / span 1; transition: transform linear;">
20037
+ <div class="table-head-cell table-head-cell-sortable table-head-cell-draggable table-head-cell-resizable table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="route" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-sort="none" style="grid-area: 1 / 2 / span 1 / span 1; transition: transform linear;">
18267
20038
  <div class="table-head-cell-content">
18268
20039
  <div class="table-head-cell-content-row">
18269
20040
  <button type="button" class="table-head-button">
@@ -18278,12 +20049,12 @@ export default TableWithSettingsExample;
18278
20049
  <div class="table-column-resize-handle">
18279
20050
  </div>
18280
20051
  </div>
18281
- <div class="table-head-cell table-head-cell-draggable table-align-left table-vertical-align-top" data-column="cargo" role="columnheader" aria-colindex="3" aria-rowindex="1" style="grid-area: 1 / 3 / span 1 / span 1; transition: transform linear;">
20052
+ <div class="table-head-cell table-head-cell-draggable table-align-left table-vertical-align-middle" data-column="cargo" role="columnheader" aria-colindex="3" aria-rowindex="1" style="grid-area: 1 / 3 / span 1 / span 1; transition: transform linear;">
18282
20053
  <div class="table-head-cell-content">
18283
20054
  <div class="table-head-cell-content-row">
18284
20055
  <span class="table-head-label-wrapper table-head-drag-label" tabindex="0" aria-disabled="false" aria-roledescription="sortable" aria-describedby="DndDescribedBy-7">
18285
20056
  <span class="table-head-label">
18286
- <span class="display-inline-flex align-items-center gap-5">
20057
+ <span class="display-flex align-items-center gap-5">
18287
20058
  <span class="text-color-dark rioglyph rioglyph-comment">
18288
20059
  </span>
18289
20060
  <span>Comment</span>
@@ -19130,10 +20901,10 @@ export default TableWithSettingsExample;
19130
20901
  </div>
19131
20902
  <div class="table-footer" role="rowgroup">
19132
20903
  <div class="table-row table-row-footer" role="row">
19133
- <div class="table-cell table-footer-cell table-align-left table-vertical-align-top" data-column="licensePlate" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
20904
+ <div class="table-cell table-footer-cell table-align-left table-vertical-align-middle" data-column="licensePlate" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
19134
20905
  <div class="table-cell-content overflow-hidden">Trucks: 30</div>
19135
20906
  </div>
19136
- <div class="table-cell table-footer-cell table-align-left table-vertical-align-top" data-column="route" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
20907
+ <div class="table-cell table-footer-cell table-align-left table-vertical-align-middle" data-column="route" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
19137
20908
  <div class="table-cell-content overflow-hidden">Total: 17490 km</div>
19138
20909
  </div>
19139
20910
  </div>
@@ -19557,6 +21328,12 @@ export default TableWithSettingsExample;
19557
21328
  <span>Selection column</span>
19558
21329
  </span>
19559
21330
  </label>
21331
+ <label class="checkbox disabled" tabindex="0">
21332
+ <input type="checkbox" disabled="" class="">
21333
+ <span class="checkbox-text">
21334
+ <span>Selection checkbox top aligned</span>
21335
+ </span>
21336
+ </label>
19560
21337
  <label class="checkbox" tabindex="0">
19561
21338
  <input type="checkbox" class="">
19562
21339
  <span class="checkbox-text">