@multiplatform.one/table 7.34.4 → 7.35.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 (396) 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 +149 -96
  72. package/dist/cjs/components/SimpleTable/index.native.js +163 -109
  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/esm/components/ChildTable/index.mjs +26 -23
  81. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  82. package/dist/esm/components/ChildTable/index.native.js +26 -23
  83. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  84. package/dist/esm/components/DataTable/DataTableCardControls.mjs +3 -8
  85. package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
  86. package/dist/esm/components/DataTable/DataTableCardControls.native.js +3 -8
  87. package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
  88. package/dist/esm/components/DataTable/DataTableContext.mjs +1 -2
  89. package/dist/esm/components/DataTable/DataTableContext.mjs.map +1 -1
  90. package/dist/esm/components/DataTable/DataTableContext.native.js +1 -2
  91. package/dist/esm/components/DataTable/DataTableContext.native.js.map +1 -1
  92. package/dist/esm/components/DataTable/DataTableDocumentList.mjs +52 -22
  93. package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  94. package/dist/esm/components/DataTable/DataTableDocumentList.native.js +61 -29
  95. package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  96. package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs +1 -1
  97. package/dist/esm/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
  98. package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js +1 -1
  99. package/dist/esm/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
  100. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -11
  101. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  102. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +5 -11
  103. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  104. package/dist/esm/components/DataTable/DataTableRoot.mjs +603 -608
  105. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  106. package/dist/esm/components/DataTable/DataTableRoot.native.js +707 -712
  107. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  108. package/dist/esm/components/DataTable/DataTableVirtualized.mjs +4 -3
  109. package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  110. package/dist/esm/components/DataTable/DataTableVirtualized.native.js +4 -3
  111. package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  112. package/dist/esm/components/DataTable/documentListSlots.mjs +8 -1
  113. package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -1
  114. package/dist/esm/components/DataTable/documentListSlots.native.js +8 -1
  115. package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -1
  116. package/dist/esm/components/DataTable/index.native.js +265 -253
  117. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  118. package/dist/esm/components/DataTableCell/index.mjs +2 -5
  119. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  120. package/dist/esm/components/DataTableCell/index.native.js +2 -5
  121. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  122. package/dist/esm/components/DataTableColumnPinning/index.mjs +2 -1
  123. package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
  124. package/dist/esm/components/DataTableColumnPinning/index.native.js +2 -1
  125. package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
  126. package/dist/esm/components/DataTableFilterButton/index.mjs +4 -6
  127. package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
  128. package/dist/esm/components/DataTableFilterButton/index.native.js +4 -6
  129. package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
  130. package/dist/esm/components/DataTableFilterChips/index.mjs +0 -1
  131. package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
  132. package/dist/esm/components/DataTableFilterChips/index.native.js +0 -1
  133. package/dist/esm/components/DataTableFilters/index.mjs +12 -20
  134. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  135. package/dist/esm/components/DataTableFilters/index.native.js +12 -20
  136. package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
  137. package/dist/esm/components/DataTableGrouping/index.mjs +6 -6
  138. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  139. package/dist/esm/components/DataTableGrouping/index.native.js +8 -8
  140. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  141. package/dist/esm/components/DataTablePagination/index.mjs +15 -19
  142. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  143. package/dist/esm/components/DataTablePagination/index.native.js +15 -19
  144. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  145. package/dist/esm/components/DataTableSearch/index.mjs +5 -7
  146. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  147. package/dist/esm/components/DataTableSearch/index.native.js +5 -7
  148. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  149. package/dist/esm/components/DataTableToolbar/index.mjs +2 -10
  150. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  151. package/dist/esm/components/DataTableToolbar/index.native.js +2 -10
  152. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  153. package/dist/esm/components/DataTableViewOptions/index.mjs +6 -4
  154. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  155. package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
  156. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  157. package/dist/esm/components/KnobDialog.mjs +6 -36
  158. package/dist/esm/components/KnobDialog.mjs.map +1 -1
  159. package/dist/esm/components/KnobDialog.native.js +5 -36
  160. package/dist/esm/components/KnobDialog.native.js.map +1 -1
  161. package/dist/esm/components/SavedFilterDropdown.mjs +0 -1
  162. package/dist/esm/components/SavedFilterDropdown.mjs.map +1 -1
  163. package/dist/esm/components/SavedFilterDropdown.native.js +0 -1
  164. package/dist/esm/components/SavedFilterDropdown.native.js.map +1 -1
  165. package/dist/esm/components/SimpleTable/ScrollFrame.mjs +25 -0
  166. package/dist/esm/components/SimpleTable/ScrollFrame.mjs.map +1 -0
  167. package/dist/esm/components/SimpleTable/ScrollFrame.native.js +55 -0
  168. package/dist/esm/components/SimpleTable/ScrollFrame.native.js.map +1 -0
  169. package/dist/esm/components/SimpleTable/columnSizing.mjs +25 -0
  170. package/dist/esm/components/SimpleTable/columnSizing.mjs.map +1 -0
  171. package/dist/esm/components/SimpleTable/columnSizing.native.js +43 -0
  172. package/dist/esm/components/SimpleTable/columnSizing.native.js.map +1 -0
  173. package/dist/esm/components/SimpleTable/index.mjs +150 -97
  174. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  175. package/dist/esm/components/SimpleTable/index.native.js +164 -110
  176. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  177. package/dist/esm/components/TableInput/RowDetailEditor.mjs +1 -6
  178. package/dist/esm/components/TableInput/RowDetailEditor.mjs.map +1 -1
  179. package/dist/esm/components/TableInput/RowDetailEditor.native.js +1 -5
  180. package/dist/esm/components/TableInput/RowDetailEditor.native.js.map +1 -1
  181. package/dist/esm/components/TableInput/index.mjs +5 -20
  182. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  183. package/dist/esm/components/TableInput/index.native.js +3 -12
  184. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  185. package/dist/jsx/components/ChildTable/index.mjs +26 -23
  186. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  187. package/dist/jsx/components/ChildTable/index.native.js +26 -23
  188. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  189. package/dist/jsx/components/DataTable/DataTableCardControls.mjs +3 -8
  190. package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
  191. package/dist/jsx/components/DataTable/DataTableCardControls.native.js +3 -8
  192. package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
  193. package/dist/jsx/components/DataTable/DataTableContext.mjs +1 -2
  194. package/dist/jsx/components/DataTable/DataTableContext.mjs.map +1 -1
  195. package/dist/jsx/components/DataTable/DataTableContext.native.js +1 -2
  196. package/dist/jsx/components/DataTable/DataTableContext.native.js.map +1 -1
  197. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +52 -22
  198. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  199. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +59 -27
  200. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  201. package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs +1 -1
  202. package/dist/jsx/components/DataTable/DataTableInfiniteTail.mjs.map +1 -1
  203. package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js +1 -1
  204. package/dist/jsx/components/DataTable/DataTableInfiniteTail.native.js.map +1 -1
  205. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -11
  206. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  207. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +5 -11
  208. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  209. package/dist/jsx/components/DataTable/DataTableRoot.mjs +603 -608
  210. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  211. package/dist/jsx/components/DataTable/DataTableRoot.native.js +705 -710
  212. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  213. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +4 -3
  214. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  215. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +3 -2
  216. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  217. package/dist/jsx/components/DataTable/documentListSlots.mjs +8 -1
  218. package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -1
  219. package/dist/jsx/components/DataTable/documentListSlots.native.js +8 -1
  220. package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -1
  221. package/dist/jsx/components/DataTable/index.native.js +264 -252
  222. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  223. package/dist/jsx/components/DataTableCell/index.mjs +2 -5
  224. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  225. package/dist/jsx/components/DataTableCell/index.native.js +2 -5
  226. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  227. package/dist/jsx/components/DataTableColumnPinning/index.mjs +2 -1
  228. package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
  229. package/dist/jsx/components/DataTableColumnPinning/index.native.js +2 -1
  230. package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
  231. package/dist/jsx/components/DataTableFilterButton/index.mjs +4 -6
  232. package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
  233. package/dist/jsx/components/DataTableFilterButton/index.native.js +3 -5
  234. package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
  235. package/dist/jsx/components/DataTableFilterChips/index.mjs +0 -1
  236. package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
  237. package/dist/jsx/components/DataTableFilterChips/index.native.js +0 -1
  238. package/dist/jsx/components/DataTableFilters/index.mjs +12 -20
  239. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  240. package/dist/jsx/components/DataTableFilters/index.native.js +11 -19
  241. package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
  242. package/dist/jsx/components/DataTableGrouping/index.mjs +6 -6
  243. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  244. package/dist/jsx/components/DataTableGrouping/index.native.js +7 -7
  245. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  246. package/dist/jsx/components/DataTablePagination/index.mjs +15 -19
  247. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  248. package/dist/jsx/components/DataTablePagination/index.native.js +14 -18
  249. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  250. package/dist/jsx/components/DataTableSearch/index.mjs +5 -7
  251. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  252. package/dist/jsx/components/DataTableSearch/index.native.js +5 -7
  253. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  254. package/dist/jsx/components/DataTableToolbar/index.mjs +2 -10
  255. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  256. package/dist/jsx/components/DataTableToolbar/index.native.js +2 -10
  257. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  258. package/dist/jsx/components/DataTableViewOptions/index.mjs +6 -4
  259. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  260. package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
  261. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  262. package/dist/jsx/components/KnobDialog.mjs +6 -36
  263. package/dist/jsx/components/KnobDialog.mjs.map +1 -1
  264. package/dist/jsx/components/KnobDialog.native.js +3 -34
  265. package/dist/jsx/components/KnobDialog.native.js.map +1 -1
  266. package/dist/jsx/components/SavedFilterDropdown.mjs +0 -1
  267. package/dist/jsx/components/SavedFilterDropdown.mjs.map +1 -1
  268. package/dist/jsx/components/SavedFilterDropdown.native.js +0 -1
  269. package/dist/jsx/components/SavedFilterDropdown.native.js.map +1 -1
  270. package/dist/jsx/components/SimpleTable/ScrollFrame.mjs +25 -0
  271. package/dist/jsx/components/SimpleTable/ScrollFrame.mjs.map +1 -0
  272. package/dist/jsx/components/SimpleTable/ScrollFrame.native.js +84 -0
  273. package/dist/jsx/components/SimpleTable/ScrollFrame.native.js.map +1 -0
  274. package/dist/jsx/components/SimpleTable/columnSizing.mjs +25 -0
  275. package/dist/jsx/components/SimpleTable/columnSizing.mjs.map +1 -0
  276. package/dist/jsx/components/SimpleTable/columnSizing.native.js +71 -0
  277. package/dist/jsx/components/SimpleTable/columnSizing.native.js.map +1 -0
  278. package/dist/jsx/components/SimpleTable/index.mjs +150 -97
  279. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  280. package/dist/jsx/components/SimpleTable/index.native.js +163 -109
  281. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  282. package/dist/jsx/components/TableInput/RowDetailEditor.mjs +1 -6
  283. package/dist/jsx/components/TableInput/RowDetailEditor.mjs.map +1 -1
  284. package/dist/jsx/components/TableInput/RowDetailEditor.native.js +1 -5
  285. package/dist/jsx/components/TableInput/RowDetailEditor.native.js.map +1 -1
  286. package/dist/jsx/components/TableInput/index.mjs +5 -20
  287. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  288. package/dist/jsx/components/TableInput/index.native.js +2 -11
  289. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  290. package/package.json +12 -12
  291. package/src/components/ChildTable/ChildTable.stories.tsx +1 -2
  292. package/src/components/ChildTable/childTable.spec.tsx +2 -2
  293. package/src/components/ChildTable/childTable.zebra.spec.tsx +3 -3
  294. package/src/components/ChildTable/index.tsx +29 -26
  295. package/src/components/DataTable/DataTable.spec.tsx +49 -2
  296. package/src/components/DataTable/DataTable.stories.tsx +5 -5
  297. package/src/components/DataTable/DataTableCardControls.tsx +5 -10
  298. package/src/components/DataTable/DataTableContext.ts +5 -7
  299. package/src/components/DataTable/DataTableDocumentList.tsx +59 -21
  300. package/src/components/DataTable/DataTableInfiniteTail.tsx +1 -1
  301. package/src/components/DataTable/DataTableMobileCards.tsx +4 -9
  302. package/src/components/DataTable/DataTableRoot.tsx +900 -898
  303. package/src/components/DataTable/DataTableVirtualized.tsx +4 -2
  304. package/src/components/DataTable/FieldsInCells.stories.tsx +0 -1
  305. package/src/components/DataTable/compoundComponent.spec.tsx +7 -21
  306. package/src/components/DataTable/dataTableDocumentList.spec.tsx +78 -20
  307. package/src/components/DataTable/dataTableMobileCards.spec.tsx +19 -22
  308. package/src/components/DataTable/documentListSlots.ts +25 -6
  309. package/src/components/DataTable/footerLayout.spec.tsx +7 -7
  310. package/src/components/DataTable/index.native.tsx +329 -322
  311. package/src/components/DataTable/smallTableFooter.spec.tsx +61 -0
  312. package/src/components/DataTableCell/DataTableCell.stories.tsx +0 -2
  313. package/src/components/DataTableCell/index.tsx +3 -7
  314. package/src/components/DataTableColumnPinning/index.tsx +2 -1
  315. package/src/components/DataTableDateFilter/index.tsx +1 -1
  316. package/src/components/DataTableFilterButton/index.tsx +8 -5
  317. package/src/components/DataTableFilterChips/index.tsx +1 -1
  318. package/src/components/DataTableFilters/DataTableFilters.spec.tsx +3 -14
  319. package/src/components/DataTableFilters/DataTableFilters.stories.tsx +1 -6
  320. package/src/components/DataTableFilters/index.tsx +19 -17
  321. package/src/components/DataTableGrouping/index.tsx +9 -8
  322. package/src/components/DataTablePagination/DataTablePagination.spec.tsx +21 -11
  323. package/src/components/DataTablePagination/DataTablePagination.stories.tsx +2 -19
  324. package/src/components/DataTablePagination/DataTablePagination.width.spec.tsx +13 -13
  325. package/src/components/DataTablePagination/index.tsx +19 -15
  326. package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
  327. package/src/components/DataTableSearch/index.tsx +7 -7
  328. package/src/components/DataTableToolbar/index.tsx +1 -7
  329. package/src/components/DataTableViewOptions/DataTableViewOptions.spec.tsx +5 -5
  330. package/src/components/DataTableViewOptions/DataTableViewOptions.stories.tsx +1 -1
  331. package/src/components/DataTableViewOptions/index.tsx +15 -6
  332. package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.spec.tsx +17 -37
  333. package/src/components/KnobDialog.tsx +5 -37
  334. package/src/components/SavedFilterDropdown.tsx +0 -1
  335. package/src/components/SimpleTable/ScrollFrame.native.tsx +49 -0
  336. package/src/components/SimpleTable/ScrollFrame.tsx +18 -0
  337. package/src/components/SimpleTable/SimpleTable.stories.tsx +47 -0
  338. package/src/components/SimpleTable/columnSizing.spec.ts +73 -0
  339. package/src/components/SimpleTable/columnSizing.ts +39 -0
  340. package/src/components/SimpleTable/index.tsx +184 -112
  341. package/src/components/SimpleTable/simpleTable.spec.tsx +47 -19
  342. package/src/components/TableInput/RowDetailEditor.native.tsx +1 -3
  343. package/src/components/TableInput/RowDetailEditor.tsx +2 -10
  344. package/src/components/TableInput/index.native.tsx +3 -16
  345. package/src/components/TableInput/index.tsx +13 -24
  346. package/src/types.ts +7 -2
  347. package/types/components/ChildTable/index.d.ts +3 -1
  348. package/types/components/ChildTable/index.d.ts.map +1 -1
  349. package/types/components/DataTable/DataTableCardControls.d.ts +2 -3
  350. package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
  351. package/types/components/DataTable/DataTableContext.d.ts +4 -4
  352. package/types/components/DataTable/DataTableContext.d.ts.map +1 -1
  353. package/types/components/DataTable/DataTableDocumentList.d.ts +7 -4
  354. package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -1
  355. package/types/components/DataTable/DataTableMobileCards.d.ts +1 -2
  356. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  357. package/types/components/DataTable/DataTableRoot.d.ts +1 -3
  358. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  359. package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
  360. package/types/components/DataTable/documentListSlots.d.ts +7 -4
  361. package/types/components/DataTable/documentListSlots.d.ts.map +1 -1
  362. package/types/components/DataTable/index.native.d.ts +1 -1
  363. package/types/components/DataTable/index.native.d.ts.map +1 -1
  364. package/types/components/DataTableCell/index.d.ts +1 -3
  365. package/types/components/DataTableCell/index.d.ts.map +1 -1
  366. package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
  367. package/types/components/DataTableFilters/index.d.ts +6 -1
  368. package/types/components/DataTableFilters/index.d.ts.map +1 -1
  369. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  370. package/types/components/DataTablePagination/index.d.ts +8 -1
  371. package/types/components/DataTablePagination/index.d.ts.map +1 -1
  372. package/types/components/DataTableToolbar/index.d.ts +0 -1
  373. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  374. package/types/components/DataTableViewOptions/index.d.ts +6 -1
  375. package/types/components/DataTableViewOptions/index.d.ts.map +1 -1
  376. package/types/components/KnobDialog.d.ts +0 -7
  377. package/types/components/KnobDialog.d.ts.map +1 -1
  378. package/types/components/SavedFilterDropdown.d.ts.map +1 -1
  379. package/types/components/SimpleTable/ScrollFrame.d.ts +10 -0
  380. package/types/components/SimpleTable/ScrollFrame.d.ts.map +1 -0
  381. package/types/components/SimpleTable/ScrollFrame.native.d.ts +10 -0
  382. package/types/components/SimpleTable/ScrollFrame.native.d.ts.map +1 -0
  383. package/types/components/SimpleTable/columnSizing.d.ts +24 -0
  384. package/types/components/SimpleTable/columnSizing.d.ts.map +1 -0
  385. package/types/components/SimpleTable/index.d.ts +6 -12
  386. package/types/components/SimpleTable/index.d.ts.map +1 -1
  387. package/types/components/TableInput/RowDetailEditor.d.ts +1 -2
  388. package/types/components/TableInput/RowDetailEditor.d.ts.map +1 -1
  389. package/types/components/TableInput/RowDetailEditor.native.d.ts +1 -1
  390. package/types/components/TableInput/RowDetailEditor.native.d.ts.map +1 -1
  391. package/types/components/TableInput/index.d.ts +1 -6
  392. package/types/components/TableInput/index.d.ts.map +1 -1
  393. package/types/components/TableInput/index.native.d.ts +1 -6
  394. package/types/components/TableInput/index.native.d.ts.map +1 -1
  395. package/types/types.d.ts +7 -2
  396. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,39 @@
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
+ width?: SimpleTableSizeToken | { flex: number };
12
+ cell?: (value: unknown, row: Record<string, any>, rowIndex: number) => ReactNode;
13
+ }
14
+
15
+ export function resolveSimpleTableColumns(
16
+ columns: SimpleTableColumn[],
17
+ data: Array<Record<string, any>>,
18
+ viewportWidth: number,
19
+ tokenValue: (token: SimpleTableSizeToken) => number,
20
+ ) {
21
+ const resolved = columns.map((column) => {
22
+ const values = data.map((row) => row[column.accessorKey]).filter((value) => value != null);
23
+ const numeric = column.type
24
+ ? column.type === "number"
25
+ : values.length > 0 && values.every((value) => typeof value === "number");
26
+ const hint = column.width;
27
+ const minimum = tokenValue(typeof hint === "string" ? hint : numeric ? "$9" : "$14");
28
+ const requestedFlex = typeof hint === "object" ? hint.flex : numeric || hint ? 0 : 1;
29
+ const flex = Number.isFinite(requestedFlex) && requestedFlex > 0 ? requestedFlex : 0;
30
+ return { ...column, align: column.align ?? (numeric ? "right" : "left"), minimum, flex };
31
+ });
32
+ const minimumWidth = resolved.reduce((sum, column) => sum + column.minimum, 0);
33
+ const totalFlex = resolved.reduce((sum, column) => sum + column.flex, 0);
34
+ const spare = Math.max(0, viewportWidth - minimumWidth);
35
+ return resolved.map((column) => ({
36
+ ...column,
37
+ width: column.minimum + (totalFlex ? (spare * column.flex) / totalFlex : 0),
38
+ }));
39
+ }
@@ -17,9 +17,13 @@ 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";
23
27
  import { Table, tableZebraFill } from "@multiplatform.one/table-primitives";
24
28
  import type { DataTableLayout } from "../../types";
25
29
  import { isInteractiveInnerTarget } from "../../utils/rowPress";
@@ -31,18 +35,8 @@ import { withInterp } from "../../utils/withInterp";
31
35
 
32
36
  type IntentName = "accent" | "error" | "warning" | "success";
33
37
 
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
38
  export interface SimpleTableProps extends ViewProps {
39
+ onLayout?: (event: LayoutChangeEvent) => void;
46
40
  /** Array of data objects to render */
47
41
  data: Array<Record<string, any>>;
48
42
  /** Column configuration */
@@ -164,7 +158,7 @@ function AlignedCellText({
164
158
  }
165
159
 
166
160
  function renderCellContent(
167
- col: SimpleTableColumn,
161
+ col: Omit<SimpleTableColumn, "width">,
168
162
  row: Record<string, any>,
169
163
  rowIndex: number,
170
164
  body: KnobBody,
@@ -194,7 +188,7 @@ function useSimpleTableRowPress({
194
188
  disabled,
195
189
  }: {
196
190
  data: Array<Record<string, any>>;
197
- columns: SimpleTableColumn[];
191
+ columns: Pick<SimpleTableColumn, "accessorKey">[];
198
192
  onRowPress?: (row: Record<string, any>, rowIndex: number) => void;
199
193
  rowLabel?: (row: Record<string, any>) => string;
200
194
  disabled?: boolean;
@@ -332,7 +326,7 @@ function SimpleTableMobileCards({
332
326
  const tableZebraOn = knobProps.tableZebra === "on";
333
327
  const [titleCol, ...detailCols] = columns;
334
328
  const typeSize = knobProps.label.fontSize;
335
- const motion = transitionProps(knobProps.transition);
329
+ const motion = transitionProps(knobProps.motion.control);
336
330
 
337
331
  if (data.length === 0) {
338
332
  return (
@@ -346,7 +340,7 @@ function SimpleTableMobileCards({
346
340
  {caption}
347
341
  </Text>
348
342
  ) : null}
349
- <EmptyState compact aria-live="polite" title={t("No data available")} />
343
+ <EmptyState size="$3" aria-live="polite" title={t("No data available")} />
350
344
  </View>
351
345
  );
352
346
  }
@@ -445,6 +439,7 @@ function SimpleTableMobileCards({
445
439
  // ===========================================================================
446
440
 
447
441
  export interface SimpleTableDesktopProps extends ViewProps {
442
+ onLayout?: (event: LayoutChangeEvent) => void;
448
443
  /** Array of data objects to render */
449
444
  data: Array<Record<string, any>>;
450
445
  /** Column configuration */
@@ -461,15 +456,21 @@ export interface SimpleTableDesktopProps extends ViewProps {
461
456
  /** Desktop table layout using Layer 1 Table primitives. Exported for testing. */
462
457
  export function SimpleTableDesktop({
463
458
  data,
464
- columns,
459
+ columns: columnDefinitions,
465
460
  caption,
466
461
  onRowPress,
467
462
  rowLabel,
468
463
  getRowId,
469
464
  disabled,
465
+ onLayout,
470
466
  ...props
471
467
  }: SimpleTableDesktopProps) {
472
468
  const { knobProps, disabledState } = useResolvedKnobs({ component: "SimpleTable" });
469
+ const [viewportWidth, setViewportWidth] = useState(0);
470
+ const columns = resolveSimpleTableColumns(columnDefinitions, data, viewportWidth, (token) =>
471
+ Number(getTokenValue(token as Parameters<typeof getTokenValue>[0], "size")),
472
+ );
473
+ const tableWidth = columns.reduce((sum, column) => sum + column.width, 0);
473
474
  const { t } = useTranslation();
474
475
  const { rowPressActive, getRowPressProps } = useSimpleTableRowPress({
475
476
  data,
@@ -481,116 +482,187 @@ export function SimpleTableDesktop({
481
482
  const tableZebraOn = knobProps.tableZebra === "on";
482
483
  const ariaLabel = caption ? undefined : props["aria-label"];
483
484
  const typeSize = knobProps.label.fontSize;
484
- const motion = transitionProps(knobProps.transition);
485
+ const motion = transitionProps(knobProps.motion.control);
485
486
  const pad = cellPad(knobProps.gap.gap);
486
487
  const frameBorder = knobProps.surface.borderWidth;
487
488
 
488
489
  return (
489
- <Table
490
- {...props}
490
+ <View
491
491
  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)}
492
+ onLayout={(event) => {
493
+ setViewportWidth(Math.max(0, event.nativeEvent.layout.width - frameBorder * 2));
494
+ onLayout?.(event);
495
+ }}
496
+ {...props}
501
497
  >
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}
498
+ <ScrollFrame>
499
+ <Table
500
+ displayMode="flex"
501
+ width={tableWidth}
502
+ minWidth={tableWidth}
503
+ {...({
504
+ overflow: "visible",
505
+ "data-simple-table-frame": "true",
506
+ "data-border-width": String(frameBorder),
507
+ "data-animation": knobProps.motion.control.transition ? "on" : "none",
508
+ } as Record<string, unknown>)}
509
+ {...disabledChrome(Boolean(disabled), disabledState)}
510
+ aria-label={ariaLabel}
511
+ {...({ "aria-rowcount": data.length + 1 } as any)}
512
+ >
513
+ {caption ? (
514
+ <Table.Caption>
515
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
516
+ {caption}
535
517
  </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
518
+ </Table.Caption>
519
+ ) : null}
520
+ <Table.Head borderBottomWidth={frameBorder} borderBottomColor="$borderColor">
521
+ <Table.Row alignItems="stretch">
522
+ {columns.map((col, colIndex) => {
523
+ const cell = (
524
+ <Table.HeaderCell
576
525
  key={col.accessorKey}
526
+ cellWidth={col.width}
527
+ flexShrink={0}
577
528
  justifyContent={alignToFlex(col.align)}
578
529
  cellLocation={cellLocationFor(colIndex, columns.length)}
579
530
  data-align={col.align ?? "left"}
580
531
  data-cell-pad={knobProps.gap.gap}
581
532
  borderRadius={0}
582
533
  {...pad}
583
- {...gridRule(frameBorder, !isLast)}
584
534
  >
585
- {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
586
- </Table.Cell>
587
- ))}
535
+ {/* Block text filling the cell + textAlign: alignment that
536
+ works in the real <th> (display:table-cell — flex props
537
+ are inert there) and in the flex displayMode alike. */}
538
+ <Text
539
+ {...knobProps.label}
540
+ color={knobProps.textAccentColor}
541
+ display="block"
542
+ width="100%"
543
+ textAlign={col.align ?? "left"}
544
+ numberOfLines={1}
545
+ ellipsizeMode="tail"
546
+ {...(col.align === "right" ? ({ fontVariant: ["tabular-nums"] } as any) : {})}
547
+ >
548
+ {col.header}
549
+ </Text>
550
+ </Table.HeaderCell>
551
+ );
552
+ return colIndex === 0 ? (
553
+ <PinnedCell key={col.accessorKey} width={col.width}>
554
+ {cell}
555
+ </PinnedCell>
556
+ ) : (
557
+ cell
558
+ );
559
+ })}
560
+ </Table.Row>
561
+ </Table.Head>
562
+ <Table.Body
563
+ overflow="visible"
564
+ overflowX="visible"
565
+ overflowY="visible"
566
+ {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}
567
+ >
568
+ {data.length === 0 ? (
569
+ <Table.Row>
570
+ <Table.Cell
571
+ cellWidth="auto"
572
+ borderRadius={0}
573
+ {...({ colSpan: Math.max(columns.length, 1) } as any)}
574
+ >
575
+ <EmptyState size="$3" aria-live="polite" title={t("No data available")} />
576
+ </Table.Cell>
588
577
  </Table.Row>
589
- );
590
- })
591
- )}
592
- </Table.Body>
593
- </Table>
578
+ ) : (
579
+ data.map((row, rowIndex) => {
580
+ const intent = row._intent as IntentName | undefined;
581
+ const intentProps = intent ? { [intent]: true } : {};
582
+ const isLast = rowIndex === data.length - 1;
583
+ const zebraFill =
584
+ !intent && tableZebraOn && rowIndex % 2 === 1
585
+ ? { backgroundColor: tableZebraFill(knobProps.surface.backgroundColor) }
586
+ : {};
587
+
588
+ return (
589
+ <Table.Row
590
+ key={resolveRowId(row, rowIndex, getRowId)}
591
+ rowLocation={rowLocationFor(rowIndex, data.length)}
592
+ alignItems="stretch"
593
+ group="simpleTableRow"
594
+ backgroundColor={
595
+ intent ? "$color3" : (zebraFill.backgroundColor ?? "$background")
596
+ }
597
+ {...(disabled ? {} : { hoverStyle: { backgroundColor: "$backgroundHover" } })}
598
+ {...motion}
599
+ {...zebraFill}
600
+ {...intentProps}
601
+ {...({
602
+ "data-table-zebra": tableZebraOn
603
+ ? rowIndex % 2 === 0
604
+ ? "even"
605
+ : "odd"
606
+ : "off",
607
+ } as any)}
608
+ {...(getRowPressProps(row, rowIndex) as any)}
609
+ >
610
+ {columns.map((col, colIndex) => {
611
+ const cell = (
612
+ <Table.Cell
613
+ key={col.accessorKey}
614
+ cellWidth={col.width}
615
+ flexShrink={0}
616
+ {...(colIndex === 0
617
+ ? {
618
+ backgroundColor: isWeb
619
+ ? "inherit"
620
+ : intent
621
+ ? "$color3"
622
+ : (zebraFill.backgroundColor ?? "$background"),
623
+ ...(!isWeb && !disabled
624
+ ? {
625
+ "$group-simpleTableRow-hover": {
626
+ backgroundColor: "$backgroundHover",
627
+ },
628
+ ...(rowPressActive
629
+ ? {
630
+ "$group-simpleTableRow-press": {
631
+ backgroundColor: "$backgroundPress",
632
+ },
633
+ }
634
+ : {}),
635
+ }
636
+ : {}),
637
+ }
638
+ : {})}
639
+ justifyContent={alignToFlex(col.align)}
640
+ cellLocation={cellLocationFor(colIndex, columns.length)}
641
+ data-align={col.align ?? "left"}
642
+ data-cell-pad={knobProps.gap.gap}
643
+ borderRadius={0}
644
+ {...pad}
645
+ {...gridRule(frameBorder, !isLast)}
646
+ >
647
+ {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
648
+ </Table.Cell>
649
+ );
650
+ return colIndex === 0 ? (
651
+ <PinnedCell key={col.accessorKey} width={col.width}>
652
+ {cell}
653
+ </PinnedCell>
654
+ ) : (
655
+ cell
656
+ );
657
+ })}
658
+ </Table.Row>
659
+ );
660
+ })
661
+ )}
662
+ </Table.Body>
663
+ </Table>
664
+ </ScrollFrame>
665
+ </View>
594
666
  );
595
667
  }
596
668
 
@@ -622,7 +694,7 @@ export function SimpleTable({
622
694
  {...({
623
695
  "data-simple-table-frame": "true",
624
696
  "data-border-width": String(knobProps.surface.borderWidth),
625
- "data-animation": knobProps.transition ? "on" : "none",
697
+ "data-animation": knobProps.motion.control.transition ? "on" : "none",
626
698
  } as Record<string, unknown>)}
627
699
  >
628
700
  <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}
@@ -36,7 +36,6 @@ export interface RowDetailEditorProps<TData extends DataTableData> {
36
36
  rowIndex: number;
37
37
  columns: DataTableColumn<TData>[];
38
38
  readOnly: boolean;
39
- compact: boolean;
40
39
  isCellHidden?: ChildCellHidden<TData>;
41
40
  /** Receives the edited row once per session, only when a value changed. */
42
41
  onCommit: (row: TData, changed: string[]) => void;
@@ -47,11 +46,10 @@ export function RowDetailEditor<TData extends DataTableData>({
47
46
  rowIndex,
48
47
  columns,
49
48
  readOnly,
50
- compact,
51
49
  isCellHidden,
52
50
  onCommit,
53
51
  }: RowDetailEditorProps<TData>) {
54
- const { knobProps } = useResolvedKnobs({ compact });
52
+ const { knobProps } = useResolvedKnobs();
55
53
  const [draft, setDraft] = useState<TData | null>(null);
56
54
  const draftRef = useRef(draft);
57
55
  draftRef.current = draft;
@@ -105,12 +103,7 @@ export function RowDetailEditor<TData extends DataTableData>({
105
103
  return (
106
104
  <Dialog open={draft !== null} onOpenChange={handleOpenChange} modal>
107
105
  <Dialog.Trigger asChild>
108
- <Button
109
- chromeless
110
- compact={compact}
111
- hitSlop={knobProps.nestedControl.hitSlop}
112
- aria-label={triggerLabel}
113
- >
106
+ <Button chromeless hitSlop={knobProps.nestedControl.hitSlop} aria-label={triggerLabel}>
114
107
  <PencilSimpleIcon size={16} />
115
108
  </Button>
116
109
  </Dialog.Trigger>
@@ -143,7 +136,6 @@ export function RowDetailEditor<TData extends DataTableData>({
143
136
  field={(col.field || "input") as DataTableField}
144
137
  fieldProps={col.fieldProps as DataTableFieldProps | undefined}
145
138
  readOnly={readOnly}
146
- compact={false}
147
139
  columnId={columnId}
148
140
  columnLabel={label}
149
141
  rowIndex={rowIndex}