@fluentui/react-table 9.0.4 → 9.1.0

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 (316) hide show
  1. package/CHANGELOG.json +96 -1
  2. package/CHANGELOG.md +21 -2
  3. package/README.md +552 -2
  4. package/Spec.md +475 -33
  5. package/dist/index.d.ts +3 -3
  6. package/lib/components/DataGrid/DataGrid.js +5 -0
  7. package/lib/components/DataGrid/DataGrid.js.map +1 -1
  8. package/lib/components/DataGrid/renderDataGrid.js.map +1 -1
  9. package/lib/components/DataGrid/useDataGrid.js +32 -4
  10. package/lib/components/DataGrid/useDataGrid.js.map +1 -1
  11. package/lib/components/DataGrid/useDataGridContextValues.js.map +1 -1
  12. package/lib/components/DataGrid/useDataGridStyles.js.map +1 -1
  13. package/lib/components/DataGridBody/DataGridBody.js +5 -0
  14. package/lib/components/DataGridBody/DataGridBody.js.map +1 -1
  15. package/lib/components/DataGridBody/renderDataGridBody.js.map +1 -1
  16. package/lib/components/DataGridBody/useDataGridBody.js.map +1 -1
  17. package/lib/components/DataGridBody/useDataGridBodyStyles.js.map +1 -1
  18. package/lib/components/DataGridCell/DataGridCell.js +5 -0
  19. package/lib/components/DataGridCell/DataGridCell.js.map +1 -1
  20. package/lib/components/DataGridCell/renderDataGridCell.js.map +1 -1
  21. package/lib/components/DataGridCell/useDataGridCell.js.map +1 -1
  22. package/lib/components/DataGridCell/useDataGridCellStyles.js.map +1 -1
  23. package/lib/components/DataGridHeader/DataGridHeader.js +5 -0
  24. package/lib/components/DataGridHeader/DataGridHeader.js.map +1 -1
  25. package/lib/components/DataGridHeader/renderDataGridHeader.js.map +1 -1
  26. package/lib/components/DataGridHeader/useDataGridHeader.js.map +1 -1
  27. package/lib/components/DataGridHeader/useDataGridHeaderStyles.js.map +1 -1
  28. package/lib/components/DataGridHeaderCell/DataGridHeaderCell.js +5 -0
  29. package/lib/components/DataGridHeaderCell/DataGridHeaderCell.js.map +1 -1
  30. package/lib/components/DataGridHeaderCell/renderDataGridHeaderCell.js.map +1 -1
  31. package/lib/components/DataGridHeaderCell/useDataGridHeaderCell.js.map +1 -1
  32. package/lib/components/DataGridHeaderCell/useDataGridHeaderCellStyles.js.map +1 -1
  33. package/lib/components/DataGridRow/DataGridRow.js +5 -0
  34. package/lib/components/DataGridRow/DataGridRow.js.map +1 -1
  35. package/lib/components/DataGridRow/renderDataGridRow.js.map +1 -1
  36. package/lib/components/DataGridRow/useDataGridRow.js.map +1 -1
  37. package/lib/components/DataGridRow/useDataGridRowStyles.js.map +1 -1
  38. package/lib/components/DataGridSelectionCell/DataGridSelectionCell.js +5 -0
  39. package/lib/components/DataGridSelectionCell/DataGridSelectionCell.js.map +1 -1
  40. package/lib/components/DataGridSelectionCell/renderDataGridSelectionCell.js.map +1 -1
  41. package/lib/components/DataGridSelectionCell/useDataGridSelectionCell.js.map +1 -1
  42. package/lib/components/DataGridSelectionCell/useDataGridSelectionCellStyles.js.map +1 -1
  43. package/lib/components/Table/Table.js +5 -0
  44. package/lib/components/Table/Table.js.map +1 -1
  45. package/lib/components/Table/renderTable.js.map +1 -1
  46. package/lib/components/Table/useTable.js.map +1 -1
  47. package/lib/components/Table/useTableContextValues.js.map +1 -1
  48. package/lib/components/Table/useTableStyles.js.map +1 -1
  49. package/lib/components/TableBody/TableBody.js +5 -0
  50. package/lib/components/TableBody/TableBody.js.map +1 -1
  51. package/lib/components/TableBody/renderTableBody.js.map +1 -1
  52. package/lib/components/TableBody/useTableBody.js.map +1 -1
  53. package/lib/components/TableBody/useTableBodyStyles.js.map +1 -1
  54. package/lib/components/TableCell/TableCell.js +5 -0
  55. package/lib/components/TableCell/TableCell.js.map +1 -1
  56. package/lib/components/TableCell/renderTableCell.js.map +1 -1
  57. package/lib/components/TableCell/useTableCell.js.map +1 -1
  58. package/lib/components/TableCell/useTableCellStyles.js.map +1 -1
  59. package/lib/components/TableCellActions/TableCellActions.js +5 -0
  60. package/lib/components/TableCellActions/TableCellActions.js.map +1 -1
  61. package/lib/components/TableCellActions/renderTableCellActions.js.map +1 -1
  62. package/lib/components/TableCellActions/useTableCellActions.js.map +1 -1
  63. package/lib/components/TableCellActions/useTableCellActionsStyles.js.map +1 -1
  64. package/lib/components/TableCellLayout/TableCellLayout.js +5 -0
  65. package/lib/components/TableCellLayout/TableCellLayout.js.map +1 -1
  66. package/lib/components/TableCellLayout/renderTableCellLayout.js.map +1 -1
  67. package/lib/components/TableCellLayout/useTableCellLayout.js.map +1 -1
  68. package/lib/components/TableCellLayout/useTableCellLayoutContextValues.js.map +1 -1
  69. package/lib/components/TableCellLayout/useTableCellLayoutStyles.js.map +1 -1
  70. package/lib/components/TableHeader/TableHeader.js +5 -0
  71. package/lib/components/TableHeader/TableHeader.js.map +1 -1
  72. package/lib/components/TableHeader/renderTableHeader.js.map +1 -1
  73. package/lib/components/TableHeader/useTableHeader.js.map +1 -1
  74. package/lib/components/TableHeader/useTableHeaderStyles.js.map +1 -1
  75. package/lib/components/TableHeaderCell/TableHeaderCell.js +5 -0
  76. package/lib/components/TableHeaderCell/TableHeaderCell.js.map +1 -1
  77. package/lib/components/TableHeaderCell/renderTableHeaderCell.js.map +1 -1
  78. package/lib/components/TableHeaderCell/useTableHeaderCell.js.map +1 -1
  79. package/lib/components/TableHeaderCell/useTableHeaderCellStyles.js.map +1 -1
  80. package/lib/components/TableResizeHandle/TableResizeHandle.js +5 -0
  81. package/lib/components/TableResizeHandle/TableResizeHandle.js.map +1 -1
  82. package/lib/components/TableResizeHandle/renderTableResizeHandle.js.map +1 -1
  83. package/lib/components/TableResizeHandle/useTableResizeHandle.js.map +1 -1
  84. package/lib/components/TableResizeHandle/useTableResizeHandleStyles.js.map +1 -1
  85. package/lib/components/TableRow/TableRow.js +5 -0
  86. package/lib/components/TableRow/TableRow.js.map +1 -1
  87. package/lib/components/TableRow/renderTableRow.js.map +1 -1
  88. package/lib/components/TableRow/useTableRow.js.map +1 -1
  89. package/lib/components/TableRow/useTableRowStyles.js.map +1 -1
  90. package/lib/components/TableSelectionCell/TableSelectionCell.js +5 -0
  91. package/lib/components/TableSelectionCell/TableSelectionCell.js.map +1 -1
  92. package/lib/components/TableSelectionCell/renderTableSelectionCell.js.map +1 -1
  93. package/lib/components/TableSelectionCell/useTableSelectionCell.js.map +1 -1
  94. package/lib/components/TableSelectionCell/useTableSelectionCellStyles.js.map +1 -1
  95. package/lib/contexts/columnIdContext.js.map +1 -1
  96. package/lib/contexts/dataGridContext.js.map +1 -1
  97. package/lib/contexts/rowIdContext.js.map +1 -1
  98. package/lib/contexts/tableContext.js.map +1 -1
  99. package/lib/contexts/tableHeaderContext.js.map +1 -1
  100. package/lib/hooks/createColumn.js.map +1 -1
  101. package/lib/hooks/selectionManager.js.map +1 -1
  102. package/lib/hooks/types.js.map +1 -1
  103. package/lib/hooks/useMeasureElement.js.map +1 -1
  104. package/lib/hooks/useTableColumnResizeMouseHandler.js.map +1 -1
  105. package/lib/hooks/useTableColumnResizeState.js.map +1 -1
  106. package/lib/hooks/useTableColumnSizing.js.map +1 -1
  107. package/lib/hooks/useTableFeatures.js.map +1 -1
  108. package/lib/hooks/useTableSelection.js +8 -2
  109. package/lib/hooks/useTableSelection.js.map +1 -1
  110. package/lib/hooks/useTableSort.js.map +1 -1
  111. package/lib/index.js.map +1 -1
  112. package/lib/utils/columnResizeUtils.js.map +1 -1
  113. package/lib-amd/components/DataGrid/DataGrid.js +3 -1
  114. package/lib-amd/components/DataGrid/DataGrid.js.map +1 -1
  115. package/lib-amd/components/DataGrid/useDataGrid.js +24 -2
  116. package/lib-amd/components/DataGrid/useDataGrid.js.map +1 -1
  117. package/lib-amd/components/DataGridBody/DataGridBody.js +3 -1
  118. package/lib-amd/components/DataGridBody/DataGridBody.js.map +1 -1
  119. package/lib-amd/components/DataGridCell/DataGridCell.js +3 -1
  120. package/lib-amd/components/DataGridCell/DataGridCell.js.map +1 -1
  121. package/lib-amd/components/DataGridHeader/DataGridHeader.js +3 -1
  122. package/lib-amd/components/DataGridHeader/DataGridHeader.js.map +1 -1
  123. package/lib-amd/components/DataGridHeaderCell/DataGridHeaderCell.js +3 -1
  124. package/lib-amd/components/DataGridHeaderCell/DataGridHeaderCell.js.map +1 -1
  125. package/lib-amd/components/DataGridRow/DataGridRow.js +3 -1
  126. package/lib-amd/components/DataGridRow/DataGridRow.js.map +1 -1
  127. package/lib-amd/components/DataGridSelectionCell/DataGridSelectionCell.js +3 -1
  128. package/lib-amd/components/DataGridSelectionCell/DataGridSelectionCell.js.map +1 -1
  129. package/lib-amd/components/Table/Table.js +3 -1
  130. package/lib-amd/components/Table/Table.js.map +1 -1
  131. package/lib-amd/components/TableBody/TableBody.js +3 -1
  132. package/lib-amd/components/TableBody/TableBody.js.map +1 -1
  133. package/lib-amd/components/TableCell/TableCell.js +3 -1
  134. package/lib-amd/components/TableCell/TableCell.js.map +1 -1
  135. package/lib-amd/components/TableCellActions/TableCellActions.js +3 -1
  136. package/lib-amd/components/TableCellActions/TableCellActions.js.map +1 -1
  137. package/lib-amd/components/TableCellLayout/TableCellLayout.js +3 -1
  138. package/lib-amd/components/TableCellLayout/TableCellLayout.js.map +1 -1
  139. package/lib-amd/components/TableHeader/TableHeader.js +3 -1
  140. package/lib-amd/components/TableHeader/TableHeader.js.map +1 -1
  141. package/lib-amd/components/TableHeaderCell/TableHeaderCell.js +3 -1
  142. package/lib-amd/components/TableHeaderCell/TableHeaderCell.js.map +1 -1
  143. package/lib-amd/components/TableResizeHandle/TableResizeHandle.js +3 -1
  144. package/lib-amd/components/TableResizeHandle/TableResizeHandle.js.map +1 -1
  145. package/lib-amd/components/TableRow/TableRow.js +3 -1
  146. package/lib-amd/components/TableRow/TableRow.js.map +1 -1
  147. package/lib-amd/components/TableSelectionCell/TableSelectionCell.js +3 -1
  148. package/lib-amd/components/TableSelectionCell/TableSelectionCell.js.map +1 -1
  149. package/lib-amd/hooks/types.js.map +1 -1
  150. package/lib-amd/hooks/useTableColumnResizeState.js +29 -27
  151. package/lib-amd/hooks/useTableColumnResizeState.js.map +1 -1
  152. package/lib-amd/hooks/useTableSelection.js +8 -2
  153. package/lib-amd/hooks/useTableSelection.js.map +1 -1
  154. package/lib-amd/index.js.map +1 -1
  155. package/lib-amd/utils/columnResizeUtils.js.map +1 -1
  156. package/lib-commonjs/DataGrid.js.map +1 -1
  157. package/lib-commonjs/DataGridBody.js.map +1 -1
  158. package/lib-commonjs/DataGridCell.js.map +1 -1
  159. package/lib-commonjs/DataGridHeader.js.map +1 -1
  160. package/lib-commonjs/DataGridHeaderCell.js.map +1 -1
  161. package/lib-commonjs/DataGridRow.js.map +1 -1
  162. package/lib-commonjs/DataGridSelectionCell.js.map +1 -1
  163. package/lib-commonjs/Table.js.map +1 -1
  164. package/lib-commonjs/TableBody.js.map +1 -1
  165. package/lib-commonjs/TableCell.js.map +1 -1
  166. package/lib-commonjs/TableCellActions.js.map +1 -1
  167. package/lib-commonjs/TableCellLayout.js.map +1 -1
  168. package/lib-commonjs/TableCellPrimaryLayout.js.map +1 -1
  169. package/lib-commonjs/TableHeader.js.map +1 -1
  170. package/lib-commonjs/TableHeaderCell.js.map +1 -1
  171. package/lib-commonjs/TableResizeHandle.js.map +1 -1
  172. package/lib-commonjs/TableRow.js.map +1 -1
  173. package/lib-commonjs/TableSelectionCell.js.map +1 -1
  174. package/lib-commonjs/components/DataGrid/DataGrid.js +5 -0
  175. package/lib-commonjs/components/DataGrid/DataGrid.js.map +1 -1
  176. package/lib-commonjs/components/DataGrid/DataGrid.types.js.map +1 -1
  177. package/lib-commonjs/components/DataGrid/index.js.map +1 -1
  178. package/lib-commonjs/components/DataGrid/renderDataGrid.js.map +1 -1
  179. package/lib-commonjs/components/DataGrid/useDataGrid.js +30 -2
  180. package/lib-commonjs/components/DataGrid/useDataGrid.js.map +1 -1
  181. package/lib-commonjs/components/DataGrid/useDataGridContextValues.js.map +1 -1
  182. package/lib-commonjs/components/DataGrid/useDataGridStyles.js.map +1 -1
  183. package/lib-commonjs/components/DataGridBody/DataGridBody.js +5 -0
  184. package/lib-commonjs/components/DataGridBody/DataGridBody.js.map +1 -1
  185. package/lib-commonjs/components/DataGridBody/DataGridBody.types.js.map +1 -1
  186. package/lib-commonjs/components/DataGridBody/index.js.map +1 -1
  187. package/lib-commonjs/components/DataGridBody/renderDataGridBody.js.map +1 -1
  188. package/lib-commonjs/components/DataGridBody/useDataGridBody.js.map +1 -1
  189. package/lib-commonjs/components/DataGridBody/useDataGridBodyStyles.js.map +1 -1
  190. package/lib-commonjs/components/DataGridCell/DataGridCell.js +5 -0
  191. package/lib-commonjs/components/DataGridCell/DataGridCell.js.map +1 -1
  192. package/lib-commonjs/components/DataGridCell/DataGridCell.types.js.map +1 -1
  193. package/lib-commonjs/components/DataGridCell/index.js.map +1 -1
  194. package/lib-commonjs/components/DataGridCell/renderDataGridCell.js.map +1 -1
  195. package/lib-commonjs/components/DataGridCell/useDataGridCell.js.map +1 -1
  196. package/lib-commonjs/components/DataGridCell/useDataGridCellStyles.js.map +1 -1
  197. package/lib-commonjs/components/DataGridHeader/DataGridHeader.js +5 -0
  198. package/lib-commonjs/components/DataGridHeader/DataGridHeader.js.map +1 -1
  199. package/lib-commonjs/components/DataGridHeader/DataGridHeader.types.js.map +1 -1
  200. package/lib-commonjs/components/DataGridHeader/index.js.map +1 -1
  201. package/lib-commonjs/components/DataGridHeader/renderDataGridHeader.js.map +1 -1
  202. package/lib-commonjs/components/DataGridHeader/useDataGridHeader.js.map +1 -1
  203. package/lib-commonjs/components/DataGridHeader/useDataGridHeaderStyles.js.map +1 -1
  204. package/lib-commonjs/components/DataGridHeaderCell/DataGridHeaderCell.js +5 -0
  205. package/lib-commonjs/components/DataGridHeaderCell/DataGridHeaderCell.js.map +1 -1
  206. package/lib-commonjs/components/DataGridHeaderCell/DataGridHeaderCell.types.js.map +1 -1
  207. package/lib-commonjs/components/DataGridHeaderCell/index.js.map +1 -1
  208. package/lib-commonjs/components/DataGridHeaderCell/renderDataGridHeaderCell.js.map +1 -1
  209. package/lib-commonjs/components/DataGridHeaderCell/useDataGridHeaderCell.js.map +1 -1
  210. package/lib-commonjs/components/DataGridHeaderCell/useDataGridHeaderCellStyles.js.map +1 -1
  211. package/lib-commonjs/components/DataGridRow/DataGridRow.js +5 -0
  212. package/lib-commonjs/components/DataGridRow/DataGridRow.js.map +1 -1
  213. package/lib-commonjs/components/DataGridRow/DataGridRow.types.js.map +1 -1
  214. package/lib-commonjs/components/DataGridRow/index.js.map +1 -1
  215. package/lib-commonjs/components/DataGridRow/renderDataGridRow.js.map +1 -1
  216. package/lib-commonjs/components/DataGridRow/useDataGridRow.js.map +1 -1
  217. package/lib-commonjs/components/DataGridRow/useDataGridRowStyles.js.map +1 -1
  218. package/lib-commonjs/components/DataGridSelectionCell/DataGridSelectionCell.js +5 -0
  219. package/lib-commonjs/components/DataGridSelectionCell/DataGridSelectionCell.js.map +1 -1
  220. package/lib-commonjs/components/DataGridSelectionCell/DataGridSelectionCell.types.js.map +1 -1
  221. package/lib-commonjs/components/DataGridSelectionCell/index.js.map +1 -1
  222. package/lib-commonjs/components/DataGridSelectionCell/renderDataGridSelectionCell.js.map +1 -1
  223. package/lib-commonjs/components/DataGridSelectionCell/useDataGridSelectionCell.js.map +1 -1
  224. package/lib-commonjs/components/DataGridSelectionCell/useDataGridSelectionCellStyles.js.map +1 -1
  225. package/lib-commonjs/components/Table/Table.js +5 -0
  226. package/lib-commonjs/components/Table/Table.js.map +1 -1
  227. package/lib-commonjs/components/Table/Table.types.js.map +1 -1
  228. package/lib-commonjs/components/Table/index.js.map +1 -1
  229. package/lib-commonjs/components/Table/renderTable.js.map +1 -1
  230. package/lib-commonjs/components/Table/useTable.js.map +1 -1
  231. package/lib-commonjs/components/Table/useTableContextValues.js.map +1 -1
  232. package/lib-commonjs/components/Table/useTableStyles.js.map +1 -1
  233. package/lib-commonjs/components/TableBody/TableBody.js +5 -0
  234. package/lib-commonjs/components/TableBody/TableBody.js.map +1 -1
  235. package/lib-commonjs/components/TableBody/TableBody.types.js.map +1 -1
  236. package/lib-commonjs/components/TableBody/index.js.map +1 -1
  237. package/lib-commonjs/components/TableBody/renderTableBody.js.map +1 -1
  238. package/lib-commonjs/components/TableBody/useTableBody.js.map +1 -1
  239. package/lib-commonjs/components/TableBody/useTableBodyStyles.js.map +1 -1
  240. package/lib-commonjs/components/TableCell/TableCell.js +5 -0
  241. package/lib-commonjs/components/TableCell/TableCell.js.map +1 -1
  242. package/lib-commonjs/components/TableCell/TableCell.types.js.map +1 -1
  243. package/lib-commonjs/components/TableCell/index.js.map +1 -1
  244. package/lib-commonjs/components/TableCell/renderTableCell.js.map +1 -1
  245. package/lib-commonjs/components/TableCell/useTableCell.js.map +1 -1
  246. package/lib-commonjs/components/TableCell/useTableCellStyles.js.map +1 -1
  247. package/lib-commonjs/components/TableCellActions/TableCellActions.js +5 -0
  248. package/lib-commonjs/components/TableCellActions/TableCellActions.js.map +1 -1
  249. package/lib-commonjs/components/TableCellActions/TableCellActions.types.js.map +1 -1
  250. package/lib-commonjs/components/TableCellActions/index.js.map +1 -1
  251. package/lib-commonjs/components/TableCellActions/renderTableCellActions.js.map +1 -1
  252. package/lib-commonjs/components/TableCellActions/useTableCellActions.js.map +1 -1
  253. package/lib-commonjs/components/TableCellActions/useTableCellActionsStyles.js.map +1 -1
  254. package/lib-commonjs/components/TableCellLayout/TableCellLayout.js +5 -0
  255. package/lib-commonjs/components/TableCellLayout/TableCellLayout.js.map +1 -1
  256. package/lib-commonjs/components/TableCellLayout/TableCellLayout.types.js.map +1 -1
  257. package/lib-commonjs/components/TableCellLayout/index.js.map +1 -1
  258. package/lib-commonjs/components/TableCellLayout/renderTableCellLayout.js.map +1 -1
  259. package/lib-commonjs/components/TableCellLayout/useTableCellLayout.js.map +1 -1
  260. package/lib-commonjs/components/TableCellLayout/useTableCellLayoutContextValues.js.map +1 -1
  261. package/lib-commonjs/components/TableCellLayout/useTableCellLayoutStyles.js.map +1 -1
  262. package/lib-commonjs/components/TableHeader/TableHeader.js +5 -0
  263. package/lib-commonjs/components/TableHeader/TableHeader.js.map +1 -1
  264. package/lib-commonjs/components/TableHeader/TableHeader.types.js.map +1 -1
  265. package/lib-commonjs/components/TableHeader/index.js.map +1 -1
  266. package/lib-commonjs/components/TableHeader/renderTableHeader.js.map +1 -1
  267. package/lib-commonjs/components/TableHeader/useTableHeader.js.map +1 -1
  268. package/lib-commonjs/components/TableHeader/useTableHeaderStyles.js.map +1 -1
  269. package/lib-commonjs/components/TableHeaderCell/TableHeaderCell.js +5 -0
  270. package/lib-commonjs/components/TableHeaderCell/TableHeaderCell.js.map +1 -1
  271. package/lib-commonjs/components/TableHeaderCell/TableHeaderCell.types.js.map +1 -1
  272. package/lib-commonjs/components/TableHeaderCell/index.js.map +1 -1
  273. package/lib-commonjs/components/TableHeaderCell/renderTableHeaderCell.js.map +1 -1
  274. package/lib-commonjs/components/TableHeaderCell/useTableHeaderCell.js.map +1 -1
  275. package/lib-commonjs/components/TableHeaderCell/useTableHeaderCellStyles.js.map +1 -1
  276. package/lib-commonjs/components/TableResizeHandle/TableResizeHandle.js +5 -0
  277. package/lib-commonjs/components/TableResizeHandle/TableResizeHandle.js.map +1 -1
  278. package/lib-commonjs/components/TableResizeHandle/TableResizeHandle.types.js.map +1 -1
  279. package/lib-commonjs/components/TableResizeHandle/index.js.map +1 -1
  280. package/lib-commonjs/components/TableResizeHandle/renderTableResizeHandle.js.map +1 -1
  281. package/lib-commonjs/components/TableResizeHandle/useTableResizeHandle.js.map +1 -1
  282. package/lib-commonjs/components/TableResizeHandle/useTableResizeHandleStyles.js.map +1 -1
  283. package/lib-commonjs/components/TableRow/TableRow.js +5 -0
  284. package/lib-commonjs/components/TableRow/TableRow.js.map +1 -1
  285. package/lib-commonjs/components/TableRow/TableRow.types.js.map +1 -1
  286. package/lib-commonjs/components/TableRow/index.js.map +1 -1
  287. package/lib-commonjs/components/TableRow/renderTableRow.js.map +1 -1
  288. package/lib-commonjs/components/TableRow/useTableRow.js.map +1 -1
  289. package/lib-commonjs/components/TableRow/useTableRowStyles.js.map +1 -1
  290. package/lib-commonjs/components/TableSelectionCell/TableSelectionCell.js +5 -0
  291. package/lib-commonjs/components/TableSelectionCell/TableSelectionCell.js.map +1 -1
  292. package/lib-commonjs/components/TableSelectionCell/TableSelectionCell.types.js.map +1 -1
  293. package/lib-commonjs/components/TableSelectionCell/index.js.map +1 -1
  294. package/lib-commonjs/components/TableSelectionCell/renderTableSelectionCell.js.map +1 -1
  295. package/lib-commonjs/components/TableSelectionCell/useTableSelectionCell.js.map +1 -1
  296. package/lib-commonjs/components/TableSelectionCell/useTableSelectionCellStyles.js.map +1 -1
  297. package/lib-commonjs/contexts/columnIdContext.js.map +1 -1
  298. package/lib-commonjs/contexts/dataGridContext.js.map +1 -1
  299. package/lib-commonjs/contexts/rowIdContext.js.map +1 -1
  300. package/lib-commonjs/contexts/tableContext.js.map +1 -1
  301. package/lib-commonjs/contexts/tableHeaderContext.js.map +1 -1
  302. package/lib-commonjs/hooks/createColumn.js.map +1 -1
  303. package/lib-commonjs/hooks/index.js.map +1 -1
  304. package/lib-commonjs/hooks/selectionManager.js.map +1 -1
  305. package/lib-commonjs/hooks/types.js.map +1 -1
  306. package/lib-commonjs/hooks/useMeasureElement.js.map +1 -1
  307. package/lib-commonjs/hooks/useTableColumnResizeMouseHandler.js.map +1 -1
  308. package/lib-commonjs/hooks/useTableColumnResizeState.js.map +1 -1
  309. package/lib-commonjs/hooks/useTableColumnSizing.js.map +1 -1
  310. package/lib-commonjs/hooks/useTableFeatures.js.map +1 -1
  311. package/lib-commonjs/hooks/useTableSelection.js +8 -2
  312. package/lib-commonjs/hooks/useTableSelection.js.map +1 -1
  313. package/lib-commonjs/hooks/useTableSort.js.map +1 -1
  314. package/lib-commonjs/index.js.map +1 -1
  315. package/lib-commonjs/utils/columnResizeUtils.js.map +1 -1
  316. package/package.json +9 -9
package/CHANGELOG.json CHANGED
@@ -2,7 +2,102 @@
2
2
  "name": "@fluentui/react-table",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 22 Feb 2023 23:04:48 GMT",
5
+ "date": "Wed, 08 Mar 2023 17:39:12 GMT",
6
+ "tag": "@fluentui/react-table_v9.1.0",
7
+ "version": "9.1.0",
8
+ "comments": {
9
+ "none": [
10
+ {
11
+ "author": "martinhochel@microsoft.com",
12
+ "package": "@fluentui/react-table",
13
+ "commit": "677a67b551966986db34a6fac608cb89ee150471",
14
+ "comment": "style: apply prettier 2.3-2.8 formatting on whole codebase"
15
+ },
16
+ {
17
+ "author": "lingfangao@hotmail.com",
18
+ "package": "@fluentui/react-table",
19
+ "commit": "cb0acaa586d84b70a9d2c3a9f4a14d5cdd3022cb",
20
+ "comment": "spec"
21
+ },
22
+ {
23
+ "author": "lingfangao@hotmail.com",
24
+ "package": "@fluentui/react-table",
25
+ "commit": "3b37078d657a664f7a55ffff35cdf698d16de144",
26
+ "comment": "chore: Add README for react-table package"
27
+ }
28
+ ],
29
+ "minor": [
30
+ {
31
+ "author": "lingfangao@hotmail.com",
32
+ "package": "@fluentui/react-table",
33
+ "commit": "bec4c1944ad5d1d857ac7f5f1baf8d12157378ac",
34
+ "comment": "feat: Implement Home/End navigation with Control"
35
+ },
36
+ {
37
+ "author": "bernardo.sunderhus@gmail.com",
38
+ "package": "@fluentui/react-table",
39
+ "commit": "d858041352851ffdeb5ac8d51e18cd44b46414ab",
40
+ "comment": "chore: use Iterable instead of a Set for table selection API surface"
41
+ },
42
+ {
43
+ "author": "gcox@microsoft.com",
44
+ "package": "@fluentui/react-table",
45
+ "commit": "965fe81c9a7dc161a170dd45cdabb83f934d6534",
46
+ "comment": "feat: custom styles"
47
+ },
48
+ {
49
+ "author": "beachball",
50
+ "package": "@fluentui/react-table",
51
+ "comment": "Bump @fluentui/react-aria to v9.3.11",
52
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
53
+ },
54
+ {
55
+ "author": "beachball",
56
+ "package": "@fluentui/react-table",
57
+ "comment": "Bump @fluentui/react-avatar to v9.4.0",
58
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
59
+ },
60
+ {
61
+ "author": "beachball",
62
+ "package": "@fluentui/react-table",
63
+ "comment": "Bump @fluentui/react-checkbox to v9.1.0",
64
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
65
+ },
66
+ {
67
+ "author": "beachball",
68
+ "package": "@fluentui/react-table",
69
+ "comment": "Bump @fluentui/react-context-selector to v9.1.11",
70
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
71
+ },
72
+ {
73
+ "author": "beachball",
74
+ "package": "@fluentui/react-table",
75
+ "comment": "Bump @fluentui/react-radio to v9.1.0",
76
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
77
+ },
78
+ {
79
+ "author": "beachball",
80
+ "package": "@fluentui/react-table",
81
+ "comment": "Bump @fluentui/react-shared-contexts to v9.3.0",
82
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
83
+ },
84
+ {
85
+ "author": "beachball",
86
+ "package": "@fluentui/react-table",
87
+ "comment": "Bump @fluentui/react-tabster to v9.5.4",
88
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
89
+ },
90
+ {
91
+ "author": "beachball",
92
+ "package": "@fluentui/react-table",
93
+ "comment": "Bump @fluentui/react-utilities to v9.6.1",
94
+ "commit": "e0d11faf97f6466f4cd23ed18266cf1e80094f56"
95
+ }
96
+ ]
97
+ }
98
+ },
99
+ {
100
+ "date": "Wed, 22 Feb 2023 23:06:07 GMT",
6
101
  "tag": "@fluentui/react-table_v9.0.4",
7
102
  "version": "9.0.4",
8
103
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,31 @@
1
1
  # Change Log - @fluentui/react-table
2
2
 
3
- This log was last generated on Wed, 22 Feb 2023 23:04:48 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 08 Mar 2023 17:39:12 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.1.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-table_v9.1.0)
8
+
9
+ Wed, 08 Mar 2023 17:39:12 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-table_v9.0.4..@fluentui/react-table_v9.1.0)
11
+
12
+ ### Minor changes
13
+
14
+ - feat: Implement Home/End navigation with Control ([PR #26964](https://github.com/microsoft/fluentui/pull/26964) by lingfangao@hotmail.com)
15
+ - chore: use Iterable instead of a Set for table selection API surface ([PR #26892](https://github.com/microsoft/fluentui/pull/26892) by bernardo.sunderhus@gmail.com)
16
+ - feat: custom styles ([PR #27084](https://github.com/microsoft/fluentui/pull/27084) by gcox@microsoft.com)
17
+ - Bump @fluentui/react-aria to v9.3.11 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
18
+ - Bump @fluentui/react-avatar to v9.4.0 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
19
+ - Bump @fluentui/react-checkbox to v9.1.0 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
20
+ - Bump @fluentui/react-context-selector to v9.1.11 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
21
+ - Bump @fluentui/react-radio to v9.1.0 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
22
+ - Bump @fluentui/react-shared-contexts to v9.3.0 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
23
+ - Bump @fluentui/react-tabster to v9.5.4 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
24
+ - Bump @fluentui/react-utilities to v9.6.1 ([PR #27127](https://github.com/microsoft/fluentui/pull/27127) by beachball)
25
+
7
26
  ## [9.0.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-table_v9.0.4)
8
27
 
9
- Wed, 22 Feb 2023 23:04:48 GMT
28
+ Wed, 22 Feb 2023 23:06:07 GMT
10
29
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-table_v9.0.3..@fluentui/react-table_v9.0.4)
11
30
 
12
31
  ### Patches
package/README.md CHANGED
@@ -1,5 +1,555 @@
1
1
  # @fluentui/react-table
2
2
 
3
- **React Table components for [Fluent UI React](https://react.fluentui.dev/)**
3
+ This package contains two high level components and their subcomponents.
4
4
 
5
- These are not production-ready components and **should never be used in product**. This space is useful for testing new components whose APIs might change before final release.
5
+ ## Table
6
+
7
+ This component is considered **low-level** and should be used when there is a need for more **customization** and
8
+ support for **non-standard features**. Please check out the **DataGrid component**
9
+ if you don't need lots of customization and rely on common features. There is less work involved and you will benefit
10
+ from first class Microsoft design and accessibility support.
11
+
12
+ A Table displays sets of two-dimensional data. The primitive components can be fully customized to support different
13
+ feature sets. The library provides a default `useTableFeatures` hook that handles the business logic and state management of common
14
+ features. There is no obligation to use our hook with these components, we've created it for convenience.
15
+
16
+ The `useTableFeatures` hook was designed with feature composition in mind. This means that they are composed using
17
+ plugins hooks such as `useTableSort` and `useTableSelection` as a part of `useTableFeatures`. This means
18
+ that as the feature set expands, users will not need to pay the bundle size price for features that they do not intend
19
+ to use. Please consult the usage examples below for more details.
20
+
21
+ ### Example without interactive features
22
+
23
+ ```tsx
24
+ import * as React from 'react';
25
+ import {
26
+ FolderRegular,
27
+ EditRegular,
28
+ OpenRegular,
29
+ DocumentRegular,
30
+ PeopleRegular,
31
+ DocumentPdfRegular,
32
+ VideoRegular,
33
+ } from '@fluentui/react-icons';
34
+ import {
35
+ TableBody,
36
+ TableCell,
37
+ TableRow,
38
+ Table,
39
+ TableHeader,
40
+ TableHeaderCell,
41
+ TableCellLayout,
42
+ PresenceBadgeStatus,
43
+ Avatar,
44
+ } from '@fluentui/react-components';
45
+
46
+ const items = [
47
+ {
48
+ file: { label: 'Meeting notes', icon: <DocumentRegular /> },
49
+ author: { label: 'Max Mustermann', status: 'available' },
50
+ lastUpdated: { label: '7h ago', timestamp: 1 },
51
+ lastUpdate: {
52
+ label: 'You edited this',
53
+ icon: <EditRegular />,
54
+ },
55
+ },
56
+ {
57
+ file: { label: 'Thursday presentation', icon: <FolderRegular /> },
58
+ author: { label: 'Erika Mustermann', status: 'busy' },
59
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
60
+ lastUpdate: {
61
+ label: 'You recently opened this',
62
+ icon: <OpenRegular />,
63
+ },
64
+ },
65
+ {
66
+ file: { label: 'Training recording', icon: <VideoRegular /> },
67
+ author: { label: 'John Doe', status: 'away' },
68
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
69
+ lastUpdate: {
70
+ label: 'You recently opened this',
71
+ icon: <OpenRegular />,
72
+ },
73
+ },
74
+ {
75
+ file: { label: 'Purchase order', icon: <DocumentPdfRegular /> },
76
+ author: { label: 'Jane Doe', status: 'offline' },
77
+ lastUpdated: { label: 'Tue at 9:30 AM', timestamp: 3 },
78
+ lastUpdate: {
79
+ label: 'You shared this in a Teams chat',
80
+ icon: <PeopleRegular />,
81
+ },
82
+ },
83
+ ];
84
+
85
+ const columns = [
86
+ { columnKey: 'file', label: 'File' },
87
+ { columnKey: 'author', label: 'Author' },
88
+ { columnKey: 'lastUpdated', label: 'Last updated' },
89
+ { columnKey: 'lastUpdate', label: 'Last update' },
90
+ ];
91
+
92
+ export const Default = () => {
93
+ return (
94
+ <Table arial-label="Default table">
95
+ <TableHeader>
96
+ <TableRow>
97
+ {columns.map(column => (
98
+ <TableHeaderCell key={column.columnKey}>{column.label}</TableHeaderCell>
99
+ ))}
100
+ </TableRow>
101
+ </TableHeader>
102
+ <TableBody>
103
+ {items.map(item => (
104
+ <TableRow key={item.file.label}>
105
+ <TableCell>
106
+ <TableCellLayout media={item.file.icon}>{item.file.label}</TableCellLayout>
107
+ </TableCell>
108
+ <TableCell>
109
+ <TableCellLayout
110
+ media={
111
+ <Avatar
112
+ aria-label={item.author.label}
113
+ name={item.author.label}
114
+ badge={{ status: item.author.status as PresenceBadgeStatus }}
115
+ />
116
+ }
117
+ >
118
+ {item.author.label}
119
+ </TableCellLayout>
120
+ </TableCell>
121
+ <TableCell>{item.lastUpdated.label}</TableCell>
122
+ <TableCell>
123
+ <TableCellLayout media={item.lastUpdate.icon}>{item.lastUpdate.label}</TableCellLayout>
124
+ </TableCell>
125
+ </TableRow>
126
+ ))}
127
+ </TableBody>
128
+ </Table>
129
+ );
130
+ };
131
+ ```
132
+
133
+ ### Example with interactive features
134
+
135
+ ```tsx
136
+ import * as React from 'react';
137
+ import {
138
+ FolderRegular,
139
+ EditRegular,
140
+ OpenRegular,
141
+ DocumentRegular,
142
+ PeopleRegular,
143
+ DocumentPdfRegular,
144
+ VideoRegular,
145
+ } from '@fluentui/react-icons';
146
+ import {
147
+ TableBody,
148
+ TableCell,
149
+ TableRow,
150
+ Table,
151
+ TableHeader,
152
+ TableHeaderCell,
153
+ TableSelectionCell,
154
+ TableCellLayout,
155
+ useTableFeatures,
156
+ TableColumnDefinition,
157
+ useTableSelection,
158
+ useTableSort,
159
+ createTableColumn,
160
+ TableColumnId,
161
+ PresenceBadgeStatus,
162
+ Avatar,
163
+ useArrowNavigationGroup,
164
+ } from '@fluentui/react-components';
165
+
166
+ type FileCell = {
167
+ label: string;
168
+ icon: JSX.Element;
169
+ };
170
+
171
+ type LastUpdatedCell = {
172
+ label: string;
173
+ timestamp: number;
174
+ };
175
+
176
+ type LastUpdateCell = {
177
+ label: string;
178
+ icon: JSX.Element;
179
+ };
180
+
181
+ type AuthorCell = {
182
+ label: string;
183
+ status: PresenceBadgeStatus;
184
+ };
185
+
186
+ type Item = {
187
+ file: FileCell;
188
+ author: AuthorCell;
189
+ lastUpdated: LastUpdatedCell;
190
+ lastUpdate: LastUpdateCell;
191
+ };
192
+
193
+ const items: Item[] = [
194
+ {
195
+ file: { label: 'Meeting notes', icon: <DocumentRegular /> },
196
+ author: { label: 'Max Mustermann', status: 'available' },
197
+ lastUpdated: { label: '7h ago', timestamp: 3 },
198
+ lastUpdate: {
199
+ label: 'You edited this',
200
+ icon: <EditRegular />,
201
+ },
202
+ },
203
+ {
204
+ file: { label: 'Thursday presentation', icon: <FolderRegular /> },
205
+ author: { label: 'Erika Mustermann', status: 'busy' },
206
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
207
+ lastUpdate: {
208
+ label: 'You recently opened this',
209
+ icon: <OpenRegular />,
210
+ },
211
+ },
212
+ {
213
+ file: { label: 'Training recording', icon: <VideoRegular /> },
214
+ author: { label: 'John Doe', status: 'away' },
215
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
216
+ lastUpdate: {
217
+ label: 'You recently opened this',
218
+ icon: <OpenRegular />,
219
+ },
220
+ },
221
+ {
222
+ file: { label: 'Purchase order', icon: <DocumentPdfRegular /> },
223
+ author: { label: 'Jane Doe', status: 'offline' },
224
+ lastUpdated: { label: 'Tue at 9:30 AM', timestamp: 1 },
225
+ lastUpdate: {
226
+ label: 'You shared this in a Teams chat',
227
+ icon: <PeopleRegular />,
228
+ },
229
+ },
230
+ ];
231
+
232
+ const columns: TableColumnDefinition<Item>[] = [
233
+ createTableColumn<Item>({
234
+ columnId: 'file',
235
+ compare: (a, b) => {
236
+ return a.file.label.localeCompare(b.file.label);
237
+ },
238
+ }),
239
+ createTableColumn<Item>({
240
+ columnId: 'author',
241
+ compare: (a, b) => {
242
+ return a.author.label.localeCompare(b.author.label);
243
+ },
244
+ }),
245
+ createTableColumn<Item>({
246
+ columnId: 'lastUpdated',
247
+ compare: (a, b) => {
248
+ return a.lastUpdated.timestamp - b.lastUpdated.timestamp;
249
+ },
250
+ }),
251
+ createTableColumn<Item>({
252
+ columnId: 'lastUpdate',
253
+ compare: (a, b) => {
254
+ return a.lastUpdate.label.localeCompare(b.lastUpdate.label);
255
+ },
256
+ }),
257
+ ];
258
+
259
+ export const DataGrid = () => {
260
+ const {
261
+ getRows,
262
+ selection: { allRowsSelected, someRowsSelected, toggleAllRows, toggleRow, isRowSelected },
263
+ sort: { getSortDirection, toggleColumnSort, sort },
264
+ } = useTableFeatures(
265
+ {
266
+ columns,
267
+ items,
268
+ },
269
+ [
270
+ useTableSelection({
271
+ selectionMode: 'multiselect',
272
+ defaultSelectedItems: new Set([0, 1]),
273
+ }),
274
+ useTableSort({ defaultSortState: { sortColumn: 'file', sortDirection: 'ascending' } }),
275
+ ],
276
+ );
277
+
278
+ const rows = sort(
279
+ getRows(row => {
280
+ const selected = isRowSelected(row.rowId);
281
+ return {
282
+ ...row,
283
+ onClick: (e: React.MouseEvent) => toggleRow(e, row.rowId),
284
+ onKeyDown: (e: React.KeyboardEvent) => {
285
+ if (e.key === ' ') {
286
+ e.preventDefault();
287
+ toggleRow(e, row.rowId);
288
+ }
289
+ },
290
+ selected,
291
+ appearance: selected ? ('brand' as const) : ('none' as const),
292
+ };
293
+ }),
294
+ );
295
+
296
+ const headerSortProps = (columnId: TableColumnId) => ({
297
+ onClick: (e: React.MouseEvent) => {
298
+ toggleColumnSort(e, columnId);
299
+ },
300
+ sortDirection: getSortDirection(columnId),
301
+ });
302
+
303
+ const keyboardNavAttr = useArrowNavigationGroup({ axis: 'grid' });
304
+
305
+ return (
306
+ <Table {...keyboardNavAttr} role="grid" sortable aria-label="DataGrid implementation with Table primitives">
307
+ <TableHeader>
308
+ <TableRow>
309
+ <TableSelectionCell
310
+ checked={allRowsSelected ? true : someRowsSelected ? 'mixed' : false}
311
+ aria-checked={allRowsSelected ? true : someRowsSelected ? 'mixed' : false}
312
+ role="checkbox"
313
+ onClick={toggleAllRows}
314
+ checkboxIndicator={{ 'aria-label': 'Select all rows ' }}
315
+ />
316
+ <TableHeaderCell {...headerSortProps('file')}>File</TableHeaderCell>
317
+ <TableHeaderCell {...headerSortProps('author')}>Author</TableHeaderCell>
318
+ <TableHeaderCell {...headerSortProps('lastUpdated')}>Last updated</TableHeaderCell>
319
+ <TableHeaderCell {...headerSortProps('lastUpdate')}>Last update</TableHeaderCell>
320
+ </TableRow>
321
+ </TableHeader>
322
+ <TableBody>
323
+ {rows.map(({ item, selected, onClick, onKeyDown, appearance }) => (
324
+ <TableRow
325
+ key={item.file.label}
326
+ onClick={onClick}
327
+ onKeyDown={onKeyDown}
328
+ aria-selected={selected}
329
+ appearance={appearance}
330
+ >
331
+ <TableSelectionCell
332
+ role="gridcell"
333
+ aria-selected={selected}
334
+ checked={selected}
335
+ checkboxIndicator={{ 'aria-label': 'Select row' }}
336
+ />
337
+ <TableCell tabIndex={0} role="gridcell" aria-selected={selected}>
338
+ <TableCellLayout media={item.file.icon}>{item.file.label}</TableCellLayout>
339
+ </TableCell>
340
+ <TableCell tabIndex={0} role="gridcell">
341
+ <TableCellLayout
342
+ media={
343
+ <Avatar
344
+ aria-label={item.author.label}
345
+ name={item.author.label}
346
+ badge={{ status: item.author.status }}
347
+ />
348
+ }
349
+ >
350
+ {item.author.label}
351
+ </TableCellLayout>
352
+ </TableCell>
353
+ <TableCell tabIndex={0} role="gridcell">
354
+ {item.lastUpdated.label}
355
+ </TableCell>
356
+ <TableCell tabIndex={0} role="gridcell">
357
+ <TableCellLayout media={item.lastUpdate.icon}>{item.lastUpdate.label}</TableCellLayout>
358
+ </TableCell>
359
+ </TableRow>
360
+ ))}
361
+ </TableBody>
362
+ </Table>
363
+ );
364
+ };
365
+ ```
366
+
367
+ ## DataGrid
368
+
369
+ This component is a higher level extension of the `Table` primitive components and the `useTableFeatures` hook.
370
+ `DataGrid` is a feature-rich component that uses `useTableFeatures` internally,
371
+ so there should always be full feature parity with what can be
372
+ achieved with primitives. This component is **opinionated** and this is intentional. If the desired scenario can
373
+ be achieved easily and does not vary too much from documented examples, it can be very convenient. If the desired
374
+ scenario varies a lot from the documented examples please use the `Table` components with `useTableFeatures` (or
375
+ another state management solution of choice).
376
+
377
+ ### Example usage
378
+
379
+ ```tsx
380
+ import * as React from 'react';
381
+ import {
382
+ FolderRegular,
383
+ EditRegular,
384
+ OpenRegular,
385
+ DocumentRegular,
386
+ PeopleRegular,
387
+ DocumentPdfRegular,
388
+ VideoRegular,
389
+ } from '@fluentui/react-icons';
390
+ import {
391
+ PresenceBadgeStatus,
392
+ Avatar,
393
+ DataGridBody,
394
+ DataGridRow,
395
+ DataGrid,
396
+ DataGridHeader,
397
+ DataGridHeaderCell,
398
+ DataGridCell,
399
+ TableCellLayout,
400
+ TableColumnDefinition,
401
+ createTableColumn,
402
+ } from '@fluentui/react-components';
403
+
404
+ type FileCell = {
405
+ label: string;
406
+ icon: JSX.Element;
407
+ };
408
+
409
+ type LastUpdatedCell = {
410
+ label: string;
411
+ timestamp: number;
412
+ };
413
+
414
+ type LastUpdateCell = {
415
+ label: string;
416
+ icon: JSX.Element;
417
+ };
418
+
419
+ type AuthorCell = {
420
+ label: string;
421
+ status: PresenceBadgeStatus;
422
+ };
423
+
424
+ type Item = {
425
+ file: FileCell;
426
+ author: AuthorCell;
427
+ lastUpdated: LastUpdatedCell;
428
+ lastUpdate: LastUpdateCell;
429
+ };
430
+
431
+ const items: Item[] = [
432
+ {
433
+ file: { label: 'Meeting notes', icon: <DocumentRegular /> },
434
+ author: { label: 'Max Mustermann', status: 'available' },
435
+ lastUpdated: { label: '7h ago', timestamp: 1 },
436
+ lastUpdate: {
437
+ label: 'You edited this',
438
+ icon: <EditRegular />,
439
+ },
440
+ },
441
+ {
442
+ file: { label: 'Thursday presentation', icon: <FolderRegular /> },
443
+ author: { label: 'Erika Mustermann', status: 'busy' },
444
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
445
+ lastUpdate: {
446
+ label: 'You recently opened this',
447
+ icon: <OpenRegular />,
448
+ },
449
+ },
450
+ {
451
+ file: { label: 'Training recording', icon: <VideoRegular /> },
452
+ author: { label: 'John Doe', status: 'away' },
453
+ lastUpdated: { label: 'Yesterday at 1:45 PM', timestamp: 2 },
454
+ lastUpdate: {
455
+ label: 'You recently opened this',
456
+ icon: <OpenRegular />,
457
+ },
458
+ },
459
+ {
460
+ file: { label: 'Purchase order', icon: <DocumentPdfRegular /> },
461
+ author: { label: 'Jane Doe', status: 'offline' },
462
+ lastUpdated: { label: 'Tue at 9:30 AM', timestamp: 3 },
463
+ lastUpdate: {
464
+ label: 'You shared this in a Teams chat',
465
+ icon: <PeopleRegular />,
466
+ },
467
+ },
468
+ ];
469
+
470
+ const columns: TableColumnDefinition<Item>[] = [
471
+ createTableColumn<Item>({
472
+ columnId: 'file',
473
+ compare: (a, b) => {
474
+ return a.file.label.localeCompare(b.file.label);
475
+ },
476
+ renderHeaderCell: () => {
477
+ return 'File';
478
+ },
479
+ renderCell: item => {
480
+ return <TableCellLayout media={item.file.icon}>{item.file.label}</TableCellLayout>;
481
+ },
482
+ }),
483
+ createTableColumn<Item>({
484
+ columnId: 'author',
485
+ compare: (a, b) => {
486
+ return a.author.label.localeCompare(b.author.label);
487
+ },
488
+ renderHeaderCell: () => {
489
+ return 'Author';
490
+ },
491
+ renderCell: item => {
492
+ return (
493
+ <TableCellLayout
494
+ media={
495
+ <Avatar aria-label={item.author.label} name={item.author.label} badge={{ status: item.author.status }} />
496
+ }
497
+ >
498
+ {item.author.label}
499
+ </TableCellLayout>
500
+ );
501
+ },
502
+ }),
503
+ createTableColumn<Item>({
504
+ columnId: 'lastUpdated',
505
+ compare: (a, b) => {
506
+ return a.lastUpdated.timestamp - b.lastUpdated.timestamp;
507
+ },
508
+ renderHeaderCell: () => {
509
+ return 'Last updated';
510
+ },
511
+
512
+ renderCell: item => {
513
+ return item.lastUpdated.label;
514
+ },
515
+ }),
516
+ createTableColumn<Item>({
517
+ columnId: 'lastUpdate',
518
+ compare: (a, b) => {
519
+ return a.lastUpdate.label.localeCompare(b.lastUpdate.label);
520
+ },
521
+ renderHeaderCell: () => {
522
+ return 'Last update';
523
+ },
524
+ renderCell: item => {
525
+ return <TableCellLayout media={item.lastUpdate.icon}>{item.lastUpdate.label}</TableCellLayout>;
526
+ },
527
+ }),
528
+ ];
529
+
530
+ export const Default = () => {
531
+ return (
532
+ <DataGrid
533
+ items={items}
534
+ columns={columns}
535
+ sortable
536
+ selectionMode="multiselect"
537
+ getRowId={item => item.file.label}
538
+ onSelectionChange={(e, data) => console.log(data)}
539
+ >
540
+ <DataGridHeader>
541
+ <DataGridRow selectionCell={{ 'aria-label': 'Select all rows' }}>
542
+ {({ renderHeaderCell }) => <DataGridHeaderCell>{renderHeaderCell()}</DataGridHeaderCell>}
543
+ </DataGridRow>
544
+ </DataGridHeader>
545
+ <DataGridBody<Item>>
546
+ {({ item, rowId }) => (
547
+ <DataGridRow<Item> key={rowId} selectionCell={{ 'aria-label': 'Select row' }}>
548
+ {({ renderCell }) => <DataGridCell>{renderCell(item)}</DataGridCell>}
549
+ </DataGridRow>
550
+ )}
551
+ </DataGridBody>
552
+ </DataGrid>
553
+ );
554
+ };
555
+ ```