@multiplatform.one/table 7.4.1 → 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
@@ -60,6 +60,7 @@ import { DataTableCardControls } from "./DataTableCardControls";
60
60
  import { DataTableMobileCards } from "./DataTableMobileCards";
61
61
  import { DataTableDocumentList } from "./DataTableDocumentList";
62
62
  import { DataTableVirtualized } from "./DataTableVirtualized";
63
+ import { dataTableChrome, resolveDataTableIntent, rowIntentProps } from "./dataTableChrome";
63
64
  import { tableCellKeyboardProps, tableRowStateProps } from "./rowStateChrome";
64
65
  import { alignToFlex, getDefaultColumnAlign } from "../../utils/columnAlign";
65
66
  import { mapFieldToFilterType } from "../../utils/filterFields";
@@ -67,8 +68,6 @@ import { INFINITE_TRIGGER_ROWS } from "../../utils/paginationDefaults";
67
68
  import { isInteractiveInnerTarget } from "../../utils/rowPress";
68
69
  import { bidiIsolate, withInterp } from "../../utils/withInterp";
69
70
 
70
- const SELECTION_COL_WIDTH = 40;
71
-
72
71
  /** Returns the field type for a column, defaulting to "input" */
73
72
  function getColumnField(column: DataTableColumn): DataTableField {
74
73
  return column.field ?? "input";
@@ -88,8 +87,6 @@ function resolveColumnAlign(column: DataTableColumn) {
88
87
  // mapFieldToFilterType moved to utils/filterFields (shared with the filter
89
88
  // model — LC-16, one mapping).
90
89
 
91
- const rowHeightPx = 40;
92
-
93
90
  export interface DataTableRootProps<
94
91
  TData extends Record<string, any> = Record<string, any>,
95
92
  > extends DataTableProps<TData> {
@@ -99,6 +96,11 @@ export interface DataTableRootProps<
99
96
  compact?: boolean;
100
97
  /** Structural modifier: disabled state */
101
98
  disabled?: boolean;
99
+ /** Structural intent — joins the resolver path (audit 16). */
100
+ accent?: boolean;
101
+ error?: boolean;
102
+ warning?: boolean;
103
+ success?: boolean;
102
104
  }
103
105
 
104
106
  export function DataTableRoot<TData extends Record<string, any> = Record<string, any>>({
@@ -165,6 +167,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
165
167
  size,
166
168
  compact = false,
167
169
  disabled = false,
170
+ accent,
171
+ error,
172
+ warning,
173
+ success,
168
174
  children,
169
175
  "aria-label": ariaLabel,
170
176
  "aria-describedby": ariaDescribedBy,
@@ -176,11 +182,15 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
176
182
  // pinned via the `layout` prop. Same table state drives both layouts.
177
183
  const showList = layout === "list";
178
184
  const showCards = !showList && (layout === "cards" || (layout === "auto" && sm === false));
185
+ const intent = resolveDataTableIntent({ accent, error, warning, success });
179
186
  const { knobProps, disabledState } = useResolvedKnobs({
180
- intent: undefined,
187
+ intent,
181
188
  component: "DataTable",
182
189
  compact,
183
190
  });
191
+ const chrome = dataTableChrome(String(knobProps.sizeToken));
192
+ const rowHeightPx = chrome.rowPx;
193
+ const selectionColWidth = chrome.selectionCol;
184
194
  // Collapsed expand-caret points toward inline-end, so it mirrors in RTL via
185
195
  // glyph swap (useDirection, Axiom 15); rotation sign flips so expanded
186
196
  // still points down.
@@ -815,9 +825,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
815
825
  const col = table.getColumn(leftPinned[i]);
816
826
  if (col) leftOffset += col.getSize();
817
827
  }
818
- if (enableRowSelection) leftOffset += SELECTION_COL_WIDTH;
819
- if (enableRowExpansion) leftOffset += 32;
820
- if (showRowNumbers) leftOffset += 50;
828
+ if (enableRowSelection) leftOffset += selectionColWidth;
829
+ if (enableRowExpansion) leftOffset += chrome.expandCol;
830
+ if (showRowNumbers) leftOffset += chrome.rowNumberCol;
821
831
  // Logical inset (RTL backlog #2): TanStack's "left" bucket is the
822
832
  // reading-start side, so the sticky offset must flip with direction.
823
833
  return {
@@ -834,7 +844,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
834
844
  const col = table.getColumn(rightPinned[i]);
835
845
  if (col) rightOffset += col.getSize();
836
846
  }
837
- if (showDeleteRow && !readOnly) rightOffset += 60;
847
+ if (showDeleteRow && !readOnly) rightOffset += chrome.deleteCol;
838
848
  return {
839
849
  position: "sticky" as const,
840
850
  insetInlineEnd: rightOffset,
@@ -881,7 +891,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
881
891
  <Table.Cell
882
892
  {...cellRenderProps}
883
893
  {...cellNavProps()}
884
- cellWidth={SELECTION_COL_WIDTH}
894
+ cellWidth={selectionColWidth}
885
895
  cellHeight={cellHeight as any}
886
896
  cellLocation="first"
887
897
  justifyContent="center"
@@ -908,7 +918,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
908
918
  <Table.Cell
909
919
  {...cellRenderProps}
910
920
  {...cellNavProps()}
911
- cellWidth={50}
921
+ cellWidth={chrome.rowNumberCol}
912
922
  cellHeight={cellHeight as any}
913
923
  cellLocation={enableRowSelection ? "middle" : "first"}
914
924
  >
@@ -922,7 +932,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
922
932
  <Table.Cell
923
933
  {...cellRenderProps}
924
934
  {...cellNavProps()}
925
- cellWidth={32 + row.depth * 20}
935
+ cellWidth={chrome.expandCol + row.depth * chrome.indent}
926
936
  cellHeight={cellHeight as any}
927
937
  cellLocation={enableRowSelection || showRowNumbers ? "middle" : "first"}
928
938
  paddingLeft={0}
@@ -934,12 +944,12 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
934
944
  flexDirection="row"
935
945
  alignItems="center"
936
946
  height="100%"
937
- width={row.depth * 20}
947
+ width={row.depth * chrome.indent}
938
948
  >
939
949
  {Array.from({ length: row.depth }).map((_, i) => (
940
950
  <View
941
951
  key={i}
942
- width={20}
952
+ width={chrome.indent}
943
953
  height="100%"
944
954
  alignItems="center"
945
955
  justifyContent="center"
@@ -949,15 +959,15 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
949
959
  width={1}
950
960
  height="100%"
951
961
  backgroundColor="$color6"
952
- left={10}
962
+ left={chrome.indent / 2}
953
963
  />
954
964
  {i === row.depth - 1 && (
955
965
  <View
956
966
  position="absolute"
957
967
  height={1}
958
- width={10}
968
+ width={chrome.indent / 2}
959
969
  backgroundColor="$color6"
960
- left={10}
970
+ left={chrome.indent / 2}
961
971
  />
962
972
  )}
963
973
  </View>
@@ -987,15 +997,14 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
987
997
  borderRadius="$2"
988
998
  >
989
999
  <ExpandCaretIcon
990
- size={14}
1000
+ size={chrome.iconPx}
991
1001
  style={{
992
1002
  transform: row.getIsExpanded() ? expandedCaretRotation : "none",
993
- transition: "transform 0.15s ease",
994
1003
  }}
995
1004
  />
996
1005
  </View>
997
1006
  ) : (
998
- <View width={22} />
1007
+ <View width={chrome.expandCol} />
999
1008
  )}
1000
1009
  </View>
1001
1010
  </Table.Cell>
@@ -1049,7 +1058,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1049
1058
  <Table.Cell
1050
1059
  {...cellRenderProps}
1051
1060
  {...cellNavProps()}
1052
- cellWidth={60}
1061
+ cellWidth={chrome.deleteCol}
1053
1062
  cellHeight={cellHeight as any}
1054
1063
  cellLocation="last"
1055
1064
  justifyContent="center"
@@ -1409,10 +1418,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1409
1418
  alignCells={{ x: "start", y: "center" }}
1410
1419
  alignHeaderCells={{ x: "start", y: "center" }}
1411
1420
  cellHeight={cellHeight}
1412
- borderTopLeftRadius={hasToolbar ? 0 : knobProps.borderRadius.borderRadius}
1413
- borderTopRightRadius={hasToolbar ? 0 : knobProps.borderRadius.borderRadius}
1414
- borderBottomLeftRadius={knobProps.borderRadius.borderRadius}
1415
- borderBottomRightRadius={knobProps.borderRadius.borderRadius}
1421
+ borderTopLeftRadius={hasToolbar ? 0 : knobProps.borderRadiusOuter.borderRadius}
1422
+ borderTopRightRadius={hasToolbar ? 0 : knobProps.borderRadiusOuter.borderRadius}
1423
+ borderBottomLeftRadius={knobProps.borderRadiusOuter.borderRadius}
1424
+ borderBottomRightRadius={knobProps.borderRadiusOuter.borderRadius}
1416
1425
  marginBottom={0}
1417
1426
  aria-label={resolvedAriaLabel}
1418
1427
  aria-rowcount={computed.totalPages * state.pagination.pageSize}
@@ -1447,10 +1456,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1447
1456
  : "middle",
1448
1457
  borderTopRightRadius: hasToolbar
1449
1458
  ? "$0"
1450
- : knobProps.borderRadius.borderRadius,
1459
+ : knobProps.borderRadiusOuter.borderRadius,
1451
1460
  borderTopLeftRadius: hasToolbar
1452
1461
  ? "$0"
1453
- : knobProps.borderRadius.borderRadius,
1462
+ : knobProps.borderRadiusOuter.borderRadius,
1454
1463
  borderBottomLeftRadius: "$0",
1455
1464
  borderBottomRightRadius: "$0",
1456
1465
  "aria-rowindex": rowCounter.current,
@@ -1458,7 +1467,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1458
1467
  >
1459
1468
  {enableRowSelection && (
1460
1469
  <Table.HeaderCell
1461
- cellWidth={SELECTION_COL_WIDTH}
1470
+ cellWidth={selectionColWidth}
1462
1471
  cellHeight={cellHeight as any}
1463
1472
  cellLocation="first"
1464
1473
  justifyContent="center"
@@ -1490,11 +1499,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1490
1499
 
1491
1500
  {showRowNumbers && (
1492
1501
  <Table.HeaderCell
1493
- cellWidth={50}
1502
+ cellWidth={chrome.rowNumberCol}
1494
1503
  cellHeight={cellHeight as any}
1495
1504
  cellLocation={enableRowSelection ? "middle" : "first"}
1496
1505
  >
1497
- <Text fontSize="$4" fontWeight="600">
1506
+ <Text fontSize={knobProps.sizeToken} fontWeight="600">
1498
1507
  #
1499
1508
  </Text>
1500
1509
  </Table.HeaderCell>
@@ -1502,7 +1511,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1502
1511
 
1503
1512
  {enableRowExpansion && (
1504
1513
  <Table.HeaderCell
1505
- cellWidth={32}
1514
+ cellWidth={chrome.expandCol}
1506
1515
  cellHeight={cellHeight as any}
1507
1516
  cellLocation={
1508
1517
  enableRowSelection || showRowNumbers ? "middle" : "first"
@@ -1639,7 +1648,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1639
1648
  flex={isRightAligned ? undefined : 1}
1640
1649
  justifyContent={isRightAligned ? "flex-end" : undefined}
1641
1650
  >
1642
- <Text fontSize="$4" userSelect="none">
1651
+ <Text fontSize={knobProps.sizeToken} userSelect="none">
1643
1652
  {header.isPlaceholder
1644
1653
  ? null
1645
1654
  : flexRender(
@@ -1660,7 +1669,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1660
1669
  <View aria-hidden={true} role="presentation">
1661
1670
  {sortDirection === "asc" && (
1662
1671
  <CaretDownIcon
1663
- size={14}
1672
+ size={chrome.iconPx}
1664
1673
  color={
1665
1674
  sortDirection ? "var(--color10)" : "var(--color8)"
1666
1675
  }
@@ -1668,7 +1677,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1668
1677
  )}
1669
1678
  {sortDirection === "desc" && (
1670
1679
  <CaretDownIcon
1671
- size={14}
1680
+ size={chrome.iconPx}
1672
1681
  color={
1673
1682
  sortDirection ? "var(--color10)" : "var(--color8)"
1674
1683
  }
@@ -1676,7 +1685,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1676
1685
  />
1677
1686
  )}
1678
1687
  {sortDirection === false && (
1679
- <CaretUpDownIcon size={14} color="var(--color8)" />
1688
+ <CaretUpDownIcon size={chrome.iconPx} color="$color8" />
1680
1689
  )}
1681
1690
  </View>
1682
1691
  </Tooltip>
@@ -1746,7 +1755,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1746
1755
 
1747
1756
  {showDeleteRow && !readOnly && (
1748
1757
  <Table.HeaderCell
1749
- cellWidth={60}
1758
+ cellWidth={chrome.deleteCol}
1750
1759
  cellHeight={cellHeight as any}
1751
1760
  cellLocation="last"
1752
1761
  />
@@ -1839,6 +1848,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1839
1848
  extraColumnsAfter={extraColumnsAfter}
1840
1849
  table={table}
1841
1850
  hasInfiniteTail={hasInfiniteTail}
1851
+ rowHeightPx={rowHeightPx}
1842
1852
  {...(rowPressActive ? { getRowPressProps } : {})}
1843
1853
  />
1844
1854
  </Table.Cell>
@@ -1856,7 +1866,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1856
1866
  table.getVisibleLeafColumns().length +
1857
1867
  extraColumnsBefore +
1858
1868
  extraColumnsAfter;
1859
- const indent = (row.depth ?? 0) * 16;
1869
+ const indent = (row.depth ?? 0) * chrome.indent;
1860
1870
  return (
1861
1871
  <Table.Row
1862
1872
  key={row.id}
@@ -1930,6 +1940,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1930
1940
  : "off",
1931
1941
  } as any)}
1932
1942
  {...(getRowPressProps(row, index) as any)}
1943
+ {...(rowIntentProps(row.original) as any)}
1933
1944
  >
1934
1945
  {renderRowContent(row, index, isLastRow)}
1935
1946
  </Table.Row>
@@ -1975,7 +1986,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1975
1986
  >
1976
1987
  {enableRowSelection && (
1977
1988
  <Table.Cell
1978
- cellWidth={SELECTION_COL_WIDTH}
1989
+ cellWidth={selectionColWidth}
1979
1990
  cellLocation="first"
1980
1991
  padding={0}
1981
1992
  minHeight={0}
@@ -1983,7 +1994,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1983
1994
  )}
1984
1995
  {showRowNumbers && (
1985
1996
  <Table.Cell
1986
- cellWidth={50}
1997
+ cellWidth={chrome.rowNumberCol}
1987
1998
  cellLocation={enableRowSelection ? "middle" : "first"}
1988
1999
  padding={0}
1989
2000
  minHeight={0}
@@ -1991,7 +2002,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
1991
2002
  )}
1992
2003
  {enableRowExpansion && (
1993
2004
  <Table.Cell
1994
- cellWidth={32}
2005
+ cellWidth={chrome.expandCol}
1995
2006
  cellLocation={
1996
2007
  enableRowSelection || showRowNumbers ? "middle" : "first"
1997
2008
  }
@@ -2026,7 +2037,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
2026
2037
  })}
2027
2038
  {showDeleteRow && !readOnly && (
2028
2039
  <Table.Cell
2029
- cellWidth={60}
2040
+ cellWidth={chrome.deleteCol}
2030
2041
  cellLocation="last"
2031
2042
  padding={0}
2032
2043
  minHeight={0}
@@ -7,12 +7,11 @@
7
7
  * column border extension.
8
8
  */
9
9
 
10
+ import { dataTableChrome, rowIntentProps } from "./dataTableChrome";
10
11
  import { tableRowStateProps } from "./rowStateChrome";
11
12
  import { Skeleton } from "@multiplatform.one/components";
12
13
  import { Text, View } from "tamagui";
13
14
 
14
- const rowHeightPx = 40;
15
-
16
15
  export interface DataTableVirtualizedProps {
17
16
  virtualItems: any[];
18
17
  totalSize: number;
@@ -48,6 +47,8 @@ export interface DataTableVirtualizedProps {
48
47
  * the same activation + roving-focus contract as grid rows).
49
48
  */
50
49
  getRowPressProps?: (row: any, rowIndex: number, variant?: "row" | "card") => Record<string, any>;
50
+ /** LC-65 row estimate — caller passes size-recipe height. */
51
+ rowHeightPx?: number;
51
52
  }
52
53
 
53
54
  export function DataTableVirtualized({
@@ -67,7 +68,9 @@ export function DataTableVirtualized({
67
68
  renderRowContent,
68
69
  hasInfiniteTail = false,
69
70
  getRowPressProps,
71
+ rowHeightPx: rowHeightPxProp,
70
72
  }: DataTableVirtualizedProps) {
73
+ const rowHeightPx = rowHeightPxProp ?? dataTableChrome("$4").rowPx;
71
74
  return (
72
75
  <div
73
76
  style={{
@@ -193,6 +196,7 @@ export function DataTableVirtualized({
193
196
  role="row"
194
197
  aria-rowindex={virtualRow.index + 1}
195
198
  {...(getRowPressProps ? (getRowPressProps(row, virtualRow.index) as any) : {})}
199
+ {...(rowIntentProps(row.original) as any)}
196
200
  >
197
201
  {/* div cells (role="cell" via the primitive): a real <td> is
198
202
  not a valid child of the absolutely-positioned div rows */}
@@ -189,6 +189,7 @@ const meta: Meta<typeof DataTable> = {
189
189
  readOnly: { control: "boolean" },
190
190
  compact: { control: "boolean" },
191
191
  disabled: { control: "boolean" },
192
+ // compact is not pinned — density rides the Preset / Storybook control.
192
193
  },
193
194
  decorators: [
194
195
  (Story) => (
@@ -251,7 +252,7 @@ export const ReadOnly: Story = {
251
252
  render: (args) => (
252
253
  <YStack gap="$4" flex={1} minHeight={0}>
253
254
  <YStack gap="$2">
254
- <H3>Read-only — every cell routes through FieldDisplay</H3>
255
+ <H3 fontWeight="400">Read-only — every cell routes through FieldDisplay</H3>
255
256
  <Text color="$placeholderColor">
256
257
  Lightweight view-only render per field type. No edit UI mounted.
257
258
  </Text>
@@ -273,7 +274,7 @@ export const Editable: Story = {
273
274
  render: (args) => (
274
275
  <YStack gap="$4" flex={1} minHeight={0}>
275
276
  <YStack gap="$2">
276
- <H3>Editable — cells mount the full Edit field component</H3>
277
+ <H3 fontWeight="400">Editable — cells mount the full Edit field component</H3>
277
278
  <Text color="$placeholderColor">
278
279
  Same column set, edit mode, wired: onDataChange commits edits to story state. Use this
279
280
  view to compare field heights and spot popover-clipping issues against the read-only
@@ -389,7 +390,9 @@ export const EditableExtended: Story = {
389
390
  render: (args) => (
390
391
  <YStack gap="$4" flex={1} minHeight={0}>
391
392
  <YStack gap="$2">
392
- <H3>Extended field types — textarea, slider, radio, toggle, time, ranges, otp</H3>
393
+ <H3 fontWeight="400">
394
+ Extended field types — textarea, slider, radio, toggle, time, ranges, otp
395
+ </H3>
393
396
  <Text color="$placeholderColor">
394
397
  The field types the core harness omits: textarea, slider, radiogroup, togglegroup,
395
398
  timepicker, daterangepicker, multidatepicker, duration, phoneinput, otp. All wired through
@@ -410,7 +413,7 @@ export const ReadOnlyExtended: Story = {
410
413
  render: (args) => (
411
414
  <YStack gap="$4" flex={1} minHeight={0}>
412
415
  <YStack gap="$2">
413
- <H3>Extended field types — read-only</H3>
416
+ <H3 fontWeight="400">Extended field types — read-only</H3>
414
417
  </YStack>
415
418
  <YStack flex={1} minHeight={0}>
416
419
  <DataTable<ExtendedRow>
@@ -493,7 +496,9 @@ export const EditableHeavy: Story = {
493
496
  render: (args) => (
494
497
  <YStack gap="$4" flex={1} minHeight={0}>
495
498
  <YStack gap="$2">
496
- <H3>Heavy editors — mention, barcode, file, image, signature, geo, rich text, code</H3>
499
+ <H3 fontWeight="400">
500
+ Heavy editors — mention, barcode, file, image, signature, geo, rich text, code
501
+ </H3>
497
502
  <Text color="$placeholderColor">
498
503
  Edits too big for the cell: the cell shows a compact FieldDisplay summary and clicking
499
504
  opens the modal editor (CellModalEditor). All wired through onDataChange.
@@ -0,0 +1,48 @@
1
+ /**
2
+ * DataTable chrome geometry and intent helpers.
3
+ *
4
+ * Size numbers come from LC-65 `sizeRecipeForToken` (no handwritten 14/40).
5
+ * Row `_intent` rides Tamagui boolean theme props on the real row host —
6
+ * never a Theme wrapper inside <table> (invalid HTML).
7
+ */
8
+
9
+ import { sizeRecipeForToken } from "@multiplatform.one/theme";
10
+
11
+ export type DataTableIntentName = "accent" | "error" | "warning" | "success";
12
+
13
+ export function resolveDataTableIntent(flags: {
14
+ accent?: boolean;
15
+ error?: boolean;
16
+ warning?: boolean;
17
+ success?: boolean;
18
+ }): DataTableIntentName | undefined {
19
+ if (flags.accent) return "accent";
20
+ if (flags.error) return "error";
21
+ if (flags.warning) return "warning";
22
+ if (flags.success) return "success";
23
+ return undefined;
24
+ }
25
+
26
+ export function rowIntentProps(rowData: Record<string, unknown> | undefined): Record<string, true> {
27
+ const intent = rowData?._intent;
28
+ if (intent === "accent" || intent === "error" || intent === "warning" || intent === "success") {
29
+ return { [intent]: true };
30
+ }
31
+ return {};
32
+ }
33
+
34
+ export function dataTableChrome(sizeToken: string) {
35
+ const recipe = sizeRecipeForToken(sizeToken);
36
+ return {
37
+ recipe,
38
+ iconPx: recipe.iconSize,
39
+ rowPx: recipe.height,
40
+ selectionCol: recipe.height,
41
+ expandCol: recipe.iconSize * 2,
42
+ rowNumberCol: Math.round(recipe.height * 1.25),
43
+ deleteCol: Math.round(recipe.height * 1.5),
44
+ indent: recipe.gap,
45
+ };
46
+ }
47
+
48
+ export type DataTableChrome = ReturnType<typeof dataTableChrome>;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * MPO-60 / living rulebook: DataTable design-law 100%.
3
+ *
4
+ * Pins the Part 3 DataTable contract that was still open on origin/main:
5
+ * intent joins the resolver path (not `intent: undefined`), row `_intent`
6
+ * rides the same `tr.t_*` theme class SimpleTable already uses (no Theme
7
+ * wrapper inside <table>), chrome glyphs follow LC-65 size recipes, and
8
+ * the frame spreads R-OUTER instead of cherry-picking R-SCALE.
9
+ *
10
+ * Rulings: /tmp/cursor-mpo-lanes/RULINGS-2026-08-28.md (campaign file).
11
+ */
12
+
13
+ import { createColumnHelper } from "@tanstack/react-table";
14
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
15
+ import { sizeRecipeForToken } from "@multiplatform.one/theme";
16
+ import { readFileSync } from "node:fs";
17
+ import { dirname, join } from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ import { describe, expect, it, vi } from "vitest";
20
+ import type { DataTableColumn } from "../../types";
21
+ import { DataTable } from "./index";
22
+
23
+ type Person = {
24
+ id: number;
25
+ firstName: string;
26
+ status: string;
27
+ _intent?: "accent" | "error" | "warning" | "success";
28
+ };
29
+
30
+ const columnHelper = createColumnHelper<Person>();
31
+ const columns: DataTableColumn<Person>[] = [
32
+ columnHelper.accessor("firstName", { header: "First Name" }) as DataTableColumn<Person>,
33
+ columnHelper.accessor("status", { header: "Status" }) as DataTableColumn<Person>,
34
+ ];
35
+
36
+ const here = dirname(fileURLToPath(import.meta.url));
37
+
38
+ function source(name: string): string {
39
+ return readFileSync(join(here, name), "utf8");
40
+ }
41
+
42
+ describe("DataTable design-law (intent + recipes)", () => {
43
+ it("paints row _intent on the real tr (SimpleTable dialect, no Theme wrapper)", () => {
44
+ const data: Person[] = [
45
+ { id: 1, firstName: "Ok", status: "Active" },
46
+ { id: 2, firstName: "Bad", status: "Failed", _intent: "error" },
47
+ { id: 3, firstName: "Warn", status: "Degraded", _intent: "warning" },
48
+ { id: 4, firstName: "Good", status: "Complete", _intent: "success" },
49
+ ];
50
+ const { container } = renderWithProviders(
51
+ <DataTable data={data} columns={columns} layout="table" onStateChange={vi.fn()} />,
52
+ );
53
+ expect(container.textContent).toContain("Bad");
54
+ expect(container.querySelector("tr.t_error")).not.toBeNull();
55
+ expect(container.querySelector("tr.t_warning")).not.toBeNull();
56
+ expect(container.querySelector("tr.t_success")).not.toBeNull();
57
+ for (const row of container.querySelectorAll("tr")) {
58
+ expect(row.parentElement?.tagName).toMatch(/THEAD|TBODY|TFOOT/);
59
+ }
60
+ });
61
+
62
+ it("expand-caret glyphs use the size recipe icon channel, not a handwritten 14", () => {
63
+ const data: Person[] = [
64
+ {
65
+ id: 1,
66
+ firstName: "John",
67
+ status: "Active",
68
+ subRows: [{ id: 11, firstName: "Kid", status: "Active" }],
69
+ } as Person,
70
+ ];
71
+ const { getAllByLabelText } = renderWithProviders(
72
+ <DataTable
73
+ data={data}
74
+ columns={columns}
75
+ enableRowExpansion
76
+ layout="table"
77
+ onStateChange={vi.fn()}
78
+ />,
79
+ );
80
+ const expand = getAllByLabelText(/^Expand row \d+$/)[0];
81
+ const svg = expand.querySelector("svg");
82
+ expect(svg).not.toBeNull();
83
+ const expected = sizeRecipeForToken("$4").iconSize;
84
+ expect(Number(svg?.getAttribute("width"))).toBe(expected);
85
+ expect(Number(svg?.getAttribute("width"))).not.toBe(14);
86
+ });
87
+
88
+ it("does not force intent: undefined — resolver is opt-in by component key", () => {
89
+ expect(source("DataTableRoot.tsx")).not.toMatch(/intent:\s*undefined/);
90
+ expect(source("index.native.tsx")).not.toMatch(/intent:\s*undefined/);
91
+ });
92
+
93
+ it("does not cherry-pick R-SCALE radius onto the R-OUTER frame", () => {
94
+ expect(source("DataTableRoot.tsx")).not.toMatch(/knobProps\.borderRadius\.borderRadius/);
95
+ expect(source("DataTableDocumentList.tsx")).not.toMatch(
96
+ /knobProps\.borderRadius\.borderRadius/,
97
+ );
98
+ });
99
+
100
+ it("does not hardcode caret size 14 or a raw 0.15s transform transition", () => {
101
+ const files = [
102
+ "DataTableRoot.tsx",
103
+ "index.native.tsx",
104
+ "DataTableCardControls.tsx",
105
+ "DataTableVirtualized.tsx",
106
+ ];
107
+ for (const file of files) {
108
+ const src = source(file);
109
+ expect(src, file).not.toMatch(/size=\{14\}/);
110
+ expect(src, file).not.toMatch(/transform 0\.15s ease/);
111
+ expect(src, file).not.toMatch(/const rowHeightPx = 40/);
112
+ }
113
+ });
114
+ });