@multiplatform.one/table 7.34.4 → 7.36.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 (412) hide show
  1. package/dist/cjs/components/ChildTable/index.cjs +26 -23
  2. package/dist/cjs/components/ChildTable/index.native.js +26 -23
  3. package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
  4. package/dist/cjs/components/DataTable/DataTableCardControls.cjs +3 -8
  5. package/dist/cjs/components/DataTable/DataTableCardControls.native.js +3 -8
  6. package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
  7. package/dist/cjs/components/DataTable/DataTableContext.cjs +1 -2
  8. package/dist/cjs/components/DataTable/DataTableContext.native.js +1 -2
  9. package/dist/cjs/components/DataTable/DataTableContext.native.js.map +1 -1
  10. package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +50 -20
  11. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +59 -27
  12. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  13. package/dist/cjs/components/DataTable/DataTableInfiniteTail.cjs +1 -1
  14. package/dist/cjs/components/DataTable/DataTableInfiniteTail.native.js +1 -1
  15. package/dist/cjs/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
  16. package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +5 -11
  17. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +5 -11
  18. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  19. package/dist/cjs/components/DataTable/DataTableRoot.cjs +601 -606
  20. package/dist/cjs/components/DataTable/DataTableRoot.native.js +705 -710
  21. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  22. package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +3 -2
  23. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +3 -2
  24. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  25. package/dist/cjs/components/DataTable/documentListSlots.cjs +8 -1
  26. package/dist/cjs/components/DataTable/documentListSlots.native.js +8 -1
  27. package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -1
  28. package/dist/cjs/components/DataTable/index.native.js +264 -252
  29. package/dist/cjs/components/DataTable/index.native.js.map +1 -1
  30. package/dist/cjs/components/DataTableCell/index.cjs +2 -5
  31. package/dist/cjs/components/DataTableCell/index.native.js +2 -5
  32. package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
  33. package/dist/cjs/components/DataTableColumnPinning/index.cjs +2 -1
  34. package/dist/cjs/components/DataTableColumnPinning/index.native.js +2 -1
  35. package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
  36. package/dist/cjs/components/DataTableFilterButton/index.cjs +3 -5
  37. package/dist/cjs/components/DataTableFilterButton/index.native.js +3 -5
  38. package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
  39. package/dist/cjs/components/DataTableFilterChips/index.cjs +0 -1
  40. package/dist/cjs/components/DataTableFilterChips/index.native.js +0 -1
  41. package/dist/cjs/components/DataTableFilters/index.cjs +11 -19
  42. package/dist/cjs/components/DataTableFilters/index.native.js +11 -19
  43. package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
  44. package/dist/cjs/components/DataTableGrouping/index.cjs +5 -5
  45. package/dist/cjs/components/DataTableGrouping/index.native.js +7 -7
  46. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  47. package/dist/cjs/components/DataTablePagination/index.cjs +14 -18
  48. package/dist/cjs/components/DataTablePagination/index.native.js +14 -18
  49. package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
  50. package/dist/cjs/components/DataTableSearch/index.cjs +5 -7
  51. package/dist/cjs/components/DataTableSearch/index.native.js +5 -7
  52. package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
  53. package/dist/cjs/components/DataTableToolbar/index.cjs +2 -10
  54. package/dist/cjs/components/DataTableToolbar/index.native.js +2 -10
  55. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  56. package/dist/cjs/components/DataTableViewOptions/index.cjs +5 -3
  57. package/dist/cjs/components/DataTableViewOptions/index.native.js +6 -4
  58. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  59. package/dist/cjs/components/KnobDialog.cjs +4 -34
  60. package/dist/cjs/components/KnobDialog.native.js +3 -34
  61. package/dist/cjs/components/KnobDialog.native.js.map +1 -1
  62. package/dist/cjs/components/SavedFilterDropdown.cjs +0 -1
  63. package/dist/cjs/components/SavedFilterDropdown.native.js +0 -1
  64. package/dist/cjs/components/SavedFilterDropdown.native.js.map +1 -1
  65. package/dist/cjs/components/SimpleTable/ScrollFrame.cjs +51 -0
  66. package/dist/cjs/components/SimpleTable/ScrollFrame.native.js +84 -0
  67. package/dist/cjs/components/SimpleTable/ScrollFrame.native.js.map +1 -0
  68. package/dist/cjs/components/SimpleTable/columnSizing.cjs +50 -0
  69. package/dist/cjs/components/SimpleTable/columnSizing.native.js +71 -0
  70. package/dist/cjs/components/SimpleTable/columnSizing.native.js.map +1 -0
  71. package/dist/cjs/components/SimpleTable/index.cjs +152 -97
  72. package/dist/cjs/components/SimpleTable/index.native.js +166 -110
  73. package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
  74. package/dist/cjs/components/TableInput/RowDetailEditor.cjs +1 -6
  75. package/dist/cjs/components/TableInput/RowDetailEditor.native.js +1 -5
  76. package/dist/cjs/components/TableInput/RowDetailEditor.native.js.map +1 -1
  77. package/dist/cjs/components/TableInput/index.cjs +4 -19
  78. package/dist/cjs/components/TableInput/index.native.js +2 -11
  79. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  80. package/dist/cjs/index.cjs +1 -0
  81. package/dist/cjs/index.native.js +1 -0
  82. package/dist/cjs/index.native.js.map +1 -1
  83. package/dist/esm/components/ChildTable/index.mjs +26 -23
  84. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  85. package/dist/esm/components/ChildTable/index.native.js +26 -23
  86. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  87. package/dist/esm/components/DataTable/DataTableCardControls.mjs +3 -8
  88. package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
  89. package/dist/esm/components/DataTable/DataTableCardControls.native.js +3 -8
  90. package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
  91. package/dist/esm/components/DataTable/DataTableContext.mjs +1 -2
  92. package/dist/esm/components/DataTable/DataTableContext.mjs.map +1 -1
  93. package/dist/esm/components/DataTable/DataTableContext.native.js +1 -2
  94. package/dist/esm/components/DataTable/DataTableContext.native.js.map +1 -1
  95. package/dist/esm/components/DataTable/DataTableDocumentList.mjs +52 -22
  96. package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  97. package/dist/esm/components/DataTable/DataTableDocumentList.native.js +61 -29
  98. package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  99. package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs +1 -1
  100. package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
  101. package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js +1 -1
  102. package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
  103. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -11
  104. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  105. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +5 -11
  106. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  107. package/dist/esm/components/DataTable/DataTableRoot.mjs +603 -608
  108. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  109. package/dist/esm/components/DataTable/DataTableRoot.native.js +707 -712
  110. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  111. package/dist/esm/components/DataTable/DataTableVirtualized.mjs +4 -3
  112. package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  113. package/dist/esm/components/DataTable/DataTableVirtualized.native.js +4 -3
  114. package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  115. package/dist/esm/components/DataTable/documentListSlots.mjs +8 -1
  116. package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -1
  117. package/dist/esm/components/DataTable/documentListSlots.native.js +8 -1
  118. package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -1
  119. package/dist/esm/components/DataTable/index.native.js +265 -253
  120. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  121. package/dist/esm/components/DataTableCell/index.mjs +2 -5
  122. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  123. package/dist/esm/components/DataTableCell/index.native.js +2 -5
  124. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  125. package/dist/esm/components/DataTableColumnPinning/index.mjs +2 -1
  126. package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
  127. package/dist/esm/components/DataTableColumnPinning/index.native.js +2 -1
  128. package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
  129. package/dist/esm/components/DataTableFilterButton/index.mjs +4 -6
  130. package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
  131. package/dist/esm/components/DataTableFilterButton/index.native.js +4 -6
  132. package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
  133. package/dist/esm/components/DataTableFilterChips/index.mjs +0 -1
  134. package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
  135. package/dist/esm/components/DataTableFilterChips/index.native.js +0 -1
  136. package/dist/esm/components/DataTableFilters/index.mjs +12 -20
  137. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  138. package/dist/esm/components/DataTableFilters/index.native.js +12 -20
  139. package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
  140. package/dist/esm/components/DataTableGrouping/index.mjs +6 -6
  141. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  142. package/dist/esm/components/DataTableGrouping/index.native.js +8 -8
  143. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  144. package/dist/esm/components/DataTablePagination/index.mjs +15 -19
  145. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  146. package/dist/esm/components/DataTablePagination/index.native.js +15 -19
  147. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  148. package/dist/esm/components/DataTableSearch/index.mjs +5 -7
  149. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  150. package/dist/esm/components/DataTableSearch/index.native.js +5 -7
  151. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  152. package/dist/esm/components/DataTableToolbar/index.mjs +2 -10
  153. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  154. package/dist/esm/components/DataTableToolbar/index.native.js +2 -10
  155. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  156. package/dist/esm/components/DataTableViewOptions/index.mjs +6 -4
  157. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  158. package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
  159. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  160. package/dist/esm/components/KnobDialog.mjs +6 -36
  161. package/dist/esm/components/KnobDialog.mjs.map +1 -1
  162. package/dist/esm/components/KnobDialog.native.js +5 -36
  163. package/dist/esm/components/KnobDialog.native.js.map +1 -1
  164. package/dist/esm/components/SavedFilterDropdown.mjs +0 -1
  165. package/dist/esm/components/SavedFilterDropdown.mjs.map +1 -1
  166. package/dist/esm/components/SavedFilterDropdown.native.js +0 -1
  167. package/dist/esm/components/SavedFilterDropdown.native.js.map +1 -1
  168. package/dist/esm/components/SimpleTable/ScrollFrame.mjs +25 -0
  169. package/dist/esm/components/SimpleTable/ScrollFrame.mjs.map +1 -0
  170. package/dist/esm/components/SimpleTable/ScrollFrame.native.js +55 -0
  171. package/dist/esm/components/SimpleTable/ScrollFrame.native.js.map +1 -0
  172. package/dist/esm/components/SimpleTable/columnSizing.mjs +25 -0
  173. package/dist/esm/components/SimpleTable/columnSizing.mjs.map +1 -0
  174. package/dist/esm/components/SimpleTable/columnSizing.native.js +43 -0
  175. package/dist/esm/components/SimpleTable/columnSizing.native.js.map +1 -0
  176. package/dist/esm/components/SimpleTable/index.mjs +152 -98
  177. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  178. package/dist/esm/components/SimpleTable/index.native.js +166 -111
  179. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  180. package/dist/esm/components/TableInput/RowDetailEditor.mjs +1 -6
  181. package/dist/esm/components/TableInput/RowDetailEditor.mjs.map +1 -1
  182. package/dist/esm/components/TableInput/RowDetailEditor.native.js +1 -5
  183. package/dist/esm/components/TableInput/RowDetailEditor.native.js.map +1 -1
  184. package/dist/esm/components/TableInput/index.mjs +5 -20
  185. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  186. package/dist/esm/components/TableInput/index.native.js +3 -12
  187. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  188. package/dist/esm/index.mjs +2 -2
  189. package/dist/esm/index.mjs.map +1 -1
  190. package/dist/esm/index.native.js +2 -2
  191. package/dist/esm/index.native.js.map +1 -1
  192. package/dist/jsx/components/ChildTable/index.mjs +26 -23
  193. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  194. package/dist/jsx/components/ChildTable/index.native.js +26 -23
  195. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  196. package/dist/jsx/components/DataTable/DataTableCardControls.mjs +3 -8
  197. package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
  198. package/dist/jsx/components/DataTable/DataTableCardControls.native.js +3 -8
  199. package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
  200. package/dist/jsx/components/DataTable/DataTableContext.mjs +1 -2
  201. package/dist/jsx/components/DataTable/DataTableContext.mjs.map +1 -1
  202. package/dist/jsx/components/DataTable/DataTableContext.native.js +1 -2
  203. package/dist/jsx/components/DataTable/DataTableContext.native.js.map +1 -1
  204. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +52 -22
  205. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  206. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +59 -27
  207. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  208. package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs +1 -1
  209. package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
  210. package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js +1 -1
  211. package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
  212. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -11
  213. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  214. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +5 -11
  215. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  216. package/dist/jsx/components/DataTable/DataTableRoot.mjs +603 -608
  217. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  218. package/dist/jsx/components/DataTable/DataTableRoot.native.js +705 -710
  219. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  220. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +4 -3
  221. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  222. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +3 -2
  223. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  224. package/dist/jsx/components/DataTable/documentListSlots.mjs +8 -1
  225. package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -1
  226. package/dist/jsx/components/DataTable/documentListSlots.native.js +8 -1
  227. package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -1
  228. package/dist/jsx/components/DataTable/index.native.js +264 -252
  229. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  230. package/dist/jsx/components/DataTableCell/index.mjs +2 -5
  231. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  232. package/dist/jsx/components/DataTableCell/index.native.js +2 -5
  233. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  234. package/dist/jsx/components/DataTableColumnPinning/index.mjs +2 -1
  235. package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
  236. package/dist/jsx/components/DataTableColumnPinning/index.native.js +2 -1
  237. package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
  238. package/dist/jsx/components/DataTableFilterButton/index.mjs +4 -6
  239. package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
  240. package/dist/jsx/components/DataTableFilterButton/index.native.js +3 -5
  241. package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
  242. package/dist/jsx/components/DataTableFilterChips/index.mjs +0 -1
  243. package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
  244. package/dist/jsx/components/DataTableFilterChips/index.native.js +0 -1
  245. package/dist/jsx/components/DataTableFilters/index.mjs +12 -20
  246. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  247. package/dist/jsx/components/DataTableFilters/index.native.js +11 -19
  248. package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
  249. package/dist/jsx/components/DataTableGrouping/index.mjs +6 -6
  250. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  251. package/dist/jsx/components/DataTableGrouping/index.native.js +7 -7
  252. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  253. package/dist/jsx/components/DataTablePagination/index.mjs +15 -19
  254. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  255. package/dist/jsx/components/DataTablePagination/index.native.js +14 -18
  256. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  257. package/dist/jsx/components/DataTableSearch/index.mjs +5 -7
  258. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  259. package/dist/jsx/components/DataTableSearch/index.native.js +5 -7
  260. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  261. package/dist/jsx/components/DataTableToolbar/index.mjs +2 -10
  262. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  263. package/dist/jsx/components/DataTableToolbar/index.native.js +2 -10
  264. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  265. package/dist/jsx/components/DataTableViewOptions/index.mjs +6 -4
  266. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  267. package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
  268. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  269. package/dist/jsx/components/KnobDialog.mjs +6 -36
  270. package/dist/jsx/components/KnobDialog.mjs.map +1 -1
  271. package/dist/jsx/components/KnobDialog.native.js +3 -34
  272. package/dist/jsx/components/KnobDialog.native.js.map +1 -1
  273. package/dist/jsx/components/SavedFilterDropdown.mjs +0 -1
  274. package/dist/jsx/components/SavedFilterDropdown.mjs.map +1 -1
  275. package/dist/jsx/components/SavedFilterDropdown.native.js +0 -1
  276. package/dist/jsx/components/SavedFilterDropdown.native.js.map +1 -1
  277. package/dist/jsx/components/SimpleTable/ScrollFrame.mjs +25 -0
  278. package/dist/jsx/components/SimpleTable/ScrollFrame.mjs.map +1 -0
  279. package/dist/jsx/components/SimpleTable/ScrollFrame.native.js +84 -0
  280. package/dist/jsx/components/SimpleTable/ScrollFrame.native.js.map +1 -0
  281. package/dist/jsx/components/SimpleTable/columnSizing.mjs +25 -0
  282. package/dist/jsx/components/SimpleTable/columnSizing.mjs.map +1 -0
  283. package/dist/jsx/components/SimpleTable/columnSizing.native.js +71 -0
  284. package/dist/jsx/components/SimpleTable/columnSizing.native.js.map +1 -0
  285. package/dist/jsx/components/SimpleTable/index.mjs +152 -98
  286. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  287. package/dist/jsx/components/SimpleTable/index.native.js +166 -110
  288. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  289. package/dist/jsx/components/TableInput/RowDetailEditor.mjs +1 -6
  290. package/dist/jsx/components/TableInput/RowDetailEditor.mjs.map +1 -1
  291. package/dist/jsx/components/TableInput/RowDetailEditor.native.js +1 -5
  292. package/dist/jsx/components/TableInput/RowDetailEditor.native.js.map +1 -1
  293. package/dist/jsx/components/TableInput/index.mjs +5 -20
  294. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  295. package/dist/jsx/components/TableInput/index.native.js +2 -11
  296. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  297. package/dist/jsx/index.js +2 -2
  298. package/dist/jsx/index.js.map +1 -1
  299. package/dist/jsx/index.mjs +2 -2
  300. package/dist/jsx/index.mjs.map +1 -1
  301. package/dist/jsx/index.native.js +1 -0
  302. package/dist/jsx/index.native.js.map +1 -1
  303. package/package.json +12 -12
  304. package/src/components/ChildTable/ChildTable.stories.tsx +1 -2
  305. package/src/components/ChildTable/childTable.spec.tsx +2 -2
  306. package/src/components/ChildTable/childTable.zebra.spec.tsx +3 -3
  307. package/src/components/ChildTable/index.tsx +29 -26
  308. package/src/components/DataTable/DataTable.spec.tsx +49 -2
  309. package/src/components/DataTable/DataTable.stories.tsx +5 -5
  310. package/src/components/DataTable/DataTableCardControls.tsx +5 -10
  311. package/src/components/DataTable/DataTableContext.ts +5 -7
  312. package/src/components/DataTable/DataTableDocumentList.tsx +59 -21
  313. package/src/components/DataTable/DataTableInfiniteTail.tsx +1 -1
  314. package/src/components/DataTable/DataTableMobileCards.tsx +4 -9
  315. package/src/components/DataTable/DataTableRoot.tsx +900 -898
  316. package/src/components/DataTable/DataTableVirtualized.tsx +4 -2
  317. package/src/components/DataTable/FieldsInCells.stories.tsx +0 -1
  318. package/src/components/DataTable/compoundComponent.spec.tsx +7 -21
  319. package/src/components/DataTable/dataTableDocumentList.spec.tsx +78 -20
  320. package/src/components/DataTable/dataTableMobileCards.spec.tsx +19 -22
  321. package/src/components/DataTable/documentListSlots.ts +25 -6
  322. package/src/components/DataTable/footerLayout.spec.tsx +7 -7
  323. package/src/components/DataTable/index.native.tsx +329 -322
  324. package/src/components/DataTable/smallTableFooter.spec.tsx +61 -0
  325. package/src/components/DataTableCell/DataTableCell.stories.tsx +0 -2
  326. package/src/components/DataTableCell/index.tsx +3 -7
  327. package/src/components/DataTableColumnPinning/index.tsx +2 -1
  328. package/src/components/DataTableDateFilter/index.tsx +1 -1
  329. package/src/components/DataTableFilterButton/index.tsx +8 -5
  330. package/src/components/DataTableFilterChips/index.tsx +1 -1
  331. package/src/components/DataTableFilters/DataTableFilters.spec.tsx +3 -14
  332. package/src/components/DataTableFilters/DataTableFilters.stories.tsx +1 -6
  333. package/src/components/DataTableFilters/index.tsx +19 -17
  334. package/src/components/DataTableGrouping/index.tsx +9 -8
  335. package/src/components/DataTablePagination/DataTablePagination.spec.tsx +21 -11
  336. package/src/components/DataTablePagination/DataTablePagination.stories.tsx +2 -19
  337. package/src/components/DataTablePagination/DataTablePagination.width.spec.tsx +13 -13
  338. package/src/components/DataTablePagination/index.tsx +19 -15
  339. package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
  340. package/src/components/DataTableSearch/index.tsx +7 -7
  341. package/src/components/DataTableToolbar/index.tsx +1 -7
  342. package/src/components/DataTableViewOptions/DataTableViewOptions.spec.tsx +5 -5
  343. package/src/components/DataTableViewOptions/DataTableViewOptions.stories.tsx +1 -1
  344. package/src/components/DataTableViewOptions/index.tsx +15 -6
  345. package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.spec.tsx +17 -37
  346. package/src/components/KnobDialog.tsx +5 -37
  347. package/src/components/SavedFilterDropdown.tsx +0 -1
  348. package/src/components/SimpleTable/ScrollFrame.native.tsx +49 -0
  349. package/src/components/SimpleTable/ScrollFrame.tsx +18 -0
  350. package/src/components/SimpleTable/SimpleTable.stories.tsx +47 -0
  351. package/src/components/SimpleTable/columnSizing.spec.ts +88 -0
  352. package/src/components/SimpleTable/columnSizing.ts +46 -0
  353. package/src/components/SimpleTable/index.tsx +185 -112
  354. package/src/components/SimpleTable/simpleTable.spec.tsx +47 -19
  355. package/src/components/TableInput/RowDetailEditor.native.tsx +1 -3
  356. package/src/components/TableInput/RowDetailEditor.tsx +2 -10
  357. package/src/components/TableInput/index.native.tsx +3 -16
  358. package/src/components/TableInput/index.tsx +13 -24
  359. package/src/index.ts +1 -1
  360. package/src/types.ts +7 -2
  361. package/types/components/ChildTable/index.d.ts +3 -1
  362. package/types/components/ChildTable/index.d.ts.map +1 -1
  363. package/types/components/DataTable/DataTableCardControls.d.ts +2 -3
  364. package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
  365. package/types/components/DataTable/DataTableContext.d.ts +4 -4
  366. package/types/components/DataTable/DataTableContext.d.ts.map +1 -1
  367. package/types/components/DataTable/DataTableDocumentList.d.ts +7 -4
  368. package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -1
  369. package/types/components/DataTable/DataTableMobileCards.d.ts +1 -2
  370. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  371. package/types/components/DataTable/DataTableRoot.d.ts +1 -3
  372. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  373. package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
  374. package/types/components/DataTable/documentListSlots.d.ts +7 -4
  375. package/types/components/DataTable/documentListSlots.d.ts.map +1 -1
  376. package/types/components/DataTable/index.native.d.ts +1 -1
  377. package/types/components/DataTable/index.native.d.ts.map +1 -1
  378. package/types/components/DataTableCell/index.d.ts +1 -3
  379. package/types/components/DataTableCell/index.d.ts.map +1 -1
  380. package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
  381. package/types/components/DataTableFilters/index.d.ts +6 -1
  382. package/types/components/DataTableFilters/index.d.ts.map +1 -1
  383. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  384. package/types/components/DataTablePagination/index.d.ts +8 -1
  385. package/types/components/DataTablePagination/index.d.ts.map +1 -1
  386. package/types/components/DataTableToolbar/index.d.ts +0 -1
  387. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  388. package/types/components/DataTableViewOptions/index.d.ts +6 -1
  389. package/types/components/DataTableViewOptions/index.d.ts.map +1 -1
  390. package/types/components/KnobDialog.d.ts +0 -7
  391. package/types/components/KnobDialog.d.ts.map +1 -1
  392. package/types/components/SavedFilterDropdown.d.ts.map +1 -1
  393. package/types/components/SimpleTable/ScrollFrame.d.ts +10 -0
  394. package/types/components/SimpleTable/ScrollFrame.d.ts.map +1 -0
  395. package/types/components/SimpleTable/ScrollFrame.native.d.ts +10 -0
  396. package/types/components/SimpleTable/ScrollFrame.native.d.ts.map +1 -0
  397. package/types/components/SimpleTable/columnSizing.d.ts +30 -0
  398. package/types/components/SimpleTable/columnSizing.d.ts.map +1 -0
  399. package/types/components/SimpleTable/index.d.ts +7 -12
  400. package/types/components/SimpleTable/index.d.ts.map +1 -1
  401. package/types/components/TableInput/RowDetailEditor.d.ts +1 -2
  402. package/types/components/TableInput/RowDetailEditor.d.ts.map +1 -1
  403. package/types/components/TableInput/RowDetailEditor.native.d.ts +1 -1
  404. package/types/components/TableInput/RowDetailEditor.native.d.ts.map +1 -1
  405. package/types/components/TableInput/index.d.ts +1 -6
  406. package/types/components/TableInput/index.d.ts.map +1 -1
  407. package/types/components/TableInput/index.native.d.ts +1 -6
  408. package/types/components/TableInput/index.native.d.ts.map +1 -1
  409. package/types/index.d.ts +1 -1
  410. package/types/index.d.ts.map +1 -1
  411. package/types/types.d.ts +7 -2
  412. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,88 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { resolveSimpleTableColumns, type SimpleTableColumn } from "./columnSizing";
3
+
4
+ const tokenValue = (token: string) => ({ $8: 76, $9: 86, $10: 96, $14: 168, $18: 222 })[token] ?? 0;
5
+
6
+ describe("SimpleTable column widths", () => {
7
+ it("lets a flexible column's own minimum give way before the table overflows", () => {
8
+ const definitions: SimpleTableColumn[] = [
9
+ { accessorKey: "name", header: "Name", width: { flex: 1, min: "$10" } },
10
+ { accessorKey: "a", header: "A", width: "$8" },
11
+ { accessorKey: "b", header: "B", width: "$8" },
12
+ { accessorKey: "c", header: "C", width: "$8" },
13
+ ];
14
+ expect(
15
+ resolveSimpleTableColumns(definitions, [], 358, tokenValue).map(({ width }) => width),
16
+ ).toEqual([130, 76, 76, 76]);
17
+ expect(
18
+ resolveSimpleTableColumns(definitions, [], 200, tokenValue).map(({ width }) => width),
19
+ ).toEqual([96, 76, 76, 76]);
20
+ });
21
+
22
+ it("allocates remaining space to text while preserving numeric minima", () => {
23
+ const columns = resolveSimpleTableColumns(
24
+ [
25
+ { accessorKey: "name", header: "Pokemon Name" },
26
+ { accessorKey: "id", header: "ID" },
27
+ ],
28
+ [{ name: "Pikachu", id: 25 }],
29
+ 400,
30
+ tokenValue,
31
+ );
32
+ expect(columns.map(({ width, align }) => [width, align])).toEqual([
33
+ [314, "left"],
34
+ [86, "right"],
35
+ ]);
36
+ });
37
+
38
+ it("uses token widths exactly and shares surplus by flex weight", () => {
39
+ const definitions: SimpleTableColumn[] = [
40
+ { accessorKey: "a", header: "A", width: "$18" },
41
+ { accessorKey: "b", header: "B", width: { flex: 2 } },
42
+ { accessorKey: "c", header: "C", width: { flex: 1 } },
43
+ ];
44
+ expect(
45
+ resolveSimpleTableColumns(definitions, [], 858, tokenValue).map(({ width }) => width),
46
+ ).toEqual([222, 368, 268]);
47
+ expect(
48
+ resolveSimpleTableColumns(definitions, [], 300, tokenValue).map(({ width }) => width),
49
+ ).toEqual([222, 168, 168]);
50
+ });
51
+
52
+ it("respects explicit types and alignment, ignoring nulls without guessing mixed data", () => {
53
+ const definitions: SimpleTableColumn[] = [
54
+ { accessorKey: "id", header: "ID" },
55
+ { accessorKey: "mixed", header: "Mixed" },
56
+ { accessorKey: "formatted", header: "Amount", type: "number", align: "center" },
57
+ { accessorKey: "code", header: "Code", type: "text" },
58
+ ];
59
+ const rows = [
60
+ { id: null, mixed: "25", formatted: "$25", code: 123 },
61
+ { id: 25, mixed: 25, formatted: null, code: 456 },
62
+ ];
63
+ expect(
64
+ resolveSimpleTableColumns(definitions, rows, 0, tokenValue).map(({ width, align }) => [
65
+ width,
66
+ align,
67
+ ]),
68
+ ).toEqual([
69
+ [86, "right"],
70
+ [168, "left"],
71
+ [86, "center"],
72
+ [168, "left"],
73
+ ]);
74
+ });
75
+
76
+ it("keeps empty and invalid-weight columns finite across scale changes", () => {
77
+ const definitions: SimpleTableColumn[] = [
78
+ { accessorKey: "a", header: "A", width: { flex: Number.NaN } },
79
+ { accessorKey: "b", header: "B", type: "number" },
80
+ ];
81
+ expect(
82
+ resolveSimpleTableColumns(definitions, [], 500, (token) => tokenValue(token) * 2).map(
83
+ ({ width }) => width,
84
+ ),
85
+ ).toEqual([336, 172]);
86
+ expect(resolveSimpleTableColumns([], [], 500, tokenValue)).toEqual([]);
87
+ });
88
+ });
@@ -0,0 +1,46 @@
1
+ import type { ReactNode } from "react";
2
+ import type { SizeTokens } from "tamagui";
3
+
4
+ export type SimpleTableSizeToken = SizeTokens & `$${string}`;
5
+
6
+ export interface SimpleTableColumn {
7
+ accessorKey: string;
8
+ header: string;
9
+ align?: "left" | "center" | "right";
10
+ type?: "text" | "number";
11
+ /**
12
+ * A token is a fixed width. `{ flex }` shares the spare room; `min` lowers
13
+ * a flexible column's floor (text defaults to $14, numbers to $9), so a
14
+ * title column can give way on a phone before the table scrolls.
15
+ */
16
+ width?: SimpleTableSizeToken | { flex: number; min?: SimpleTableSizeToken };
17
+ cell?: (value: unknown, row: Record<string, any>, rowIndex: number) => ReactNode;
18
+ }
19
+
20
+ export function resolveSimpleTableColumns(
21
+ columns: SimpleTableColumn[],
22
+ data: Array<Record<string, any>>,
23
+ viewportWidth: number,
24
+ tokenValue: (token: SimpleTableSizeToken) => number,
25
+ ) {
26
+ const resolved = columns.map((column) => {
27
+ const values = data.map((row) => row[column.accessorKey]).filter((value) => value != null);
28
+ const numeric = column.type
29
+ ? column.type === "number"
30
+ : values.length > 0 && values.every((value) => typeof value === "number");
31
+ const hint = column.width;
32
+ const minimum = tokenValue(
33
+ typeof hint === "string" ? hint : (hint?.min ?? (numeric ? "$9" : "$14")),
34
+ );
35
+ const requestedFlex = typeof hint === "object" ? hint.flex : numeric || hint ? 0 : 1;
36
+ const flex = Number.isFinite(requestedFlex) && requestedFlex > 0 ? requestedFlex : 0;
37
+ return { ...column, align: column.align ?? (numeric ? "right" : "left"), minimum, flex };
38
+ });
39
+ const minimumWidth = resolved.reduce((sum, column) => sum + column.minimum, 0);
40
+ const totalFlex = resolved.reduce((sum, column) => sum + column.flex, 0);
41
+ const spare = Math.max(0, viewportWidth - minimumWidth);
42
+ return resolved.map((column) => ({
43
+ ...column,
44
+ width: column.minimum + (totalFlex ? (spare * column.flex) / totalFlex : 0),
45
+ }));
46
+ }
@@ -17,9 +17,14 @@ import {
17
17
  transitionProps,
18
18
  } from "@multiplatform.one/theme";
19
19
  import { useCallback, useState, type ReactNode } from "react";
20
+ import type { LayoutChangeEvent } from "react-native";
20
21
  import { useTranslation } from "react-i18next";
21
22
  import type { FontSizeTokens, ViewProps } from "tamagui";
22
- import { Text, View, isWeb, useMedia } from "tamagui";
23
+ import { Text, View, getTokenValue, isWeb, useMedia } from "tamagui";
24
+ import { resolveSimpleTableColumns, type SimpleTableColumn } from "./columnSizing";
25
+ import { PinnedCell, ScrollFrame } from "./ScrollFrame";
26
+ export type { SimpleTableColumn, SimpleTableSizeToken } from "./columnSizing";
27
+ export { resolveSimpleTableColumns } from "./columnSizing";
23
28
  import { Table, tableZebraFill } from "@multiplatform.one/table-primitives";
24
29
  import type { DataTableLayout } from "../../types";
25
30
  import { isInteractiveInnerTarget } from "../../utils/rowPress";
@@ -31,18 +36,8 @@ import { withInterp } from "../../utils/withInterp";
31
36
 
32
37
  type IntentName = "accent" | "error" | "warning" | "success";
33
38
 
34
- export interface SimpleTableColumn {
35
- /** Key to access the value from each data object */
36
- accessorKey: string;
37
- /** Header label to display */
38
- header: string;
39
- /** Text alignment for the column */
40
- align?: "left" | "center" | "right";
41
- /** Optional cell renderer. Strings/numbers still pick up table type + align. */
42
- cell?: (value: unknown, row: Record<string, any>, rowIndex: number) => ReactNode;
43
- }
44
-
45
39
  export interface SimpleTableProps extends ViewProps {
40
+ onLayout?: (event: LayoutChangeEvent) => void;
46
41
  /** Array of data objects to render */
47
42
  data: Array<Record<string, any>>;
48
43
  /** Column configuration */
@@ -164,7 +159,7 @@ function AlignedCellText({
164
159
  }
165
160
 
166
161
  function renderCellContent(
167
- col: SimpleTableColumn,
162
+ col: Omit<SimpleTableColumn, "width">,
168
163
  row: Record<string, any>,
169
164
  rowIndex: number,
170
165
  body: KnobBody,
@@ -194,7 +189,7 @@ function useSimpleTableRowPress({
194
189
  disabled,
195
190
  }: {
196
191
  data: Array<Record<string, any>>;
197
- columns: SimpleTableColumn[];
192
+ columns: Pick<SimpleTableColumn, "accessorKey">[];
198
193
  onRowPress?: (row: Record<string, any>, rowIndex: number) => void;
199
194
  rowLabel?: (row: Record<string, any>) => string;
200
195
  disabled?: boolean;
@@ -332,7 +327,7 @@ function SimpleTableMobileCards({
332
327
  const tableZebraOn = knobProps.tableZebra === "on";
333
328
  const [titleCol, ...detailCols] = columns;
334
329
  const typeSize = knobProps.label.fontSize;
335
- const motion = transitionProps(knobProps.transition);
330
+ const motion = transitionProps(knobProps.motion.control);
336
331
 
337
332
  if (data.length === 0) {
338
333
  return (
@@ -346,7 +341,7 @@ function SimpleTableMobileCards({
346
341
  {caption}
347
342
  </Text>
348
343
  ) : null}
349
- <EmptyState compact aria-live="polite" title={t("No data available")} />
344
+ <EmptyState size="$3" aria-live="polite" title={t("No data available")} />
350
345
  </View>
351
346
  );
352
347
  }
@@ -445,6 +440,7 @@ function SimpleTableMobileCards({
445
440
  // ===========================================================================
446
441
 
447
442
  export interface SimpleTableDesktopProps extends ViewProps {
443
+ onLayout?: (event: LayoutChangeEvent) => void;
448
444
  /** Array of data objects to render */
449
445
  data: Array<Record<string, any>>;
450
446
  /** Column configuration */
@@ -461,15 +457,21 @@ export interface SimpleTableDesktopProps extends ViewProps {
461
457
  /** Desktop table layout using Layer 1 Table primitives. Exported for testing. */
462
458
  export function SimpleTableDesktop({
463
459
  data,
464
- columns,
460
+ columns: columnDefinitions,
465
461
  caption,
466
462
  onRowPress,
467
463
  rowLabel,
468
464
  getRowId,
469
465
  disabled,
466
+ onLayout,
470
467
  ...props
471
468
  }: SimpleTableDesktopProps) {
472
469
  const { knobProps, disabledState } = useResolvedKnobs({ component: "SimpleTable" });
470
+ const [viewportWidth, setViewportWidth] = useState(0);
471
+ const columns = resolveSimpleTableColumns(columnDefinitions, data, viewportWidth, (token) =>
472
+ Number(getTokenValue(token as Parameters<typeof getTokenValue>[0], "size")),
473
+ );
474
+ const tableWidth = columns.reduce((sum, column) => sum + column.width, 0);
473
475
  const { t } = useTranslation();
474
476
  const { rowPressActive, getRowPressProps } = useSimpleTableRowPress({
475
477
  data,
@@ -481,116 +483,187 @@ export function SimpleTableDesktop({
481
483
  const tableZebraOn = knobProps.tableZebra === "on";
482
484
  const ariaLabel = caption ? undefined : props["aria-label"];
483
485
  const typeSize = knobProps.label.fontSize;
484
- const motion = transitionProps(knobProps.transition);
486
+ const motion = transitionProps(knobProps.motion.control);
485
487
  const pad = cellPad(knobProps.gap.gap);
486
488
  const frameBorder = knobProps.surface.borderWidth;
487
489
 
488
490
  return (
489
- <Table
490
- {...props}
491
+ <View
491
492
  minWidth={0}
492
- {...({
493
- overflow: "auto",
494
- "data-simple-table-frame": "true",
495
- "data-border-width": String(frameBorder),
496
- "data-animation": knobProps.transition ? "on" : "none",
497
- } as Record<string, unknown>)}
498
- {...disabledChrome(Boolean(disabled), disabledState)}
499
- aria-label={ariaLabel}
500
- {...({ "aria-rowcount": data.length + 1 } as any)}
493
+ onLayout={(event) => {
494
+ setViewportWidth(Math.max(0, event.nativeEvent.layout.width - frameBorder * 2));
495
+ onLayout?.(event);
496
+ }}
497
+ {...props}
501
498
  >
502
- {caption ? (
503
- <Table.Caption>
504
- <Text {...knobProps.label} color={knobProps.textAccentColor}>
505
- {caption}
506
- </Text>
507
- </Table.Caption>
508
- ) : null}
509
- <Table.Head borderBottomWidth={frameBorder} borderBottomColor="$borderColor">
510
- <Table.Row>
511
- {columns.map((col, colIndex) => (
512
- <Table.HeaderCell
513
- key={col.accessorKey}
514
- justifyContent={alignToFlex(col.align)}
515
- cellLocation={cellLocationFor(colIndex, columns.length)}
516
- data-align={col.align ?? "left"}
517
- data-cell-pad={knobProps.gap.gap}
518
- borderRadius={0}
519
- {...pad}
520
- >
521
- {/* Block text filling the cell + textAlign: alignment that
522
- works in the real <th> (display:table-cell — flex props
523
- are inert there) and in the flex displayMode alike. */}
524
- <Text
525
- {...knobProps.label}
526
- color={knobProps.textAccentColor}
527
- display="block"
528
- width="100%"
529
- textAlign={col.align ?? "left"}
530
- numberOfLines={1}
531
- ellipsizeMode="tail"
532
- {...(col.align === "right" ? ({ fontVariant: ["tabular-nums"] } as any) : {})}
533
- >
534
- {col.header}
499
+ <ScrollFrame>
500
+ <Table
501
+ displayMode="flex"
502
+ width={tableWidth}
503
+ minWidth={tableWidth}
504
+ {...({
505
+ overflow: "visible",
506
+ "data-simple-table-frame": "true",
507
+ "data-border-width": String(frameBorder),
508
+ "data-animation": knobProps.motion.control.transition ? "on" : "none",
509
+ } as Record<string, unknown>)}
510
+ {...disabledChrome(Boolean(disabled), disabledState)}
511
+ aria-label={ariaLabel}
512
+ {...({ "aria-rowcount": data.length + 1 } as any)}
513
+ >
514
+ {caption ? (
515
+ <Table.Caption>
516
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
517
+ {caption}
535
518
  </Text>
536
- </Table.HeaderCell>
537
- ))}
538
- </Table.Row>
539
- </Table.Head>
540
- <Table.Body {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}>
541
- {data.length === 0 ? (
542
- <Table.Row>
543
- <Table.Cell
544
- cellWidth="auto"
545
- borderRadius={0}
546
- {...({ colSpan: Math.max(columns.length, 1) } as any)}
547
- >
548
- <EmptyState compact aria-live="polite" title={t("No data available")} />
549
- </Table.Cell>
550
- </Table.Row>
551
- ) : (
552
- data.map((row, rowIndex) => {
553
- const intent = row._intent as IntentName | undefined;
554
- const intentProps = intent ? { [intent]: true } : {};
555
- const isLast = rowIndex === data.length - 1;
556
- const zebraFill =
557
- !intent && tableZebraOn && rowIndex % 2 === 1
558
- ? { backgroundColor: tableZebraFill(knobProps.surface.backgroundColor) }
559
- : {};
560
-
561
- return (
562
- <Table.Row
563
- key={resolveRowId(row, rowIndex, getRowId)}
564
- rowLocation={rowLocationFor(rowIndex, data.length)}
565
- {...(disabled ? {} : { hoverStyle: { backgroundColor: "$backgroundHover" } })}
566
- {...motion}
567
- {...zebraFill}
568
- {...intentProps}
569
- {...({
570
- "data-table-zebra": tableZebraOn ? (rowIndex % 2 === 0 ? "even" : "odd") : "off",
571
- } as any)}
572
- {...(getRowPressProps(row, rowIndex) as any)}
573
- >
574
- {columns.map((col, colIndex) => (
575
- <Table.Cell
519
+ </Table.Caption>
520
+ ) : null}
521
+ <Table.Head borderBottomWidth={frameBorder} borderBottomColor="$borderColor">
522
+ <Table.Row alignItems="stretch">
523
+ {columns.map((col, colIndex) => {
524
+ const cell = (
525
+ <Table.HeaderCell
576
526
  key={col.accessorKey}
527
+ cellWidth={col.width}
528
+ flexShrink={0}
577
529
  justifyContent={alignToFlex(col.align)}
578
530
  cellLocation={cellLocationFor(colIndex, columns.length)}
579
531
  data-align={col.align ?? "left"}
580
532
  data-cell-pad={knobProps.gap.gap}
581
533
  borderRadius={0}
582
534
  {...pad}
583
- {...gridRule(frameBorder, !isLast)}
584
535
  >
585
- {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
586
- </Table.Cell>
587
- ))}
536
+ {/* Block text filling the cell + textAlign: alignment that
537
+ works in the real <th> (display:table-cell — flex props
538
+ are inert there) and in the flex displayMode alike. */}
539
+ <Text
540
+ {...knobProps.label}
541
+ color={knobProps.textAccentColor}
542
+ display="block"
543
+ width="100%"
544
+ textAlign={col.align ?? "left"}
545
+ numberOfLines={1}
546
+ ellipsizeMode="tail"
547
+ {...(col.align === "right" ? ({ fontVariant: ["tabular-nums"] } as any) : {})}
548
+ >
549
+ {col.header}
550
+ </Text>
551
+ </Table.HeaderCell>
552
+ );
553
+ return colIndex === 0 ? (
554
+ <PinnedCell key={col.accessorKey} width={col.width}>
555
+ {cell}
556
+ </PinnedCell>
557
+ ) : (
558
+ cell
559
+ );
560
+ })}
561
+ </Table.Row>
562
+ </Table.Head>
563
+ <Table.Body
564
+ overflow="visible"
565
+ overflowX="visible"
566
+ overflowY="visible"
567
+ {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}
568
+ >
569
+ {data.length === 0 ? (
570
+ <Table.Row>
571
+ <Table.Cell
572
+ cellWidth="auto"
573
+ borderRadius={0}
574
+ {...({ colSpan: Math.max(columns.length, 1) } as any)}
575
+ >
576
+ <EmptyState size="$3" aria-live="polite" title={t("No data available")} />
577
+ </Table.Cell>
588
578
  </Table.Row>
589
- );
590
- })
591
- )}
592
- </Table.Body>
593
- </Table>
579
+ ) : (
580
+ data.map((row, rowIndex) => {
581
+ const intent = row._intent as IntentName | undefined;
582
+ const intentProps = intent ? { [intent]: true } : {};
583
+ const isLast = rowIndex === data.length - 1;
584
+ const zebraFill =
585
+ !intent && tableZebraOn && rowIndex % 2 === 1
586
+ ? { backgroundColor: tableZebraFill(knobProps.surface.backgroundColor) }
587
+ : {};
588
+
589
+ return (
590
+ <Table.Row
591
+ key={resolveRowId(row, rowIndex, getRowId)}
592
+ rowLocation={rowLocationFor(rowIndex, data.length)}
593
+ alignItems="stretch"
594
+ group="simpleTableRow"
595
+ backgroundColor={
596
+ intent ? "$color3" : (zebraFill.backgroundColor ?? "$background")
597
+ }
598
+ {...(disabled ? {} : { hoverStyle: { backgroundColor: "$backgroundHover" } })}
599
+ {...motion}
600
+ {...zebraFill}
601
+ {...intentProps}
602
+ {...({
603
+ "data-table-zebra": tableZebraOn
604
+ ? rowIndex % 2 === 0
605
+ ? "even"
606
+ : "odd"
607
+ : "off",
608
+ } as any)}
609
+ {...(getRowPressProps(row, rowIndex) as any)}
610
+ >
611
+ {columns.map((col, colIndex) => {
612
+ const cell = (
613
+ <Table.Cell
614
+ key={col.accessorKey}
615
+ cellWidth={col.width}
616
+ flexShrink={0}
617
+ {...(colIndex === 0
618
+ ? {
619
+ backgroundColor: isWeb
620
+ ? "inherit"
621
+ : intent
622
+ ? "$color3"
623
+ : (zebraFill.backgroundColor ?? "$background"),
624
+ ...(!isWeb && !disabled
625
+ ? {
626
+ "$group-simpleTableRow-hover": {
627
+ backgroundColor: "$backgroundHover",
628
+ },
629
+ ...(rowPressActive
630
+ ? {
631
+ "$group-simpleTableRow-press": {
632
+ backgroundColor: "$backgroundPress",
633
+ },
634
+ }
635
+ : {}),
636
+ }
637
+ : {}),
638
+ }
639
+ : {})}
640
+ justifyContent={alignToFlex(col.align)}
641
+ cellLocation={cellLocationFor(colIndex, columns.length)}
642
+ data-align={col.align ?? "left"}
643
+ data-cell-pad={knobProps.gap.gap}
644
+ borderRadius={0}
645
+ {...pad}
646
+ {...gridRule(frameBorder, !isLast)}
647
+ >
648
+ {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
649
+ </Table.Cell>
650
+ );
651
+ return colIndex === 0 ? (
652
+ <PinnedCell key={col.accessorKey} width={col.width}>
653
+ {cell}
654
+ </PinnedCell>
655
+ ) : (
656
+ cell
657
+ );
658
+ })}
659
+ </Table.Row>
660
+ );
661
+ })
662
+ )}
663
+ </Table.Body>
664
+ </Table>
665
+ </ScrollFrame>
666
+ </View>
594
667
  );
595
668
  }
596
669
 
@@ -622,7 +695,7 @@ export function SimpleTable({
622
695
  {...({
623
696
  "data-simple-table-frame": "true",
624
697
  "data-border-width": String(knobProps.surface.borderWidth),
625
- "data-animation": knobProps.transition ? "on" : "none",
698
+ "data-animation": knobProps.motion.control.transition ? "on" : "none",
626
699
  } as Record<string, unknown>)}
627
700
  >
628
701
  <SimpleTableMobileCards
@@ -15,6 +15,49 @@ import { SimpleTable, SimpleTableDesktop } from "./index";
15
15
  import type { SimpleTableColumn } from "./index";
16
16
 
17
17
  describe("SimpleTable", () => {
18
+ it("gives numbers narrow, right-aligned columns and text the remaining width", () => {
19
+ const { container } = renderWithProviders(
20
+ <SimpleTableDesktop
21
+ columns={[
22
+ { accessorKey: "name", header: "Pokemon Name" },
23
+ { accessorKey: "id", header: "Poke ID" },
24
+ { accessorKey: "weight", header: "Weight" },
25
+ ]}
26
+ data={[{ name: "Pikachu", id: 25, weight: 60 }]}
27
+ />,
28
+ );
29
+ const headers = container.querySelectorAll<HTMLElement>('[role="columnheader"]');
30
+ expect(headers[1].dataset.align).toBe("right");
31
+ expect(headers[2].dataset.align).toBe("right");
32
+ expect(parseFloat(getComputedStyle(headers[0]).width)).toBeGreaterThan(
33
+ parseFloat(getComputedStyle(headers[1]).width),
34
+ );
35
+ });
36
+
37
+ it("puts a single semantic table in a horizontal viewport with its first cells pinned", () => {
38
+ const { container } = renderWithProviders(
39
+ <SimpleTableDesktop
40
+ columns={[
41
+ { accessorKey: "name", header: "Name" },
42
+ { accessorKey: "id", header: "ID" },
43
+ ]}
44
+ data={[{ name: "Pikachu", id: 25 }]}
45
+ />,
46
+ );
47
+ const viewport = container.querySelector('[data-testid="simple-table-scroll"]');
48
+ expect(viewport).not.toBeNull();
49
+ expect(getComputedStyle(viewport as Element).overflowX).toBe("auto");
50
+ expect(container.querySelectorAll("table")).toHaveLength(1);
51
+ const body = container.querySelector("tbody") as Element;
52
+ expect(getComputedStyle(body).overflowX).toBe("visible");
53
+ expect(getComputedStyle(body).overflowY).toBe("visible");
54
+ for (const selector of ['[role="columnheader"]', '[role="cell"]']) {
55
+ expect(getComputedStyle(container.querySelector(selector) as Element).position).toBe(
56
+ "sticky",
57
+ );
58
+ }
59
+ });
60
+
18
61
  it("renders basic data with column config producing correct cells", () => {
19
62
  const columns: SimpleTableColumn[] = [
20
63
  { accessorKey: "name", header: "Name" },
@@ -226,8 +269,8 @@ describe("SimpleTable", () => {
226
269
  Array.from(card.classList).filter((name) => /^_bg-(background|color\d+)$/.test(name)),
227
270
  );
228
271
  };
229
- expect(cardFills("dark")).toEqual([["_bg-color2"], ["_bg-color3"]]);
230
- expect(cardFills("light")).toEqual([["_bg-background"], ["_bg-color2"]]);
272
+ expect(cardFills("dark")).toEqual([["_bg-background"], ["_bg-color3"]]);
273
+ expect(cardFills("light")).toEqual([["_bg-background"], ["_bg-color3"]]);
231
274
  });
232
275
 
233
276
  it("renders a custom cell renderer and a visible caption", () => {
@@ -384,7 +427,7 @@ describe("SimpleTable", () => {
384
427
  }
385
428
  });
386
429
 
387
- it("drops motion when animation is none and steps cell pad with space", () => {
430
+ it("drops motion when animation is none and pads cells with the gap role", () => {
388
431
  const columns: SimpleTableColumn[] = [
389
432
  { accessorKey: "name", header: "Name" },
390
433
  { accessorKey: "age", header: "Age" },
@@ -399,22 +442,7 @@ describe("SimpleTable", () => {
399
442
  expect(still.querySelector("[data-simple-table-frame]")?.getAttribute("data-animation")).toBe(
400
443
  "none",
401
444
  );
402
-
403
- const { container: small } = renderWithProviders(
404
- <Preset overrides={{ space: "small" }}>
405
- <SimpleTableDesktop data={data} columns={columns} />
406
- </Preset>,
407
- );
408
- const { container: large } = renderWithProviders(
409
- <Preset overrides={{ space: "large" }}>
410
- <SimpleTableDesktop data={data} columns={columns} />
411
- </Preset>,
412
- );
413
- const smallPad = small.querySelector("[data-cell-pad]")?.getAttribute("data-cell-pad");
414
- const largePad = large.querySelector("[data-cell-pad]")?.getAttribute("data-cell-pad");
415
- expect(smallPad).toBeTruthy();
416
- expect(largePad).toBeTruthy();
417
- expect(smallPad).not.toBe(largePad);
445
+ expect(still.querySelector("[data-cell-pad]")?.getAttribute("data-cell-pad")).toBe("$3");
418
446
  });
419
447
 
420
448
  it("disabled rows stay visible, inert, and visually distinct (LC-40)", () => {
@@ -24,11 +24,10 @@ export function RowDetailEditor<TData extends DataTableData>({
24
24
  rowIndex,
25
25
  columns,
26
26
  readOnly,
27
- compact,
28
27
  isCellHidden,
29
28
  onCommit,
30
29
  }: RowDetailEditorProps<TData>) {
31
- const { knobProps } = useResolvedKnobs({ compact });
30
+ const { knobProps } = useResolvedKnobs();
32
31
  const [draft, setDraft] = useState<TData | null>(null);
33
32
  const draftRef = useRef(draft);
34
33
  draftRef.current = draft;
@@ -109,7 +108,6 @@ export function RowDetailEditor<TData extends DataTableData>({
109
108
  field={(col.field || "input") as DataTableField}
110
109
  fieldProps={col.fieldProps as DataTableFieldProps | undefined}
111
110
  readOnly={readOnly}
112
- compact={false}
113
111
  columnId={columnId}
114
112
  columnLabel={label}
115
113
  rowIndex={rowIndex}