@multiplatform.one/table 7.4.0 → 7.5.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 (353) hide show
  1. package/dist/cjs/components/ChildTable/index.cjs +12 -3
  2. package/dist/cjs/components/ChildTable/index.native.js +14 -3
  3. package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
  4. package/dist/cjs/components/ColumnHeaderFilter/index.cjs +11 -13
  5. package/dist/cjs/components/ColumnHeaderFilter/index.native.js +11 -16
  6. package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
  7. package/dist/cjs/components/DataTable/DataTableCardControls.cjs +7 -4
  8. package/dist/cjs/components/DataTable/DataTableCardControls.native.js +7 -4
  9. package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
  10. package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +10 -4
  11. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +10 -4
  12. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  13. package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +6 -1
  14. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -1
  15. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  16. package/dist/cjs/components/DataTable/DataTableRoot.cjs +55 -42
  17. package/dist/cjs/components/DataTable/DataTableRoot.native.js +55 -42
  18. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  19. package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +5 -2
  20. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +5 -2
  21. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  22. package/dist/cjs/components/DataTable/dataTableChrome.cjs +59 -0
  23. package/dist/cjs/components/DataTable/dataTableChrome.native.js +62 -0
  24. package/dist/cjs/components/DataTable/dataTableChrome.native.js.map +1 -0
  25. package/dist/cjs/components/DataTable/index.native.js +34 -20
  26. package/dist/cjs/components/DataTable/index.native.js.map +1 -1
  27. package/dist/cjs/components/DataTableBulkActions/index.cjs +6 -4
  28. package/dist/cjs/components/DataTableBulkActions/index.native.js +6 -4
  29. package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
  30. package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +9 -31
  31. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +2 -5
  32. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  33. package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +0 -1
  34. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +0 -1
  35. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  36. package/dist/cjs/components/DataTableColumnPinning/index.cjs +7 -4
  37. package/dist/cjs/components/DataTableColumnPinning/index.native.js +7 -4
  38. package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
  39. package/dist/cjs/components/DataTableDateFilter/index.cjs +24 -22
  40. package/dist/cjs/components/DataTableDateFilter/index.native.js +24 -22
  41. package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
  42. package/dist/cjs/components/DataTableExport/index.cjs +42 -28
  43. package/dist/cjs/components/DataTableExport/index.native.js +42 -28
  44. package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
  45. package/dist/cjs/components/DataTableFacetMenu/index.cjs +10 -4
  46. package/dist/cjs/components/DataTableFacetMenu/index.native.js +10 -4
  47. package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -1
  48. package/dist/cjs/components/DataTableFilters/index.cjs +3 -3
  49. package/dist/cjs/components/DataTableFilters/index.native.js +3 -3
  50. package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
  51. package/dist/cjs/components/DataTableGrouping/index.cjs +46 -41
  52. package/dist/cjs/components/DataTableGrouping/index.native.js +46 -41
  53. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  54. package/dist/cjs/components/DataTablePagination/index.cjs +4 -2
  55. package/dist/cjs/components/DataTablePagination/index.native.js +4 -2
  56. package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
  57. package/dist/cjs/components/DataTableSearch/index.cjs +3 -3
  58. package/dist/cjs/components/DataTableSearch/index.native.js +3 -3
  59. package/dist/cjs/components/DataTableToolbar/index.cjs +19 -13
  60. package/dist/cjs/components/DataTableToolbar/index.native.js +19 -15
  61. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  62. package/dist/cjs/components/DataTableViewOptions/index.cjs +36 -35
  63. package/dist/cjs/components/DataTableViewOptions/index.native.js +36 -35
  64. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  65. package/dist/cjs/components/KnobDialog.cjs +1 -3
  66. package/dist/cjs/components/KnobDialog.native.js +1 -3
  67. package/dist/cjs/components/KnobDialog.native.js.map +1 -1
  68. package/dist/cjs/components/SimpleTable/index.cjs +159 -117
  69. package/dist/cjs/components/SimpleTable/index.native.js +168 -128
  70. package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
  71. package/dist/cjs/components/TableInput/index.cjs +159 -90
  72. package/dist/cjs/components/TableInput/index.native.js +3 -3
  73. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  74. package/dist/cjs/utils/chromeIcons.cjs +31 -0
  75. package/dist/cjs/utils/chromeIcons.native.js +34 -0
  76. package/dist/cjs/utils/chromeIcons.native.js.map +1 -0
  77. package/dist/esm/components/ChildTable/index.mjs +12 -3
  78. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  79. package/dist/esm/components/ChildTable/index.native.js +14 -3
  80. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  81. package/dist/esm/components/ColumnHeaderFilter/index.mjs +11 -13
  82. package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
  83. package/dist/esm/components/ColumnHeaderFilter/index.native.js +11 -16
  84. package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
  85. package/dist/esm/components/DataTable/DataTableCardControls.mjs +7 -4
  86. package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
  87. package/dist/esm/components/DataTable/DataTableCardControls.native.js +7 -4
  88. package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
  89. package/dist/esm/components/DataTable/DataTableDocumentList.mjs +10 -4
  90. package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  91. package/dist/esm/components/DataTable/DataTableDocumentList.native.js +10 -4
  92. package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  93. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +6 -1
  94. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  95. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -1
  96. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  97. package/dist/esm/components/DataTable/DataTableRoot.mjs +55 -42
  98. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  99. package/dist/esm/components/DataTable/DataTableRoot.native.js +55 -42
  100. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  101. package/dist/esm/components/DataTable/DataTableVirtualized.mjs +5 -2
  102. package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  103. package/dist/esm/components/DataTable/DataTableVirtualized.native.js +5 -2
  104. package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  105. package/dist/esm/components/DataTable/dataTableChrome.mjs +32 -0
  106. package/dist/esm/components/DataTable/dataTableChrome.mjs.map +1 -0
  107. package/dist/esm/components/DataTable/dataTableChrome.native.js +32 -0
  108. package/dist/esm/components/DataTable/dataTableChrome.native.js.map +1 -0
  109. package/dist/esm/components/DataTable/index.native.js +34 -20
  110. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  111. package/dist/esm/components/DataTableBulkActions/index.mjs +6 -4
  112. package/dist/esm/components/DataTableBulkActions/index.mjs.map +1 -1
  113. package/dist/esm/components/DataTableBulkActions/index.native.js +6 -4
  114. package/dist/esm/components/DataTableBulkActions/index.native.js.map +1 -1
  115. package/dist/esm/components/DataTableCell/CellModalEditor.mjs +11 -33
  116. package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  117. package/dist/esm/components/DataTableCell/CellModalEditor.native.js +2 -5
  118. package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  119. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +0 -1
  120. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  121. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +0 -1
  122. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  123. package/dist/esm/components/DataTableColumnPinning/index.mjs +7 -4
  124. package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
  125. package/dist/esm/components/DataTableColumnPinning/index.native.js +7 -4
  126. package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
  127. package/dist/esm/components/DataTableDateFilter/index.mjs +24 -22
  128. package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
  129. package/dist/esm/components/DataTableDateFilter/index.native.js +24 -22
  130. package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
  131. package/dist/esm/components/DataTableExport/index.mjs +43 -29
  132. package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
  133. package/dist/esm/components/DataTableExport/index.native.js +43 -29
  134. package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
  135. package/dist/esm/components/DataTableFacetMenu/index.mjs +10 -4
  136. package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -1
  137. package/dist/esm/components/DataTableFacetMenu/index.native.js +10 -4
  138. package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -1
  139. package/dist/esm/components/DataTableFilters/index.mjs +3 -3
  140. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  141. package/dist/esm/components/DataTableFilters/index.native.js +3 -3
  142. package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
  143. package/dist/esm/components/DataTableGrouping/index.mjs +47 -42
  144. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  145. package/dist/esm/components/DataTableGrouping/index.native.js +47 -42
  146. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  147. package/dist/esm/components/DataTablePagination/index.mjs +4 -2
  148. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  149. package/dist/esm/components/DataTablePagination/index.native.js +4 -2
  150. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  151. package/dist/esm/components/DataTableSearch/index.mjs +3 -3
  152. package/dist/esm/components/DataTableSearch/index.native.js +3 -3
  153. package/dist/esm/components/DataTableToolbar/index.mjs +19 -13
  154. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  155. package/dist/esm/components/DataTableToolbar/index.native.js +19 -15
  156. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  157. package/dist/esm/components/DataTableViewOptions/index.mjs +36 -35
  158. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  159. package/dist/esm/components/DataTableViewOptions/index.native.js +36 -35
  160. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  161. package/dist/esm/components/KnobDialog.mjs +1 -3
  162. package/dist/esm/components/KnobDialog.mjs.map +1 -1
  163. package/dist/esm/components/KnobDialog.native.js +1 -3
  164. package/dist/esm/components/KnobDialog.native.js.map +1 -1
  165. package/dist/esm/components/SimpleTable/index.mjs +160 -118
  166. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  167. package/dist/esm/components/SimpleTable/index.native.js +169 -129
  168. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  169. package/dist/esm/components/TableInput/index.mjs +160 -91
  170. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  171. package/dist/esm/components/TableInput/index.native.js +3 -3
  172. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  173. package/dist/esm/utils/chromeIcons.mjs +6 -0
  174. package/dist/esm/utils/chromeIcons.mjs.map +1 -0
  175. package/dist/esm/utils/chromeIcons.native.js +6 -0
  176. package/dist/esm/utils/chromeIcons.native.js.map +1 -0
  177. package/dist/jsx/components/ChildTable/index.mjs +12 -3
  178. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  179. package/dist/jsx/components/ChildTable/index.native.js +14 -3
  180. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  181. package/dist/jsx/components/ColumnHeaderFilter/index.mjs +11 -13
  182. package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
  183. package/dist/jsx/components/ColumnHeaderFilter/index.native.js +11 -16
  184. package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
  185. package/dist/jsx/components/DataTable/DataTableCardControls.mjs +7 -4
  186. package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
  187. package/dist/jsx/components/DataTable/DataTableCardControls.native.js +7 -4
  188. package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
  189. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +10 -4
  190. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -1
  191. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +10 -4
  192. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -1
  193. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +6 -1
  194. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  195. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -1
  196. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  197. package/dist/jsx/components/DataTable/DataTableRoot.mjs +55 -42
  198. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  199. package/dist/jsx/components/DataTable/DataTableRoot.native.js +55 -42
  200. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  201. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +5 -2
  202. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  203. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +5 -2
  204. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  205. package/dist/jsx/components/DataTable/dataTableChrome.mjs +32 -0
  206. package/dist/jsx/components/DataTable/dataTableChrome.mjs.map +1 -0
  207. package/dist/jsx/components/DataTable/dataTableChrome.native.js +62 -0
  208. package/dist/jsx/components/DataTable/dataTableChrome.native.js.map +1 -0
  209. package/dist/jsx/components/DataTable/index.native.js +34 -20
  210. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  211. package/dist/jsx/components/DataTableBulkActions/index.mjs +6 -4
  212. package/dist/jsx/components/DataTableBulkActions/index.mjs.map +1 -1
  213. package/dist/jsx/components/DataTableBulkActions/index.native.js +6 -4
  214. package/dist/jsx/components/DataTableBulkActions/index.native.js.map +1 -1
  215. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +11 -33
  216. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  217. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +2 -5
  218. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  219. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +0 -1
  220. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  221. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +0 -1
  222. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  223. package/dist/jsx/components/DataTableColumnPinning/index.mjs +7 -4
  224. package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
  225. package/dist/jsx/components/DataTableColumnPinning/index.native.js +7 -4
  226. package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
  227. package/dist/jsx/components/DataTableDateFilter/index.mjs +24 -22
  228. package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
  229. package/dist/jsx/components/DataTableDateFilter/index.native.js +24 -22
  230. package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
  231. package/dist/jsx/components/DataTableExport/index.mjs +43 -29
  232. package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
  233. package/dist/jsx/components/DataTableExport/index.native.js +42 -28
  234. package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
  235. package/dist/jsx/components/DataTableFacetMenu/index.mjs +10 -4
  236. package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -1
  237. package/dist/jsx/components/DataTableFacetMenu/index.native.js +10 -4
  238. package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -1
  239. package/dist/jsx/components/DataTableFilters/index.mjs +3 -3
  240. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  241. package/dist/jsx/components/DataTableFilters/index.native.js +3 -3
  242. package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
  243. package/dist/jsx/components/DataTableGrouping/index.mjs +47 -42
  244. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  245. package/dist/jsx/components/DataTableGrouping/index.native.js +46 -41
  246. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  247. package/dist/jsx/components/DataTablePagination/index.mjs +4 -2
  248. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  249. package/dist/jsx/components/DataTablePagination/index.native.js +4 -2
  250. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  251. package/dist/jsx/components/DataTableSearch/index.mjs +3 -3
  252. package/dist/jsx/components/DataTableSearch/index.native.js +3 -3
  253. package/dist/jsx/components/DataTableToolbar/index.mjs +19 -13
  254. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  255. package/dist/jsx/components/DataTableToolbar/index.native.js +19 -15
  256. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  257. package/dist/jsx/components/DataTableViewOptions/index.mjs +36 -35
  258. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  259. package/dist/jsx/components/DataTableViewOptions/index.native.js +36 -35
  260. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  261. package/dist/jsx/components/KnobDialog.mjs +1 -3
  262. package/dist/jsx/components/KnobDialog.mjs.map +1 -1
  263. package/dist/jsx/components/KnobDialog.native.js +1 -3
  264. package/dist/jsx/components/KnobDialog.native.js.map +1 -1
  265. package/dist/jsx/components/SimpleTable/index.mjs +160 -118
  266. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  267. package/dist/jsx/components/SimpleTable/index.native.js +168 -128
  268. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  269. package/dist/jsx/components/TableInput/index.mjs +160 -91
  270. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  271. package/dist/jsx/components/TableInput/index.native.js +3 -3
  272. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  273. package/dist/jsx/utils/chromeIcons.mjs +6 -0
  274. package/dist/jsx/utils/chromeIcons.mjs.map +1 -0
  275. package/dist/jsx/utils/chromeIcons.native.js +34 -0
  276. package/dist/jsx/utils/chromeIcons.native.js.map +1 -0
  277. package/package.json +12 -12
  278. package/src/components/ChildTable/ChildTable.stories.tsx +144 -0
  279. package/src/components/ChildTable/childTable.reorder.spec.tsx +65 -0
  280. package/src/components/ChildTable/childTable.spec.tsx +108 -0
  281. package/src/components/ChildTable/index.tsx +21 -2
  282. package/src/components/ColumnHeaderFilter/index.tsx +9 -14
  283. package/src/components/DataTable/DataTableCardControls.tsx +19 -16
  284. package/src/components/DataTable/DataTableDocumentList.tsx +7 -4
  285. package/src/components/DataTable/DataTableMobileCards.tsx +3 -1
  286. package/src/components/DataTable/DataTableRoot.tsx +52 -41
  287. package/src/components/DataTable/DataTableVirtualized.tsx +6 -2
  288. package/src/components/DataTable/FieldsInCells.stories.tsx +10 -5
  289. package/src/components/DataTable/dataTableChrome.ts +48 -0
  290. package/src/components/DataTable/designLaw.spec.tsx +114 -0
  291. package/src/components/DataTable/index.native.tsx +46 -20
  292. package/src/components/DataTableBulkActions/index.tsx +5 -3
  293. package/src/components/DataTableCell/CellModalEditor.native.tsx +3 -6
  294. package/src/components/DataTableCell/CellModalEditor.tsx +11 -22
  295. package/src/components/DataTableCell/CellOptionsEditor.tsx +0 -1
  296. package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +8 -1
  297. package/src/components/DataTableCell/cellModalEditor.spec.tsx +82 -0
  298. package/src/components/DataTableCell/dataTableCell.spec.tsx +8 -1
  299. package/src/components/DataTableColumnPinning/index.tsx +6 -4
  300. package/src/components/DataTableDateFilter/index.tsx +19 -17
  301. package/src/components/DataTableExport/DataTableExport.spec.tsx +29 -0
  302. package/src/components/DataTableExport/index.tsx +47 -23
  303. package/src/components/DataTableFacetMenu/index.tsx +13 -4
  304. package/src/components/DataTableFilters/index.tsx +3 -3
  305. package/src/components/DataTableGrouping/index.tsx +42 -35
  306. package/src/components/DataTablePagination/index.tsx +2 -2
  307. package/src/components/DataTableSearch/index.tsx +3 -3
  308. package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +20 -0
  309. package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +1 -9
  310. package/src/components/DataTableToolbar/index.tsx +19 -14
  311. package/src/components/DataTableViewOptions/index.tsx +30 -30
  312. package/src/components/KnobDialog.tsx +1 -3
  313. package/src/components/SimpleTable/SimpleTable.stories.tsx +13 -0
  314. package/src/components/SimpleTable/index.tsx +171 -149
  315. package/src/components/SimpleTable/simpleTable.spec.tsx +120 -0
  316. package/src/components/TableInput/index.native.tsx +5 -3
  317. package/src/components/TableInput/index.tsx +207 -113
  318. package/src/components/chromeDesignLaw.spec.tsx +97 -0
  319. package/src/utils/chromeIcons.ts +6 -0
  320. package/types/components/ChildTable/index.d.ts +6 -1
  321. package/types/components/ChildTable/index.d.ts.map +1 -1
  322. package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
  323. package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
  324. package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -1
  325. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  326. package/types/components/DataTable/DataTableRoot.d.ts +6 -1
  327. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  328. package/types/components/DataTable/DataTableVirtualized.d.ts +3 -1
  329. package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
  330. package/types/components/DataTable/dataTableChrome.d.ts +27 -0
  331. package/types/components/DataTable/dataTableChrome.d.ts.map +1 -0
  332. package/types/components/DataTable/index.native.d.ts +1 -1
  333. package/types/components/DataTable/index.native.d.ts.map +1 -1
  334. package/types/components/DataTableBulkActions/index.d.ts.map +1 -1
  335. package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
  336. package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
  337. package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -1
  338. package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
  339. package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
  340. package/types/components/DataTableExport/index.d.ts.map +1 -1
  341. package/types/components/DataTableFacetMenu/index.d.ts.map +1 -1
  342. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  343. package/types/components/DataTableToolbar/index.d.ts +2 -0
  344. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  345. package/types/components/DataTableViewOptions/index.d.ts.map +1 -1
  346. package/types/components/KnobDialog.d.ts.map +1 -1
  347. package/types/components/SimpleTable/index.d.ts.map +1 -1
  348. package/types/components/TableInput/index.d.ts +8 -4
  349. package/types/components/TableInput/index.d.ts.map +1 -1
  350. package/types/components/TableInput/index.native.d.ts +2 -0
  351. package/types/components/TableInput/index.native.d.ts.map +1 -1
  352. package/types/utils/chromeIcons.d.ts +3 -0
  353. package/types/utils/chromeIcons.d.ts.map +1 -0
@@ -10,7 +10,11 @@
10
10
  */
11
11
 
12
12
  import { EmptyState } from "@multiplatform.one/components";
13
- import { ensureFocusVisibleRing, hairline, useResolvedKnobs } from "@multiplatform.one/theme";
13
+ import {
14
+ ensureFocusVisibleRing,
15
+ useResolvedKnobs,
16
+ type DisabledRecipe,
17
+ } from "@multiplatform.one/theme";
14
18
  import { useCallback, useState, type ReactNode } from "react";
15
19
  import { useTranslation } from "react-i18next";
16
20
  import type { FontSizeTokens, ViewProps } from "tamagui";
@@ -106,27 +110,45 @@ type KnobBody = {
106
110
  color?: string;
107
111
  };
108
112
 
113
+ /** Inner grid rules follow the borderWidth knob (LC-18). Zero means zero. */
114
+ function gridRule(borderWidth: number, on: boolean) {
115
+ if (!on || borderWidth === 0) return {};
116
+ return {
117
+ borderBottomWidth: borderWidth,
118
+ borderBottomColor: "$borderColor" as const,
119
+ };
120
+ }
121
+
122
+ /** Cell inset rides `space` (SP-EDGE: padding/height, never an outer row inset). */
123
+ function cellPad(gap: string) {
124
+ return { paddingHorizontal: gap, paddingVertical: gap };
125
+ }
126
+
127
+ /** LC-40: disabled rows wash chrome (keepLabel) or dim the assembly (dimWhole). */
128
+ function disabledChrome(disabled: boolean, disabledState: DisabledRecipe) {
129
+ if (!disabled) return {};
130
+ if (disabledState.style === "dimWhole") {
131
+ return { ...disabledState.assemblyKnobProps, "aria-disabled": true as const };
132
+ }
133
+ return { ...disabledState.surfaceKnobProps, "aria-disabled": true as const };
134
+ }
135
+
109
136
  function AlignedCellText({
110
137
  children,
111
138
  align,
112
139
  body,
113
- sizeToken,
114
- emphasized,
115
- muted,
140
+ fontSize,
116
141
  }: {
117
142
  children: string | number;
118
143
  align?: "left" | "center" | "right";
119
144
  body: KnobBody;
120
- sizeToken: string;
121
- emphasized?: boolean;
122
- muted?: boolean;
145
+ fontSize: FontSizeTokens;
123
146
  }) {
124
147
  return (
125
148
  <Text
126
149
  {...body}
127
- fontSize={sizeToken as FontSizeTokens}
128
- color={muted ? "$color11" : "$color12"}
129
- fontWeight={emphasized ? "600" : body.fontWeight}
150
+ fontSize={fontSize}
151
+ color="$color12"
130
152
  display="block"
131
153
  width="100%"
132
154
  textAlign={align ?? "left"}
@@ -144,20 +166,14 @@ function renderCellContent(
144
166
  col: SimpleTableColumn,
145
167
  row: Record<string, any>,
146
168
  rowIndex: number,
147
- colIndex: number,
148
169
  body: KnobBody,
149
- sizeToken: string,
170
+ fontSize: FontSizeTokens,
150
171
  ): ReactNode {
151
172
  const raw = row[col.accessorKey];
152
173
  const rendered = col.cell ? col.cell(raw, row, rowIndex) : raw;
153
174
  if (rendered == null || typeof rendered === "string" || typeof rendered === "number") {
154
175
  return (
155
- <AlignedCellText
156
- align={col.align}
157
- body={body}
158
- sizeToken={sizeToken}
159
- emphasized={colIndex === 0}
160
- >
176
+ <AlignedCellText align={col.align} body={body} fontSize={fontSize}>
161
177
  {rendered ?? ""}
162
178
  </AlignedCellText>
163
179
  );
@@ -304,7 +320,7 @@ function SimpleTableMobileCards({
304
320
  disabled,
305
321
  }: SimpleTableMobileCardsProps) {
306
322
  const { t } = useTranslation();
307
- const { knobProps } = useResolvedKnobs({ component: "SimpleTable" });
323
+ const { knobProps, disabledState } = useResolvedKnobs({ component: "SimpleTable" });
308
324
  const { rowPressActive, getRowPressProps } = useSimpleTableRowPress({
309
325
  data,
310
326
  columns,
@@ -314,12 +330,18 @@ function SimpleTableMobileCards({
314
330
  });
315
331
  const tableZebraOn = knobProps.tableZebra === "on";
316
332
  const [titleCol, ...detailCols] = columns;
333
+ const typeSize = knobProps.label.fontSize;
334
+ const motion = knobProps.transition ? { transition: knobProps.transition } : {};
317
335
 
318
336
  if (data.length === 0) {
319
337
  return (
320
- <View flexDirection="column" {...knobProps.gap}>
338
+ <View
339
+ flexDirection="column"
340
+ {...knobProps.gap}
341
+ {...disabledChrome(Boolean(disabled), disabledState)}
342
+ >
321
343
  {caption ? (
322
- <Text {...knobProps.label} color="$color11">
344
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
323
345
  {caption}
324
346
  </Text>
325
347
  ) : null}
@@ -335,7 +357,7 @@ function SimpleTableMobileCards({
335
357
  {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}
336
358
  >
337
359
  {caption ? (
338
- <Text {...knobProps.label} color="$color11">
360
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
339
361
  {caption}
340
362
  </Text>
341
363
  ) : null}
@@ -355,8 +377,9 @@ function SimpleTableMobileCards({
355
377
  elevation={knobProps.elevation}
356
378
  {...(tableZebraOn && rowIndex % 2 === 1 ? { backgroundColor: "$color2" } : {})}
357
379
  {...(intent ? { theme: intent, backgroundColor: "$color3" as const } : {})}
358
- hoverStyle={{ backgroundColor: "$backgroundHover" }}
359
- {...({ animation: "quick" } as any)}
380
+ {...(disabled ? {} : { hoverStyle: { backgroundColor: "$backgroundHover" } })}
381
+ {...motion}
382
+ {...disabledChrome(Boolean(disabled), disabledState)}
360
383
  {...({
361
384
  "data-table-zebra": tableZebraOn ? (rowIndex % 2 === 0 ? "even" : "odd") : "off",
362
385
  } as any)}
@@ -366,22 +389,16 @@ function SimpleTableMobileCards({
366
389
  <View
367
390
  {...(detailCols.length > 0
368
391
  ? {
369
- paddingBottom: "$2",
370
- marginBottom: "$2",
371
- ...hairline.bottom,
372
- borderBottomColor: "$color6",
392
+ paddingBottom: knobProps.gap.gap,
393
+ marginBottom: knobProps.gap.gap,
394
+ ...gridRule(knobProps.surface.borderWidth, true),
373
395
  }
374
396
  : {})}
375
397
  >
376
398
  {typeof titleRendered === "string" ||
377
399
  typeof titleRendered === "number" ||
378
400
  titleRendered == null ? (
379
- <AlignedCellText
380
- align={titleCol.align}
381
- body={knobProps.body}
382
- sizeToken={knobProps.sizeToken}
383
- emphasized
384
- >
401
+ <AlignedCellText align={titleCol.align} body={knobProps.body} fontSize={typeSize}>
385
402
  {titleRendered ?? ""}
386
403
  </AlignedCellText>
387
404
  ) : (
@@ -394,15 +411,13 @@ function SimpleTableMobileCards({
394
411
  key={col.accessorKey}
395
412
  flexDirection="row"
396
413
  alignItems="center"
397
- paddingVertical="$1.5"
398
- gap="$2"
399
- {...(detailIndex < detailCols.length - 1
400
- ? { ...hairline.bottom, borderBottomColor: "$color6" }
401
- : {})}
414
+ {...cellPad(knobProps.gap.gap)}
415
+ {...knobProps.gap}
416
+ {...gridRule(knobProps.surface.borderWidth, detailIndex < detailCols.length - 1)}
402
417
  >
403
418
  <Text
404
419
  {...knobProps.label}
405
- color="$color10"
420
+ color={knobProps.textAccentColor}
406
421
  width="40%"
407
422
  flexShrink={0}
408
423
  numberOfLines={1}
@@ -411,14 +426,7 @@ function SimpleTableMobileCards({
411
426
  {col.header}
412
427
  </Text>
413
428
  <View flex={1} minWidth={0}>
414
- {renderCellContent(
415
- col,
416
- row,
417
- rowIndex,
418
- detailIndex + 1,
419
- knobProps.body,
420
- knobProps.sizeToken,
421
- )}
429
+ {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
422
430
  </View>
423
431
  </View>
424
432
  ))}
@@ -458,7 +466,7 @@ export function SimpleTableDesktop({
458
466
  disabled,
459
467
  ...props
460
468
  }: SimpleTableDesktopProps) {
461
- const { knobProps } = useResolvedKnobs({ component: "SimpleTable" });
469
+ const { knobProps, disabledState } = useResolvedKnobs({ component: "SimpleTable" });
462
470
  const { t } = useTranslation();
463
471
  const { rowPressActive, getRowPressProps } = useSimpleTableRowPress({
464
472
  data,
@@ -469,112 +477,117 @@ export function SimpleTableDesktop({
469
477
  });
470
478
  const tableZebraOn = knobProps.tableZebra === "on";
471
479
  const ariaLabel = caption ? undefined : props["aria-label"];
480
+ const typeSize = knobProps.label.fontSize;
481
+ const motion = knobProps.transition ? { transition: knobProps.transition } : {};
482
+ const pad = cellPad(knobProps.gap.gap);
483
+ const frameBorder = knobProps.surface.borderWidth;
472
484
 
473
485
  return (
474
- <View
486
+ <Table
475
487
  {...props}
476
488
  minWidth={0}
477
- // overflow="auto" (scrollbar only when content overflows) is web-only —
478
- // outside RN's "scroll" | "hidden" | "visible" union (house Record cast).
479
- {...({ overflow: "auto" } as Record<string, unknown>)}
489
+ {...({
490
+ overflow: "auto",
491
+ "data-simple-table-frame": "true",
492
+ "data-border-width": String(frameBorder),
493
+ "data-animation": knobProps.transition ? "on" : "none",
494
+ } as Record<string, unknown>)}
495
+ {...disabledChrome(Boolean(disabled), disabledState)}
496
+ aria-label={ariaLabel}
497
+ {...({ "aria-rowcount": data.length + 1 } as any)}
480
498
  >
481
- <Table aria-label={ariaLabel} {...({ "aria-rowcount": data.length + 1 } as any)}>
482
- {caption ? (
483
- <Table.Caption>
484
- <Text {...knobProps.label} color="$color11">
485
- {caption}
486
- </Text>
487
- </Table.Caption>
488
- ) : null}
489
- <Table.Head>
490
- <Table.Row>
491
- {columns.map((col, colIndex) => (
492
- <Table.HeaderCell
493
- key={col.accessorKey}
494
- justifyContent={alignToFlex(col.align)}
495
- cellLocation={cellLocationFor(colIndex, columns.length)}
496
- data-align={col.align ?? "left"}
499
+ {caption ? (
500
+ <Table.Caption>
501
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
502
+ {caption}
503
+ </Text>
504
+ </Table.Caption>
505
+ ) : null}
506
+ <Table.Head borderBottomWidth={frameBorder} borderBottomColor="$borderColor">
507
+ <Table.Row>
508
+ {columns.map((col, colIndex) => (
509
+ <Table.HeaderCell
510
+ key={col.accessorKey}
511
+ justifyContent={alignToFlex(col.align)}
512
+ cellLocation={cellLocationFor(colIndex, columns.length)}
513
+ data-align={col.align ?? "left"}
514
+ data-cell-pad={knobProps.gap.gap}
515
+ borderRadius={0}
516
+ {...pad}
517
+ >
518
+ {/* Block text filling the cell + textAlign: alignment that
519
+ works in the real <th> (display:table-cell — flex props
520
+ are inert there) and in the flex displayMode alike. */}
521
+ <Text
522
+ {...knobProps.label}
523
+ color={knobProps.textAccentColor}
524
+ display="block"
525
+ width="100%"
526
+ textAlign={col.align ?? "left"}
527
+ numberOfLines={1}
528
+ ellipsizeMode="tail"
529
+ {...(col.align === "right" ? ({ fontVariant: ["tabular-nums"] } as any) : {})}
497
530
  >
498
- {/* Block text filling the cell + textAlign: alignment that
499
- works in the real <th> (display:table-cell — flex props
500
- are inert there) and in the flex displayMode alike. */}
501
- <Text
502
- {...knobProps.body}
503
- {...knobProps.label}
504
- color="$color11"
505
- fontWeight="600"
506
- display="block"
507
- width="100%"
508
- textAlign={col.align ?? "left"}
509
- numberOfLines={1}
510
- ellipsizeMode="tail"
511
- {...(col.align === "right" ? ({ fontVariant: ["tabular-nums"] } as any) : {})}
512
- >
513
- {col.header}
514
- </Text>
515
- </Table.HeaderCell>
516
- ))}
531
+ {col.header}
532
+ </Text>
533
+ </Table.HeaderCell>
534
+ ))}
535
+ </Table.Row>
536
+ </Table.Head>
537
+ <Table.Body {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}>
538
+ {data.length === 0 ? (
539
+ <Table.Row>
540
+ <Table.Cell
541
+ cellWidth="auto"
542
+ borderRadius={0}
543
+ {...({ colSpan: Math.max(columns.length, 1) } as any)}
544
+ >
545
+ <EmptyState compact aria-live="polite" title={t("No data available")} />
546
+ </Table.Cell>
517
547
  </Table.Row>
518
- </Table.Head>
519
- <Table.Body {...(rowPressActive ? ({ "data-row-press-scope": "true" } as any) : {})}>
520
- {data.length === 0 ? (
521
- <Table.Row>
522
- <Table.Cell cellWidth="auto" {...({ colSpan: Math.max(columns.length, 1) } as any)}>
523
- <EmptyState compact aria-live="polite" title={t("No data available")} />
524
- </Table.Cell>
525
- </Table.Row>
526
- ) : (
527
- data.map((row, rowIndex) => {
528
- const intent = row._intent as IntentName | undefined;
529
- const intentProps = intent ? { [intent]: true } : {};
530
- const isLast = rowIndex === data.length - 1;
531
- const zebraFill =
532
- !intent && tableZebraOn && rowIndex % 2 === 1
533
- ? { backgroundColor: "$color2" as const }
534
- : {};
535
-
536
- return (
537
- <Table.Row
538
- key={resolveRowId(row, rowIndex, getRowId)}
539
- rowLocation={rowLocationFor(rowIndex, data.length)}
540
- hoverStyle={{ backgroundColor: "$backgroundHover" }}
541
- {...({ animation: "quick" } as any)}
542
- {...zebraFill}
543
- {...intentProps}
544
- {...({
545
- "data-table-zebra": tableZebraOn
546
- ? rowIndex % 2 === 0
547
- ? "even"
548
- : "odd"
549
- : "off",
550
- } as any)}
551
- {...(getRowPressProps(row, rowIndex) as any)}
552
- >
553
- {columns.map((col, colIndex) => (
554
- <Table.Cell
555
- key={col.accessorKey}
556
- justifyContent={alignToFlex(col.align)}
557
- cellLocation={cellLocationFor(colIndex, columns.length)}
558
- data-align={col.align ?? "left"}
559
- {...(!isLast ? { ...hairline.bottom, borderBottomColor: "$color6" } : {})}
560
- >
561
- {renderCellContent(
562
- col,
563
- row,
564
- rowIndex,
565
- colIndex,
566
- knobProps.body,
567
- knobProps.sizeToken,
568
- )}
569
- </Table.Cell>
570
- ))}
571
- </Table.Row>
572
- );
573
- })
574
- )}
575
- </Table.Body>
576
- </Table>
577
- </View>
548
+ ) : (
549
+ data.map((row, rowIndex) => {
550
+ const intent = row._intent as IntentName | undefined;
551
+ const intentProps = intent ? { [intent]: true } : {};
552
+ const isLast = rowIndex === data.length - 1;
553
+ const zebraFill =
554
+ !intent && tableZebraOn && rowIndex % 2 === 1
555
+ ? { backgroundColor: "$color2" as const }
556
+ : {};
557
+
558
+ return (
559
+ <Table.Row
560
+ key={resolveRowId(row, rowIndex, getRowId)}
561
+ rowLocation={rowLocationFor(rowIndex, data.length)}
562
+ {...(disabled ? {} : { hoverStyle: { backgroundColor: "$backgroundHover" } })}
563
+ {...motion}
564
+ {...zebraFill}
565
+ {...intentProps}
566
+ {...({
567
+ "data-table-zebra": tableZebraOn ? (rowIndex % 2 === 0 ? "even" : "odd") : "off",
568
+ } as any)}
569
+ {...(getRowPressProps(row, rowIndex) as any)}
570
+ >
571
+ {columns.map((col, colIndex) => (
572
+ <Table.Cell
573
+ key={col.accessorKey}
574
+ justifyContent={alignToFlex(col.align)}
575
+ cellLocation={cellLocationFor(colIndex, columns.length)}
576
+ data-align={col.align ?? "left"}
577
+ data-cell-pad={knobProps.gap.gap}
578
+ borderRadius={0}
579
+ {...pad}
580
+ {...gridRule(frameBorder, !isLast)}
581
+ >
582
+ {renderCellContent(col, row, rowIndex, knobProps.body, typeSize)}
583
+ </Table.Cell>
584
+ ))}
585
+ </Table.Row>
586
+ );
587
+ })
588
+ )}
589
+ </Table.Body>
590
+ </Table>
578
591
  );
579
592
  }
580
593
 
@@ -599,7 +612,16 @@ export function SimpleTable({
599
612
  // Card layout below `$sm` (layout="auto") or when pinned via layout="cards"
600
613
  if (layout === "cards" || (layout === "auto" && sm === false)) {
601
614
  return (
602
- <View {...knobProps.containerRadius} {...props} testID="simple-table-cards">
615
+ <View
616
+ {...knobProps.containerRadius}
617
+ {...props}
618
+ testID="simple-table-cards"
619
+ {...({
620
+ "data-simple-table-frame": "true",
621
+ "data-border-width": String(knobProps.surface.borderWidth),
622
+ "data-animation": knobProps.transition ? "on" : "none",
623
+ } as Record<string, unknown>)}
624
+ >
603
625
  <SimpleTableMobileCards
604
626
  data={data}
605
627
  columns={columns}
@@ -297,4 +297,124 @@ describe("SimpleTable", () => {
297
297
  fireEvent.click(cards[1]);
298
298
  expect(onRowPress).toHaveBeenCalledWith(expect.objectContaining({ name: "Item 2" }), 1);
299
299
  });
300
+
301
+ it("owns grid rules from the borderWidth knob (LC-18) and keeps cells square", () => {
302
+ const columns: SimpleTableColumn[] = [
303
+ { accessorKey: "name", header: "Name" },
304
+ { accessorKey: "age", header: "Age" },
305
+ ];
306
+ const data = [
307
+ { name: "A", age: 1 },
308
+ { name: "B", age: 2 },
309
+ ];
310
+
311
+ const { container: none } = renderWithProviders(
312
+ <Preset overrides={{ borderWidth: "none", borderRadius: "none" }}>
313
+ <SimpleTableDesktop data={data} columns={columns} />
314
+ </Preset>,
315
+ );
316
+ expect(none.querySelector("[data-simple-table-frame]")?.getAttribute("data-border-width")).toBe(
317
+ "0",
318
+ );
319
+ const noneCells = none.querySelectorAll("td, [role='cell']");
320
+ expect(noneCells.length).toBeGreaterThan(0);
321
+ for (const cell of noneCells) {
322
+ const border = getComputedStyle(cell).borderBottomWidth;
323
+ expect(border === "0px" || border === "").toBe(true);
324
+ const radius = getComputedStyle(cell).borderRadius;
325
+ expect(radius === "0px" || radius === "").toBe(true);
326
+ }
327
+
328
+ const { container: large } = renderWithProviders(
329
+ <Preset overrides={{ borderWidth: "large" }}>
330
+ <SimpleTableDesktop data={data} columns={columns} />
331
+ </Preset>,
332
+ );
333
+ expect(
334
+ large.querySelector("[data-simple-table-frame]")?.getAttribute("data-border-width"),
335
+ ).toBe("2");
336
+ const bodyCells = large.querySelectorAll("tbody td, tbody [role='cell']");
337
+ const firstRowCell = bodyCells[0];
338
+ expect(firstRowCell).toBeTruthy();
339
+ expect(
340
+ Number.parseFloat(getComputedStyle(firstRowCell as Element).borderBottomWidth),
341
+ ).toBeGreaterThan(0);
342
+ });
343
+
344
+ it("uses label type and the fontWeight knob, never weight 600", () => {
345
+ const columns: SimpleTableColumn[] = [
346
+ { accessorKey: "name", header: "Name" },
347
+ { accessorKey: "age", header: "Age" },
348
+ ];
349
+ const { container } = renderWithProviders(
350
+ <Preset overrides={{ fontWeight: "regular" }}>
351
+ <SimpleTableDesktop data={[{ name: "Ada", age: 36 }]} columns={columns} />
352
+ </Preset>,
353
+ );
354
+ const texts = Array.from(container.querySelectorAll("span")).filter((node) =>
355
+ /Name|Ada/.test(node.textContent ?? ""),
356
+ );
357
+ expect(texts.length).toBeGreaterThan(0);
358
+ for (const node of texts) {
359
+ const weight = getComputedStyle(node).fontWeight;
360
+ expect(["400", "700", "normal", "bold"]).toContain(weight);
361
+ expect(weight).not.toBe("600");
362
+ }
363
+ });
364
+
365
+ it("drops motion when animation is none and steps cell pad with space", () => {
366
+ const columns: SimpleTableColumn[] = [
367
+ { accessorKey: "name", header: "Name" },
368
+ { accessorKey: "age", header: "Age" },
369
+ ];
370
+ const data = [{ name: "Ada", age: 36 }];
371
+
372
+ const { container: still } = renderWithProviders(
373
+ <Preset overrides={{ animation: "none" }}>
374
+ <SimpleTableDesktop data={data} columns={columns} />
375
+ </Preset>,
376
+ );
377
+ expect(still.querySelector("[data-simple-table-frame]")?.getAttribute("data-animation")).toBe(
378
+ "none",
379
+ );
380
+
381
+ const { container: small } = renderWithProviders(
382
+ <Preset overrides={{ space: "small" }}>
383
+ <SimpleTableDesktop data={data} columns={columns} />
384
+ </Preset>,
385
+ );
386
+ const { container: large } = renderWithProviders(
387
+ <Preset overrides={{ space: "large" }}>
388
+ <SimpleTableDesktop data={data} columns={columns} />
389
+ </Preset>,
390
+ );
391
+ const smallPad = small.querySelector("[data-cell-pad]")?.getAttribute("data-cell-pad");
392
+ const largePad = large.querySelector("[data-cell-pad]")?.getAttribute("data-cell-pad");
393
+ expect(smallPad).toBeTruthy();
394
+ expect(largePad).toBeTruthy();
395
+ expect(smallPad).not.toBe(largePad);
396
+ });
397
+
398
+ it("disabled rows stay visible, inert, and visually distinct (LC-40)", () => {
399
+ const columns: SimpleTableColumn[] = [
400
+ { accessorKey: "name", header: "Name" },
401
+ { accessorKey: "city", header: "City" },
402
+ ];
403
+ const onRowPress = vi.fn();
404
+ const { container } = renderWithProviders(
405
+ <SimpleTableDesktop
406
+ disabled
407
+ data={[{ name: "Ada", city: "Portland" }]}
408
+ columns={columns}
409
+ onRowPress={onRowPress}
410
+ />,
411
+ );
412
+ const frame = container.querySelector("[data-simple-table-frame]");
413
+ expect(frame?.getAttribute("aria-disabled")).toBe("true");
414
+ expect(container.textContent).toContain("Ada");
415
+ const row = container.querySelector('[data-row-press="true"]');
416
+ expect(row).toBeNull();
417
+ fireEvent.click(container.querySelector("tbody tr, [role='row']") as Element);
418
+ expect(onRowPress).not.toHaveBeenCalled();
419
+ });
300
420
  });
@@ -78,6 +78,8 @@ export interface TableInputProps<TData extends DataTableData = DataTableData> {
78
78
  * is the default — Frappe's grid is a dense in-list editor, not a page table.
79
79
  */
80
80
  compact?: boolean;
81
+ /** Leading grab handle + keyboard reorder via kanbanDnd (web implements). */
82
+ enableReorder?: boolean;
81
83
  }
82
84
 
83
85
  export function TableInput<TData extends DataTableData = DataTableData>({
@@ -262,14 +264,14 @@ function TableInputInner<TData extends DataTableData>({
262
264
  <XStack backgroundColor="$color2" {...hairline.bottom} {...cellPad}>
263
265
  {showRowNumbers && (
264
266
  <View width={indexWidth} paddingHorizontal="$1">
265
- <Text fontWeight="600" color="$color10" fontSize={knobProps.label.fontSize}>
267
+ <Text fontWeight="400" color="$color10" fontSize={knobProps.label.fontSize}>
266
268
  #
267
269
  </Text>
268
270
  </View>
269
271
  )}
270
272
  {columns.map((col, index) => (
271
273
  <View key={columnIds[index]} flex={1} paddingHorizontal="$1">
272
- <Text fontWeight="600" color="$color12" fontSize={knobProps.label.fontSize}>
274
+ <Text fontWeight="400" color="$color12" fontSize={knobProps.label.fontSize}>
273
275
  {typeof col.header === "string" ? col.header : columnIds[index]}
274
276
  </Text>
275
277
  </View>
@@ -367,7 +369,7 @@ function TableInputInner<TData extends DataTableData>({
367
369
  return (
368
370
  <YStack
369
371
  {...knobProps.surface}
370
- {...knobProps.borderRadiusOuter}
372
+ {...knobProps.borderRadiusNested}
371
373
  elevation={knobProps.elevation}
372
374
  overflow="hidden"
373
375
  accessibilityLabel={ariaLabel}