@multiplatform.one/table 7.7.6 → 7.10.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 (384) hide show
  1. package/dist/cjs/components/ColumnHeaderFilter/index.cjs +74 -38
  2. package/dist/cjs/components/ColumnHeaderFilter/index.native.js +97 -51
  3. package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
  4. package/dist/cjs/components/DataTable/DataTableCardControls.cjs +0 -1
  5. package/dist/cjs/components/DataTable/DataTableCardControls.native.js +0 -1
  6. package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
  7. package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +100 -33
  8. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +139 -38
  9. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  10. package/dist/cjs/components/DataTable/DataTableRoot.cjs +33 -6
  11. package/dist/cjs/components/DataTable/DataTableRoot.native.js +29 -4
  12. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  13. package/dist/cjs/components/DataTable/DataTableStateContext.native.js.map +1 -1
  14. package/dist/cjs/components/DataTable/index.native.js +59 -93
  15. package/dist/cjs/components/DataTable/index.native.js.map +1 -1
  16. package/dist/cjs/components/DataTableBulkActions/index.cjs +0 -4
  17. package/dist/cjs/components/DataTableBulkActions/index.native.js +0 -4
  18. package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
  19. package/dist/cjs/components/DataTableCell/index.cjs +16 -1
  20. package/dist/cjs/components/DataTableCell/index.native.js +16 -1
  21. package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
  22. package/dist/cjs/components/DataTableDateFilter/index.cjs +0 -7
  23. package/dist/cjs/components/DataTableDateFilter/index.native.js +0 -7
  24. package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
  25. package/dist/cjs/components/DataTableFilterButton/index.cjs +0 -1
  26. package/dist/cjs/components/DataTableFilterButton/index.native.js +0 -1
  27. package/dist/cjs/components/DataTableFilterChips/FilterChip.cjs +2 -1
  28. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js +4 -1
  29. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -1
  30. package/dist/cjs/components/DataTableFilters/index.cjs +0 -1
  31. package/dist/cjs/components/DataTableFilters/index.native.js +0 -1
  32. package/dist/cjs/components/DataTableGrouping/index.cjs +0 -8
  33. package/dist/cjs/components/DataTableGrouping/index.native.js +0 -8
  34. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  35. package/dist/cjs/components/DataTablePagination/index.cjs +29 -13
  36. package/dist/cjs/components/DataTablePagination/index.native.js +30 -14
  37. package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
  38. package/dist/cjs/components/DataTableSearch/index.cjs +0 -3
  39. package/dist/cjs/components/DataTableSearch/index.native.js +0 -3
  40. package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
  41. package/dist/cjs/components/DataTableToolbar/index.cjs +0 -1
  42. package/dist/cjs/components/DataTableToolbar/index.native.js +0 -1
  43. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  44. package/dist/cjs/components/DataTableViewOptions/index.cjs +0 -5
  45. package/dist/cjs/components/DataTableViewOptions/index.native.js +0 -5
  46. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  47. package/dist/cjs/components/FilterManager.cjs +0 -1
  48. package/dist/cjs/components/FilterManager.native.js +0 -1
  49. package/dist/cjs/components/FilterManager.native.js.map +1 -1
  50. package/dist/cjs/components/FilterOperatorValueEditor/index.cjs +2 -2
  51. package/dist/cjs/components/FilterOperatorValueEditor/index.native.js +2 -2
  52. package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  53. package/dist/cjs/components/TableInput/index.cjs +2 -1
  54. package/dist/cjs/components/TableInput/index.native.js +4 -2
  55. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  56. package/dist/cjs/hooks/useDataTable.cjs +24 -8
  57. package/dist/cjs/hooks/useDataTable.native.js +28 -8
  58. package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
  59. package/dist/cjs/index.cjs +12 -0
  60. package/dist/cjs/index.native.js +12 -0
  61. package/dist/cjs/index.native.js.map +1 -1
  62. package/dist/cjs/shared/devWarn.cjs +70 -0
  63. package/dist/cjs/shared/devWarn.native.js +84 -0
  64. package/dist/cjs/shared/devWarn.native.js.map +1 -0
  65. package/dist/cjs/utils/columnAlign.cjs +4 -1
  66. package/dist/cjs/utils/columnAlign.native.js +4 -1
  67. package/dist/cjs/utils/columnAlign.native.js.map +1 -1
  68. package/dist/cjs/utils/filterFields.cjs +5 -0
  69. package/dist/cjs/utils/filterFields.native.js +5 -0
  70. package/dist/cjs/utils/filterFields.native.js.map +1 -1
  71. package/dist/cjs/utils/filterUtils.cjs +30 -0
  72. package/dist/cjs/utils/filterUtils.native.js +50 -0
  73. package/dist/cjs/utils/filterUtils.native.js.map +1 -1
  74. package/dist/cjs/utils/money.cjs +137 -0
  75. package/dist/cjs/utils/money.native.js +165 -0
  76. package/dist/cjs/utils/money.native.js.map +1 -0
  77. package/dist/cjs/utils/rowAccumulator.cjs +48 -0
  78. package/dist/cjs/utils/rowAccumulator.native.js +51 -0
  79. package/dist/cjs/utils/rowAccumulator.native.js.map +1 -0
  80. package/dist/esm/components/ColumnHeaderFilter/index.mjs +78 -42
  81. package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
  82. package/dist/esm/components/ColumnHeaderFilter/index.native.js +101 -55
  83. package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
  84. package/dist/esm/components/DataTable/DataTableCardControls.mjs +0 -1
  85. package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
  86. package/dist/esm/components/DataTable/DataTableCardControls.native.js +0 -1
  87. package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
  88. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +99 -34
  89. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  90. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +138 -39
  91. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  92. package/dist/esm/components/DataTable/DataTableRoot.mjs +33 -6
  93. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  94. package/dist/esm/components/DataTable/DataTableRoot.native.js +29 -4
  95. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  96. package/dist/esm/components/DataTable/DataTableStateContext.mjs.map +1 -1
  97. package/dist/esm/components/DataTable/DataTableStateContext.native.js.map +1 -1
  98. package/dist/esm/components/DataTable/index.native.js +60 -94
  99. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  100. package/dist/esm/components/DataTableBulkActions/index.mjs +0 -4
  101. package/dist/esm/components/DataTableBulkActions/index.mjs.map +1 -1
  102. package/dist/esm/components/DataTableBulkActions/index.native.js +0 -4
  103. package/dist/esm/components/DataTableBulkActions/index.native.js.map +1 -1
  104. package/dist/esm/components/DataTableCell/index.mjs +17 -2
  105. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  106. package/dist/esm/components/DataTableCell/index.native.js +17 -2
  107. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  108. package/dist/esm/components/DataTableDateFilter/index.mjs +0 -7
  109. package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
  110. package/dist/esm/components/DataTableDateFilter/index.native.js +0 -7
  111. package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
  112. package/dist/esm/components/DataTableFilterButton/index.mjs +0 -1
  113. package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
  114. package/dist/esm/components/DataTableFilterButton/index.native.js +0 -1
  115. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs +3 -2
  116. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs.map +1 -1
  117. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js +5 -2
  118. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -1
  119. package/dist/esm/components/DataTableFilters/index.mjs +0 -1
  120. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  121. package/dist/esm/components/DataTableFilters/index.native.js +0 -1
  122. package/dist/esm/components/DataTableGrouping/index.mjs +0 -8
  123. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  124. package/dist/esm/components/DataTableGrouping/index.native.js +0 -8
  125. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  126. package/dist/esm/components/DataTablePagination/index.mjs +30 -14
  127. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  128. package/dist/esm/components/DataTablePagination/index.native.js +31 -15
  129. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  130. package/dist/esm/components/DataTableSearch/index.mjs +0 -3
  131. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  132. package/dist/esm/components/DataTableSearch/index.native.js +0 -3
  133. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  134. package/dist/esm/components/DataTableToolbar/index.mjs +0 -1
  135. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  136. package/dist/esm/components/DataTableToolbar/index.native.js +0 -1
  137. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  138. package/dist/esm/components/DataTableViewOptions/index.mjs +0 -5
  139. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  140. package/dist/esm/components/DataTableViewOptions/index.native.js +0 -5
  141. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  142. package/dist/esm/components/FilterManager.mjs +0 -1
  143. package/dist/esm/components/FilterManager.mjs.map +1 -1
  144. package/dist/esm/components/FilterManager.native.js +0 -1
  145. package/dist/esm/components/FilterManager.native.js.map +1 -1
  146. package/dist/esm/components/FilterOperatorValueEditor/index.mjs +2 -2
  147. package/dist/esm/components/FilterOperatorValueEditor/index.mjs.map +1 -1
  148. package/dist/esm/components/FilterOperatorValueEditor/index.native.js +2 -2
  149. package/dist/esm/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  150. package/dist/esm/components/TableInput/index.mjs +3 -2
  151. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  152. package/dist/esm/components/TableInput/index.native.js +5 -3
  153. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  154. package/dist/esm/hooks/useDataTable.mjs +24 -8
  155. package/dist/esm/hooks/useDataTable.mjs.map +1 -1
  156. package/dist/esm/hooks/useDataTable.native.js +28 -8
  157. package/dist/esm/hooks/useDataTable.native.js.map +1 -1
  158. package/dist/esm/index.mjs +3 -1
  159. package/dist/esm/index.mjs.map +1 -1
  160. package/dist/esm/index.native.js +3 -1
  161. package/dist/esm/index.native.js.map +1 -1
  162. package/dist/esm/shared/devWarn.mjs +43 -0
  163. package/dist/esm/shared/devWarn.mjs.map +1 -0
  164. package/dist/esm/shared/devWarn.native.js +54 -0
  165. package/dist/esm/shared/devWarn.native.js.map +1 -0
  166. package/dist/esm/utils/columnAlign.mjs +4 -1
  167. package/dist/esm/utils/columnAlign.mjs.map +1 -1
  168. package/dist/esm/utils/columnAlign.native.js +4 -1
  169. package/dist/esm/utils/columnAlign.native.js.map +1 -1
  170. package/dist/esm/utils/filterFields.mjs +5 -0
  171. package/dist/esm/utils/filterFields.mjs.map +1 -1
  172. package/dist/esm/utils/filterFields.native.js +5 -0
  173. package/dist/esm/utils/filterFields.native.js.map +1 -1
  174. package/dist/esm/utils/filterUtils.mjs +30 -0
  175. package/dist/esm/utils/filterUtils.mjs.map +1 -1
  176. package/dist/esm/utils/filterUtils.native.js +50 -0
  177. package/dist/esm/utils/filterUtils.native.js.map +1 -1
  178. package/dist/esm/utils/money.mjs +104 -0
  179. package/dist/esm/utils/money.mjs.map +1 -0
  180. package/dist/esm/utils/money.native.js +129 -0
  181. package/dist/esm/utils/money.native.js.map +1 -0
  182. package/dist/esm/utils/rowAccumulator.mjs +23 -0
  183. package/dist/esm/utils/rowAccumulator.mjs.map +1 -0
  184. package/dist/esm/utils/rowAccumulator.native.js +23 -0
  185. package/dist/esm/utils/rowAccumulator.native.js.map +1 -0
  186. package/dist/jsx/components/ColumnHeaderFilter/index.mjs +78 -42
  187. package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
  188. package/dist/jsx/components/ColumnHeaderFilter/index.native.js +97 -51
  189. package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
  190. package/dist/jsx/components/DataTable/DataTableCardControls.mjs +0 -1
  191. package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
  192. package/dist/jsx/components/DataTable/DataTableCardControls.native.js +0 -1
  193. package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
  194. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +99 -34
  195. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  196. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +139 -38
  197. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  198. package/dist/jsx/components/DataTable/DataTableRoot.mjs +33 -6
  199. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  200. package/dist/jsx/components/DataTable/DataTableRoot.native.js +29 -4
  201. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  202. package/dist/jsx/components/DataTable/DataTableStateContext.mjs.map +1 -1
  203. package/dist/jsx/components/DataTable/DataTableStateContext.native.js.map +1 -1
  204. package/dist/jsx/components/DataTable/index.native.js +59 -93
  205. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  206. package/dist/jsx/components/DataTableBulkActions/index.mjs +0 -4
  207. package/dist/jsx/components/DataTableBulkActions/index.mjs.map +1 -1
  208. package/dist/jsx/components/DataTableBulkActions/index.native.js +0 -4
  209. package/dist/jsx/components/DataTableBulkActions/index.native.js.map +1 -1
  210. package/dist/jsx/components/DataTableCell/index.mjs +17 -2
  211. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  212. package/dist/jsx/components/DataTableCell/index.native.js +16 -1
  213. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  214. package/dist/jsx/components/DataTableDateFilter/index.mjs +0 -7
  215. package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
  216. package/dist/jsx/components/DataTableDateFilter/index.native.js +0 -7
  217. package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
  218. package/dist/jsx/components/DataTableFilterButton/index.mjs +0 -1
  219. package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
  220. package/dist/jsx/components/DataTableFilterButton/index.native.js +0 -1
  221. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs +3 -2
  222. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs.map +1 -1
  223. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js +4 -1
  224. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js.map +1 -1
  225. package/dist/jsx/components/DataTableFilters/index.mjs +0 -1
  226. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  227. package/dist/jsx/components/DataTableFilters/index.native.js +0 -1
  228. package/dist/jsx/components/DataTableGrouping/index.mjs +0 -8
  229. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  230. package/dist/jsx/components/DataTableGrouping/index.native.js +0 -8
  231. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  232. package/dist/jsx/components/DataTablePagination/index.mjs +30 -14
  233. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  234. package/dist/jsx/components/DataTablePagination/index.native.js +30 -14
  235. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  236. package/dist/jsx/components/DataTableSearch/index.mjs +0 -3
  237. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  238. package/dist/jsx/components/DataTableSearch/index.native.js +0 -3
  239. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  240. package/dist/jsx/components/DataTableToolbar/index.mjs +0 -1
  241. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  242. package/dist/jsx/components/DataTableToolbar/index.native.js +0 -1
  243. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  244. package/dist/jsx/components/DataTableViewOptions/index.mjs +0 -5
  245. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  246. package/dist/jsx/components/DataTableViewOptions/index.native.js +0 -5
  247. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  248. package/dist/jsx/components/FilterManager.mjs +0 -1
  249. package/dist/jsx/components/FilterManager.mjs.map +1 -1
  250. package/dist/jsx/components/FilterManager.native.js +0 -1
  251. package/dist/jsx/components/FilterManager.native.js.map +1 -1
  252. package/dist/jsx/components/FilterOperatorValueEditor/index.mjs +2 -2
  253. package/dist/jsx/components/FilterOperatorValueEditor/index.mjs.map +1 -1
  254. package/dist/jsx/components/FilterOperatorValueEditor/index.native.js +2 -2
  255. package/dist/jsx/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  256. package/dist/jsx/components/TableInput/index.mjs +3 -2
  257. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  258. package/dist/jsx/components/TableInput/index.native.js +4 -2
  259. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  260. package/dist/jsx/hooks/useDataTable.mjs +24 -8
  261. package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
  262. package/dist/jsx/hooks/useDataTable.native.js +28 -8
  263. package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
  264. package/dist/jsx/index.js +3 -1
  265. package/dist/jsx/index.js.map +1 -1
  266. package/dist/jsx/index.mjs +3 -1
  267. package/dist/jsx/index.mjs.map +1 -1
  268. package/dist/jsx/index.native.js +12 -0
  269. package/dist/jsx/index.native.js.map +1 -1
  270. package/dist/jsx/shared/devWarn.mjs +43 -0
  271. package/dist/jsx/shared/devWarn.mjs.map +1 -0
  272. package/dist/jsx/shared/devWarn.native.js +84 -0
  273. package/dist/jsx/shared/devWarn.native.js.map +1 -0
  274. package/dist/jsx/utils/columnAlign.mjs +4 -1
  275. package/dist/jsx/utils/columnAlign.mjs.map +1 -1
  276. package/dist/jsx/utils/columnAlign.native.js +4 -1
  277. package/dist/jsx/utils/columnAlign.native.js.map +1 -1
  278. package/dist/jsx/utils/filterFields.mjs +5 -0
  279. package/dist/jsx/utils/filterFields.mjs.map +1 -1
  280. package/dist/jsx/utils/filterFields.native.js +5 -0
  281. package/dist/jsx/utils/filterFields.native.js.map +1 -1
  282. package/dist/jsx/utils/filterUtils.mjs +30 -0
  283. package/dist/jsx/utils/filterUtils.mjs.map +1 -1
  284. package/dist/jsx/utils/filterUtils.native.js +50 -0
  285. package/dist/jsx/utils/filterUtils.native.js.map +1 -1
  286. package/dist/jsx/utils/money.mjs +104 -0
  287. package/dist/jsx/utils/money.mjs.map +1 -0
  288. package/dist/jsx/utils/money.native.js +165 -0
  289. package/dist/jsx/utils/money.native.js.map +1 -0
  290. package/dist/jsx/utils/rowAccumulator.mjs +23 -0
  291. package/dist/jsx/utils/rowAccumulator.mjs.map +1 -0
  292. package/dist/jsx/utils/rowAccumulator.native.js +51 -0
  293. package/dist/jsx/utils/rowAccumulator.native.js.map +1 -0
  294. package/package.json +12 -12
  295. package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.spec.tsx +142 -7
  296. package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.tsx +46 -9
  297. package/src/components/ColumnHeaderFilter/index.tsx +104 -47
  298. package/src/components/DataTable/DataTable.spec.tsx +5 -3
  299. package/src/components/DataTable/DataTable.stories.tsx +186 -14
  300. package/src/components/DataTable/DataTableCardControls.tsx +11 -13
  301. package/src/components/DataTable/DataTableMobileCards.tsx +162 -39
  302. package/src/components/DataTable/DataTableRoot.tsx +40 -14
  303. package/src/components/DataTable/DataTableStateContext.ts +7 -0
  304. package/src/components/DataTable/cardLayout.spec.tsx +19 -8
  305. package/src/components/DataTable/columnWidthLayout.spec.tsx +195 -0
  306. package/src/components/DataTable/dataTableMobileCards.spec.tsx +50 -2
  307. package/src/components/DataTable/headerSorting.spec.tsx +25 -0
  308. package/src/components/DataTable/index.native.tsx +80 -124
  309. package/src/components/DataTable/moneyColumn.spec.tsx +151 -0
  310. package/src/components/DataTable/nativeCardParity.spec.tsx +95 -0
  311. package/src/components/DataTable/rowAccumulator.spec.tsx +171 -0
  312. package/src/components/DataTableBulkActions/index.tsx +0 -4
  313. package/src/components/DataTableCell/index.tsx +28 -2
  314. package/src/components/DataTableColumnPinning/DataTableColumnPinning.stories.tsx +0 -4
  315. package/src/components/DataTableDateFilter/index.tsx +0 -7
  316. package/src/components/DataTableFilterButton/index.tsx +1 -1
  317. package/src/components/DataTableFilterChips/FilterChip.spec.tsx +6 -0
  318. package/src/components/DataTableFilterChips/FilterChip.tsx +3 -2
  319. package/src/components/DataTableFilters/index.tsx +1 -1
  320. package/src/components/DataTableGrouping/DataTableGrouping.stories.tsx +0 -4
  321. package/src/components/DataTableGrouping/index.tsx +1 -13
  322. package/src/components/DataTablePagination/DataTablePagination.stories.tsx +14 -1
  323. package/src/components/DataTablePagination/DataTablePagination.width.spec.tsx +51 -0
  324. package/src/components/DataTablePagination/index.tsx +60 -16
  325. package/src/components/DataTableSearch/index.tsx +2 -3
  326. package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +2 -4
  327. package/src/components/DataTableToolbar/index.tsx +1 -5
  328. package/src/components/DataTableViewOptions/index.tsx +2 -13
  329. package/src/components/FilterManager.tsx +1 -3
  330. package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.spec.tsx +1 -1
  331. package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.stories.tsx +1 -0
  332. package/src/components/FilterOperatorValueEditor/index.tsx +10 -2
  333. package/src/components/TableInput/index.native.tsx +3 -2
  334. package/src/components/TableInput/index.tsx +3 -2
  335. package/src/hooks/useDataTable.ts +43 -7
  336. package/src/index.ts +13 -0
  337. package/src/shared/devWarn.ts +97 -0
  338. package/src/types.ts +71 -2
  339. package/src/utils/columnAlign.ts +9 -1
  340. package/src/utils/filterFields.ts +23 -1
  341. package/src/utils/filterUtils.ts +50 -1
  342. package/src/utils/money.spec.ts +156 -0
  343. package/src/utils/money.ts +202 -0
  344. package/src/utils/rowAccumulator.ts +136 -0
  345. package/types/components/ColumnHeaderFilter/index.d.ts +9 -2
  346. package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
  347. package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
  348. package/types/components/DataTable/DataTableMobileCards.d.ts +42 -8
  349. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  350. package/types/components/DataTable/DataTableRoot.d.ts +1 -1
  351. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  352. package/types/components/DataTable/DataTableStateContext.d.ts +7 -0
  353. package/types/components/DataTable/DataTableStateContext.d.ts.map +1 -1
  354. package/types/components/DataTable/index.native.d.ts +1 -1
  355. package/types/components/DataTable/index.native.d.ts.map +1 -1
  356. package/types/components/DataTableBulkActions/index.d.ts.map +1 -1
  357. package/types/components/DataTableCell/index.d.ts.map +1 -1
  358. package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
  359. package/types/components/DataTableFilterChips/FilterChip.d.ts.map +1 -1
  360. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  361. package/types/components/DataTablePagination/index.d.ts.map +1 -1
  362. package/types/components/DataTableSearch/index.d.ts.map +1 -1
  363. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  364. package/types/components/DataTableViewOptions/index.d.ts.map +1 -1
  365. package/types/components/FilterManager.d.ts.map +1 -1
  366. package/types/components/FilterOperatorValueEditor/index.d.ts.map +1 -1
  367. package/types/components/TableInput/index.d.ts.map +1 -1
  368. package/types/components/TableInput/index.native.d.ts.map +1 -1
  369. package/types/hooks/useDataTable.d.ts +1 -1
  370. package/types/hooks/useDataTable.d.ts.map +1 -1
  371. package/types/index.d.ts +3 -0
  372. package/types/index.d.ts.map +1 -1
  373. package/types/shared/devWarn.d.ts +50 -0
  374. package/types/shared/devWarn.d.ts.map +1 -0
  375. package/types/types.d.ts +71 -3
  376. package/types/types.d.ts.map +1 -1
  377. package/types/utils/columnAlign.d.ts.map +1 -1
  378. package/types/utils/filterFields.d.ts.map +1 -1
  379. package/types/utils/filterUtils.d.ts +1 -1
  380. package/types/utils/filterUtils.d.ts.map +1 -1
  381. package/types/utils/money.d.ts +94 -0
  382. package/types/utils/money.d.ts.map +1 -0
  383. package/types/utils/rowAccumulator.d.ts +107 -0
  384. package/types/utils/rowAccumulator.d.ts.map +1 -0
@@ -366,7 +366,6 @@ export const WithGroupingControls = () => {
366
366
  <XStack gap="$3" flexWrap="wrap">
367
367
  <Button
368
368
  size="$3"
369
- variant="outlined"
370
369
  onPress={() =>
371
370
  setGroupingConfig({
372
371
  columns: ["region"],
@@ -378,7 +377,6 @@ export const WithGroupingControls = () => {
378
377
  </Button>
379
378
  <Button
380
379
  size="$3"
381
- variant="outlined"
382
380
  onPress={() =>
383
381
  setGroupingConfig({
384
382
  columns: ["category"],
@@ -390,7 +388,6 @@ export const WithGroupingControls = () => {
390
388
  </Button>
391
389
  <Button
392
390
  size="$3"
393
- variant="outlined"
394
391
  onPress={() =>
395
392
  setGroupingConfig({
396
393
  columns: ["region", "category"],
@@ -405,7 +402,6 @@ export const WithGroupingControls = () => {
405
402
  </Button>
406
403
  <Button
407
404
  size="$3"
408
- variant="outlined"
409
405
  onPress={() =>
410
406
  setGroupingConfig({
411
407
  columns: [],
@@ -637,7 +637,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
637
637
  <Popover.Trigger asChild>
638
638
  <Button
639
639
  size={knobProps.sizeToken}
640
- variant="outlined"
641
640
  icon={<GearIcon size={iconSize} />}
642
641
  disabled={disabled}
643
642
  aria-label="Grouping configuration"
@@ -716,7 +715,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
716
715
  </Text>
717
716
  <Button
718
717
  size={knobProps.sizeToken}
719
- variant="outlined"
720
718
  icon={<ArrowUpIcon size={iconSize} />}
721
719
  disabled={disabled || index === 0}
722
720
  onPress={() => handleMoveGroupBy(index, -1)}
@@ -724,7 +722,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
724
722
  />
725
723
  <Button
726
724
  size={knobProps.sizeToken}
727
- variant="outlined"
728
725
  icon={<ArrowDownIcon size={iconSize} />}
729
726
  disabled={disabled || index === currentConfig.columns.length - 1}
730
727
  onPress={() => handleMoveGroupBy(index, 1)}
@@ -732,7 +729,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
732
729
  />
733
730
  <Button
734
731
  size={knobProps.sizeToken}
735
- variant="outlined"
736
732
  icon={<MinusIcon size={iconSize} />}
737
733
  disabled={disabled}
738
734
  onPress={() => handleRemoveGroupBy(columnKey)}
@@ -756,7 +752,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
756
752
  <Button
757
753
  key={key}
758
754
  size={knobProps.sizeToken}
759
- variant="outlined"
760
755
  onPress={() => handleAddGroupBy(key)}
761
756
  >
762
757
  {column.header || key}
@@ -803,7 +798,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
803
798
  </Text>
804
799
  <Button
805
800
  size={knobProps.sizeToken}
806
- variant="outlined"
807
801
  icon={<MinusIcon size={iconSize} />}
808
802
  disabled={disabled}
809
803
  onPress={() => handleRemoveAggregation(index)}
@@ -828,7 +822,6 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
828
822
  <Separator />
829
823
  <Button
830
824
  size={knobProps.sizeToken}
831
- variant="outlined"
832
825
  error
833
826
  onPress={() => onConfigChange({ columns: [], aggregations: [] })}
834
827
  aria-label="Clear all grouping and aggregation"
@@ -946,12 +939,7 @@ function AggregationSelector<T = any>({ columns, onAddAggregation }: Aggregation
946
939
  />
947
940
  </View>
948
941
 
949
- <Button
950
- size={knobProps.sizeToken}
951
- variant="outlined"
952
- disabled={!selectedColumn}
953
- onPress={handleAdd}
954
- >
942
+ <Button size={knobProps.sizeToken} disabled={!selectedColumn} onPress={handleAdd}>
955
943
  Add
956
944
  </Button>
957
945
  </XStack>
@@ -1,5 +1,6 @@
1
1
  import { action } from "@multiplatform.one/storybook";
2
2
  import type { GuardrailSpecimenParameter } from "@multiplatform.one/theme";
3
+ import { Preset } from "@multiplatform.one/theme";
3
4
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
4
5
  import React from "react";
5
6
  // Catalog Button + Input (LC-56 STORY-HONESTY — no raw interactive primitives).
@@ -782,7 +783,7 @@ export const InfiniteVirtualized: Story = {
782
783
  };
783
784
 
784
785
  export const NarrowPanel: Story = {
785
- render: () => {
786
+ render: (args) => {
786
787
  const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 25 });
787
788
  return (
788
789
  <YStack width={249}>
@@ -794,8 +795,20 @@ export const NarrowPanel: Story = {
794
795
  totalPages: Math.ceil(1000 / pagination.pageSize),
795
796
  }}
796
797
  onPaginationChange={setPagination}
798
+ {...args}
797
799
  />
798
800
  </YStack>
799
801
  );
800
802
  },
801
803
  };
804
+
805
+ export const LargeSpaceNarrow: Story = {
806
+ ...NarrowPanel,
807
+ decorators: [
808
+ (Story) => (
809
+ <Preset overrides={{ space: "large" }}>
810
+ <Story />
811
+ </Preset>
812
+ ),
813
+ ],
814
+ };
@@ -3,16 +3,22 @@ import { renderWithProviders } from "@multiplatform.one/test-utils";
3
3
  import { act, fireEvent, screen, within } from "@testing-library/react";
4
4
  import { beforeEach, describe, expect, it, vi } from "vitest";
5
5
  import type { LayoutChangeEvent } from "react-native";
6
+ import { Preset } from "@multiplatform.one/theme";
6
7
 
7
8
  const observed = vi.hoisted(() => ({
8
9
  onLayout: undefined as undefined | ((event: LayoutChangeEvent) => void),
9
10
  change: vi.fn(),
11
+ sizeWidth: 0,
10
12
  }));
11
13
  vi.mock("tamagui", async (importOriginal) => {
12
14
  const actual = await importOriginal<typeof import("tamagui")>();
13
15
  return {
14
16
  ...actual,
15
17
  useMedia: () => ({ sm: true }),
18
+ View: forwardRef((props: any, ref) => {
19
+ if (props["data-pagination-control"] === "size") observed.sizeWidth = props.width;
20
+ return createElement(actual.View, { ...props, ref });
21
+ }),
16
22
  XStack: forwardRef((props: any, ref) => {
17
23
  if (props["aria-label"] === "Table pagination") observed.onLayout = props.onLayout;
18
24
  return createElement(actual.XStack, { ...props, ref });
@@ -42,6 +48,26 @@ beforeEach(() => {
42
48
  });
43
49
 
44
50
  describe("bounded compact table pagination", () => {
51
+ it("preserves the default footprint and grows for wide numeric options", () => {
52
+ const { rerender } = renderWithProviders(<DataTablePagination compact />);
53
+ expect(observed.sizeWidth).toBe(80);
54
+ rerender(<DataTablePagination compact pageSizeOptions={[10, 25, 1000000]} />);
55
+ expect(observed.sizeWidth).toBeGreaterThan(80);
56
+ });
57
+
58
+ it("budgets the always-compact Select independently from footer spacing", () => {
59
+ const renderPager = (compact: boolean) => (
60
+ <Preset overrides={{ space: "large" }}>
61
+ <DataTablePagination compact={compact} />
62
+ </Preset>
63
+ );
64
+ const { rerender } = renderWithProviders(renderPager(false));
65
+ const width = observed.sizeWidth;
66
+ expect(width).toBeGreaterThan(80);
67
+ rerender(renderPager(true));
68
+ expect(observed.sizeWidth).toBe(width);
69
+ });
70
+
45
71
  it("starts safely and responds to container width even on a desktop viewport", () => {
46
72
  renderWithProviders(<DataTablePagination compact />);
47
73
  const pager = () => within(screen.getByRole("navigation", { name: "Page" }));
@@ -55,4 +81,29 @@ describe("bounded compact table pagination", () => {
55
81
  fireEvent.click(pager().getByLabelText("Go to next page"));
56
82
  expect(observed.change).toHaveBeenCalledExactlyOnceWith({ pageIndex: 1, pageSize: 25 });
57
83
  });
84
+
85
+ it("preserves the presentation when a container reports its width again", () => {
86
+ renderWithProviders(<DataTablePagination compact />);
87
+ measure(249);
88
+ const pager = screen.getByRole("navigation", { name: "Page" });
89
+ const buttons = within(pager).getAllByRole("button");
90
+ measure(249);
91
+ expect(within(pager).getAllByRole("button")).toEqual(buttons);
92
+ expect(observed.change).not.toHaveBeenCalled();
93
+ });
94
+
95
+ it("resets to the first page when rows per page changes in a narrow table", async () => {
96
+ renderWithProviders(
97
+ <DataTablePagination
98
+ compact
99
+ pagination={{ pageIndex: 5, pageSize: 25, totalPages: 40, totalCount: 1000 }}
100
+ />,
101
+ );
102
+ measure(249);
103
+ fireEvent.click(screen.getByLabelText("Select rows per page"));
104
+ fireEvent.keyDown(await screen.findByRole("option", { name: "50" }), {
105
+ key: "Enter",
106
+ });
107
+ expect(observed.change).toHaveBeenCalledExactlyOnceWith({ pageIndex: 0, pageSize: 50 });
108
+ });
58
109
  });
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  ensureCompositeFocusRing,
3
+ isTouchSurface,
3
4
  MIN_PRESS_TARGET,
5
+ sizeRecipeForToken,
6
+ textFieldInset,
4
7
  useResolvedKnobs,
5
8
  } from "@multiplatform.one/theme";
6
9
  import { Pagination, getPaginationItems } from "@multiplatform.one/components";
@@ -28,8 +31,10 @@ export interface DataTablePaginationProps {
28
31
  compact?: boolean;
29
32
  }
30
33
 
31
- function controlWidth(chars: number, chrome: number) {
32
- return Math.max(48, chars * 12 + chrome);
34
+ function controlWidth(chars: number, fontSize: number, inset: number, trailingChrome = 0) {
35
+ // Conservative $body digit width, checked against rendered ink in Storybook.
36
+ // Include the Box's two hairline borders after its single horizontal inset.
37
+ return Math.ceil(chars * fontSize * 0.65) + inset * 2 + trailingChrome + 2;
33
38
  }
34
39
 
35
40
  function formatRange(start: number, end: number, total: number) {
@@ -87,7 +92,14 @@ export function DataTablePagination(props: DataTablePaginationProps) {
87
92
 
88
93
  const { sm } = useMedia();
89
94
  const { knobProps } = useResolvedKnobs(compact === undefined ? undefined : { compact });
95
+ // The fields are always compact, independently of the footer's layout.
96
+ const { knobProps: fieldKnobs } = useResolvedKnobs({ compact: true });
97
+ const fieldRecipe = sizeRecipeForToken(knobProps.sizeToken, { touch: isTouchSurface() });
98
+ const selectInset = Number(
99
+ getTokenValue(fieldKnobs.panelPadding.padding as Parameters<typeof getTokenValue>[0], "space"),
100
+ );
90
101
  const isMobile = !sm;
102
+ const packed = compact && insideTable;
91
103
  const [availableWidth, setAvailableWidth] = useState<number | undefined>();
92
104
  const measureWidth = (event: import("react-native").LayoutChangeEvent) => {
93
105
  const width = event.nativeEvent.layout.width;
@@ -132,9 +144,14 @@ export function DataTablePagination(props: DataTablePaginationProps) {
132
144
  const gapPixels = Number(
133
145
  getTokenValue(knobProps.gap.gap as Parameters<typeof getTokenValue>[0], "space"),
134
146
  );
135
- const paddingPixels = Number(
136
- getTokenValue(knobProps.panelPadding.padding as Parameters<typeof getTokenValue>[0], "space"),
137
- );
147
+ const paddingPixels = packed
148
+ ? 0
149
+ : Number(
150
+ getTokenValue(
151
+ knobProps.panelPadding.padding as Parameters<typeof getTokenValue>[0],
152
+ "space",
153
+ ),
154
+ );
138
155
  const measuredBudget =
139
156
  pageControls * controlBudget + Math.max(0, pageControls - 1) * gapPixels + paddingPixels * 2;
140
157
  const numberedBudget = Number.isFinite(measuredBudget) ? measuredBudget : Infinity;
@@ -166,15 +183,30 @@ export function DataTablePagination(props: DataTablePaginationProps) {
166
183
 
167
184
  const helperText = {
168
185
  ...knobProps.label,
169
- color: "$color10" as const,
186
+ color: knobProps.textAccentColor,
170
187
  userSelect: "none" as const,
171
188
  };
172
189
 
173
190
  const sizeControl = showSize ? (
174
- <XStack alignItems="center" gap="$2" flexShrink={0}>
191
+ <XStack
192
+ alignItems="center"
193
+ gap="$2"
194
+ flexShrink={0}
195
+ flexWrap="wrap"
196
+ minWidth={0}
197
+ maxWidth="100%"
198
+ >
175
199
  <Text {...helperText}>Rows per page:</Text>
176
200
  <View
177
- width={controlWidth(Math.max(2, ...sizeOptions.map((n) => String(n).length)), 44)}
201
+ width={Math.max(
202
+ 80,
203
+ controlWidth(
204
+ Math.max(2, ...sizeOptions.map((n) => String(n).length)),
205
+ fieldKnobs.controlType.fontSize,
206
+ selectInset,
207
+ fieldRecipe.gap + 16, // Select's fixed 16px caret.
208
+ ),
209
+ )}
178
210
  overflow="visible"
179
211
  flexShrink={0}
180
212
  {...({ "data-pagination-control": "size" } as object)}
@@ -206,6 +238,7 @@ export function DataTablePagination(props: DataTablePaginationProps) {
206
238
  onPageChange={(page) => handlePageChange(page - 1)}
207
239
  showFirstLast={!simplePager && !compact && !isMobile}
208
240
  aria-label="Page"
241
+ padding={0}
209
242
  />
210
243
  ) : null;
211
244
 
@@ -213,7 +246,14 @@ export function DataTablePagination(props: DataTablePaginationProps) {
213
246
  <XStack alignItems="center" gap="$2" flexShrink={0} aria-label="Jump to page">
214
247
  <Text {...helperText}>Go to page:</Text>
215
248
  <View
216
- width={controlWidth(String(totalPages).length, 28)}
249
+ width={Math.max(
250
+ 48,
251
+ controlWidth(
252
+ String(totalPages).length,
253
+ fieldRecipe.fontSize,
254
+ textFieldInset(fieldRecipe),
255
+ ),
256
+ )}
217
257
  overflow="visible"
218
258
  flexShrink={0}
219
259
  {...({ "data-pagination-control": "jump" } as object)}
@@ -249,8 +289,6 @@ export function DataTablePagination(props: DataTablePaginationProps) {
249
289
  </Text>
250
290
  ) : null;
251
291
 
252
- const packed = compact && insideTable;
253
-
254
292
  if (packed) {
255
293
  return (
256
294
  <XStack
@@ -273,9 +311,9 @@ export function DataTablePagination(props: DataTablePaginationProps) {
273
311
  }
274
312
 
275
313
  return (
276
- // UX-P08 / LC-10 + Axiom 15 (G-03): side clusters grow equally so the
277
- // pager stays on the true centerline; when the row wraps each cluster
278
- // keeps its own alignment line. rowGap stays on the within-group rhythm.
314
+ // LC-10: intrinsic cluster widths participate in wrapping. Zero flex
315
+ // bases let the controls overlap while the footer itself still fits.
316
+ // A constrained size cluster can also wrap its label above the field.
279
317
  <XStack
280
318
  role="group"
281
319
  aria-label="Table pagination"
@@ -290,7 +328,14 @@ export function DataTablePagination(props: DataTablePaginationProps) {
290
328
  paddingHorizontal={knobProps.panelPadding.padding}
291
329
  paddingVertical="$2"
292
330
  >
293
- <XStack alignItems="center" flexGrow={1} flexBasis={0} justifyContent="flex-start">
331
+ <XStack
332
+ alignItems="center"
333
+ flexGrow={1}
334
+ flexShrink={1}
335
+ minWidth={0}
336
+ maxWidth="100%"
337
+ justifyContent="flex-start"
338
+ >
294
339
  {sizeControl}
295
340
  </XStack>
296
341
 
@@ -305,7 +350,6 @@ export function DataTablePagination(props: DataTablePaginationProps) {
305
350
  alignItems="center"
306
351
  {...knobProps.gap}
307
352
  flexGrow={1}
308
- flexBasis={0}
309
353
  flexShrink={0}
310
354
  justifyContent="flex-end"
311
355
  >
@@ -253,7 +253,6 @@ function SearchOptionsPopover({
253
253
  <Popover.Trigger asChild>
254
254
  <Button
255
255
  size={knobProps.sizeToken}
256
- variant="outlined"
257
256
  accent={optionsActive}
258
257
  icon={<SlidersHorizontalIcon size={iconPx} weight={optionsActive ? "fill" : "regular"} />}
259
258
  disabled={disabled}
@@ -326,10 +325,10 @@ function SearchOptionsPopover({
326
325
  </XStack>
327
326
 
328
327
  <XStack {...knobProps.gap}>
329
- <Button size="$2" compact variant="outlined" onPress={handleSelectAllColumns}>
328
+ <Button size="$2" compact onPress={handleSelectAllColumns}>
330
329
  {t("All")}
331
330
  </Button>
332
- <Button size="$2" compact variant="outlined" onPress={handleSelectNoColumns}>
331
+ <Button size="$2" compact onPress={handleSelectNoColumns}>
333
332
  {t("None")}
334
333
  </Button>
335
334
  </XStack>
@@ -71,9 +71,7 @@ const MainStory = () => {
71
71
  enableGlobalSearch
72
72
  enableViews
73
73
  initialState={{ pagination: { pageIndex: 1, pageSize: 3 } }}
74
- renderToolbar={(props) => (
75
- <DataTableToolbar {...props} enableViews enableExport />
76
- )}
74
+ renderToolbar={(props) => <DataTableToolbar {...props} enableViews enableExport />}
77
75
  aria-label="Employee table with toolbar"
78
76
  />
79
77
  </YStack>
@@ -154,7 +152,7 @@ const WithCustomActionsStory = () => {
154
152
  onClearFilters={() => setSearch("")}
155
153
  customActions={
156
154
  <XStack gap="$2">
157
- <Button size="$2" variant="outlined" onPress={() => action("refresh")()}>
155
+ <Button size="$2" onPress={() => action("refresh")()}>
158
156
  Refresh
159
157
  </Button>
160
158
  <Button size="$2" onPress={() => action("export")()}>
@@ -228,11 +228,7 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
228
228
  }}
229
229
  />
230
230
  <XStack {...knobProps.gap} justifyContent="flex-end">
231
- <Button
232
- size={controlSize}
233
- variant="outlined"
234
- onPress={() => setShowSaveViewDialog(false)}
235
- >
231
+ <Button size={controlSize} onPress={() => setShowSaveViewDialog(false)}>
236
232
  {t("Cancel")}
237
233
  </Button>
238
234
  <Button
@@ -119,7 +119,6 @@ export function DataTableViewOptions(props: DataTableViewOptionsProps) {
119
119
  <DropdownMenu.Trigger asChild>
120
120
  <Button
121
121
  size={knobProps.sizeToken}
122
- variant="outlined"
123
122
  icon={<GearIcon size={iconPx} />}
124
123
  aria-label={t("Open table view options")}
125
124
  >
@@ -176,7 +175,6 @@ export function DataTableViewOptions(props: DataTableViewOptionsProps) {
176
175
 
177
176
  <Button
178
177
  size={knobProps.sizeToken}
179
- variant="outlined"
180
178
  onPress={onResetToDefault}
181
179
  icon={<ArrowCounterClockwiseIcon size={iconPx} />}
182
180
  >
@@ -419,11 +417,7 @@ function ViewManagementSection({
419
417
  {/* Save Current View */}
420
418
  <Popover open={showSaveDialog} onOpenChange={setShowSaveDialog}>
421
419
  <Popover.Trigger asChild>
422
- <Button
423
- size={knobProps.sizeToken}
424
- variant="outlined"
425
- icon={<FloppyDiskIcon size={iconPx} />}
426
- >
420
+ <Button size={knobProps.sizeToken} icon={<FloppyDiskIcon size={iconPx} />}>
427
421
  {t("Save Current View")}
428
422
  </Button>
429
423
  </Popover.Trigger>
@@ -448,11 +442,7 @@ function ViewManagementSection({
448
442
  }}
449
443
  />
450
444
  <XStack gap="$2" justifyContent="flex-end">
451
- <Button
452
- size={knobProps.sizeToken}
453
- variant="outlined"
454
- onPress={() => setShowSaveDialog(false)}
455
- >
445
+ <Button size={knobProps.sizeToken} onPress={() => setShowSaveDialog(false)}>
456
446
  {t("Cancel")}
457
447
  </Button>
458
448
  <Button
@@ -489,7 +479,6 @@ function ViewManagementSection({
489
479
  <Text fontSize="$3">{view.name}</Text>
490
480
  <Button
491
481
  size={knobProps.sizeToken}
492
- variant="outlined"
493
482
  onPress={() => onLoadView(view.id)}
494
483
  disabled={activeViewId === view.id}
495
484
  >
@@ -136,9 +136,7 @@ export function FilterManager({
136
136
  <XStack gap="$3" justifyContent="flex-end">
137
137
  <KnobDialogClose asChild>
138
138
  {/* DG-ACT-05: the cancel action never renders disabled. */}
139
- <Button size={knobProps.sizeToken} variant="outlined">
140
- {t("Cancel")}
141
- </Button>
139
+ <Button size={knobProps.sizeToken}>{t("Cancel")}</Button>
142
140
  </KnobDialogClose>
143
141
  {/* Stays pressable on an empty name — handleSave surfaces the
144
142
  inline "Filter name is required" instead of a bare-disabled
@@ -19,7 +19,7 @@ const statusOptions = [
19
19
  { label: "Done", value: "done" },
20
20
  ];
21
21
 
22
- const fieldTypes: DataTableColumnType[] = ["text", "number", "date", "boolean", "select"];
22
+ const fieldTypes: DataTableColumnType[] = ["text", "number", "money", "date", "boolean", "select"];
23
23
 
24
24
  /** Every forms Select trigger in the tree, in render order (Condition first). */
25
25
  const selectTriggers = (container: HTMLElement) =>
@@ -44,6 +44,7 @@ const statusOptions = [
44
44
  const fieldTypeLabels: Record<DataTableColumnType, string> = {
45
45
  text: "Text",
46
46
  number: "Number",
47
+ money: "Money",
47
48
  date: "Date",
48
49
  boolean: "Boolean",
49
50
  select: "Select",
@@ -111,10 +111,18 @@ export function FilterOperatorValueEditor({
111
111
  label={t("Value")}
112
112
  value={value}
113
113
  onChangeText={onValueChange}
114
- placeholder={fieldType === "date" ? t("YYYY-MM-DD") : t("Enter value...")}
114
+ placeholder={
115
+ fieldType === "date"
116
+ ? t("YYYY-MM-DD")
117
+ : fieldType === "money"
118
+ ? t("0.00")
119
+ : t("Enter value...")
120
+ }
115
121
  size="$3"
116
122
  compact
117
- {...(fieldType === "number" && { keyboardType: "numeric" })}
123
+ {...((fieldType === "number" || fieldType === "money") && {
124
+ keyboardType: "numeric",
125
+ })}
118
126
  />
119
127
  )}
120
128
  </YStack>
@@ -23,7 +23,7 @@ import { TrashIcon, PlusIcon } from "@phosphor-icons/react";
23
23
  import { useTranslation } from "react-i18next";
24
24
  import { getTableCellPadding } from "@multiplatform.one/table-primitives";
25
25
  import { hairline, useResolvedKnobs } from "@multiplatform.one/theme";
26
- import { Text, View, XStack, YStack } from "tamagui";
26
+ import { Text, View, XStack, YStack, useTheme } from "tamagui";
27
27
  import type {
28
28
  DataTableColumn,
29
29
  DataTableData,
@@ -212,6 +212,7 @@ function TableInputInner<TData extends DataTableData>({
212
212
  compact,
213
213
  t,
214
214
  }: TableInputInnerProps<TData>) {
215
+ const theme = useTheme();
215
216
  const { knobProps } = useResolvedKnobs({ compact });
216
217
  const cellPad = getTableCellPadding(knobProps.space);
217
218
  const chromePx = knobProps.nestedControl.px;
@@ -332,7 +333,7 @@ function TableInputInner<TData extends DataTableData>({
332
333
  row: index + 1,
333
334
  })}
334
335
  >
335
- <TrashIcon size={16} color="$red10" />
336
+ <TrashIcon size={16} color={theme.red10?.val ?? "currentColor"} />
336
337
  </Button>
337
338
  </View>
338
339
  )}
@@ -38,7 +38,7 @@ import { TrashIcon, PlusIcon } from "@phosphor-icons/react";
38
38
  import { useTranslation } from "react-i18next";
39
39
  import { Table, getTableCellPadding } from "@multiplatform.one/table-primitives";
40
40
  import { hairline, useResolvedKnobs } from "@multiplatform.one/theme";
41
- import { Text, View, XStack, YStack, isWeb } from "tamagui";
41
+ import { Text, View, XStack, YStack, isWeb, useTheme } from "tamagui";
42
42
  import type {
43
43
  DataTableColumn,
44
44
  DataTableData,
@@ -240,6 +240,7 @@ function TableInputInner<TData extends DataTableData>({
240
240
  enableReorder,
241
241
  t,
242
242
  }: TableInputInnerProps<TData>) {
243
+ const theme = useTheme();
243
244
  const { knobProps } = useResolvedKnobs({ compact });
244
245
  const cellPad = getTableCellPadding(knobProps.space);
245
246
  const chromePx = knobProps.nestedControl.px;
@@ -471,7 +472,7 @@ function TableInputInner<TData extends DataTableData>({
471
472
  row: row.index + 1,
472
473
  })}
473
474
  >
474
- <TrashIcon size={16} color="$red10" />
475
+ <TrashIcon size={16} color={theme.red10?.val ?? "currentColor"} />
475
476
  </Button>
476
477
  );
477
478
  },