@multiplatform.one/table 6.7.0 → 7.0.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 (473) hide show
  1. package/README.md +4 -3
  2. package/dist/cjs/components/ChildTable/index.cjs +2 -1
  3. package/dist/cjs/components/ChildTable/index.native.js +2 -1
  4. package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
  5. package/dist/cjs/components/ColumnHeaderFilter/index.cjs +17 -9
  6. package/dist/cjs/components/ColumnHeaderFilter/index.native.js +32 -11
  7. package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
  8. package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +222 -0
  9. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +237 -0
  10. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  11. package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +5 -2
  12. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -2
  13. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  14. package/dist/cjs/components/DataTable/DataTableRoot.cjs +92 -41
  15. package/dist/cjs/components/DataTable/DataTableRoot.native.js +97 -43
  16. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  17. package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +8 -2
  18. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +9 -3
  19. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  20. package/dist/cjs/components/DataTable/documentListSlots.cjs +59 -0
  21. package/dist/cjs/components/DataTable/documentListSlots.native.js +85 -0
  22. package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -0
  23. package/dist/cjs/components/DataTable/index.native.js +74 -59
  24. package/dist/cjs/components/DataTable/index.native.js.map +1 -1
  25. package/dist/cjs/components/DataTable/rowStateChrome.cjs +55 -0
  26. package/dist/cjs/components/DataTable/rowStateChrome.native.js +59 -0
  27. package/dist/cjs/components/DataTable/rowStateChrome.native.js.map +1 -0
  28. package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +24 -3
  29. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +6 -1
  30. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  31. package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +9 -2
  32. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  33. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  34. package/dist/cjs/components/DataTableCell/index.cjs +74 -63
  35. package/dist/cjs/components/DataTableCell/index.native.js +94 -82
  36. package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
  37. package/dist/cjs/components/DataTableColumnPinning/index.cjs +54 -37
  38. package/dist/cjs/components/DataTableColumnPinning/index.native.js +59 -38
  39. package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
  40. package/dist/cjs/components/DataTableDateFilter/index.cjs +33 -14
  41. package/dist/cjs/components/DataTableDateFilter/index.native.js +33 -12
  42. package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
  43. package/dist/cjs/components/DataTableExport/index.cjs +35 -7
  44. package/dist/cjs/components/DataTableExport/index.native.js +42 -7
  45. package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
  46. package/dist/cjs/components/DataTableFacetMenu/index.cjs +140 -0
  47. package/dist/cjs/components/DataTableFacetMenu/index.native.js +156 -0
  48. package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -0
  49. package/dist/cjs/components/DataTableFilterButton/index.cjs +51 -32
  50. package/dist/cjs/components/DataTableFilterButton/index.native.js +63 -40
  51. package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
  52. package/dist/cjs/components/DataTableFilterChips/FilterChip.cjs +143 -0
  53. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js +148 -0
  54. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  55. package/dist/cjs/components/DataTableFilterChips/index.cjs +9 -31
  56. package/dist/cjs/components/DataTableFilterChips/index.native.js +9 -32
  57. package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -1
  58. package/dist/cjs/components/DataTableFilters/index.cjs +145 -502
  59. package/dist/cjs/components/DataTableFilters/index.native.js +171 -544
  60. package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
  61. package/dist/cjs/components/DataTableGrouping/index.cjs +273 -108
  62. package/dist/cjs/components/DataTableGrouping/index.native.js +310 -157
  63. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  64. package/dist/cjs/components/DataTablePagination/index.cjs +147 -95
  65. package/dist/cjs/components/DataTablePagination/index.native.js +159 -106
  66. package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
  67. package/dist/cjs/components/DataTableSearch/index.cjs +251 -210
  68. package/dist/cjs/components/DataTableSearch/index.native.js +292 -243
  69. package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
  70. package/dist/cjs/components/DataTableToolbar/index.cjs +141 -115
  71. package/dist/cjs/components/DataTableToolbar/index.native.js +163 -148
  72. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  73. package/dist/cjs/components/DataTableViewOptions/index.cjs +25 -21
  74. package/dist/cjs/components/DataTableViewOptions/index.native.js +6 -4
  75. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  76. package/dist/cjs/components/SimpleTable/index.cjs +336 -46
  77. package/dist/cjs/components/SimpleTable/index.native.js +356 -48
  78. package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
  79. package/dist/cjs/components/TableInput/index.cjs +147 -38
  80. package/dist/cjs/components/TableInput/index.native.js +54 -38
  81. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  82. package/dist/cjs/components/TableInput/shared.cjs +36 -1
  83. package/dist/cjs/components/TableInput/shared.native.js +35 -0
  84. package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
  85. package/dist/cjs/hooks/useDataTable.cjs +33 -2
  86. package/dist/cjs/hooks/useDataTable.native.js +41 -2
  87. package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
  88. package/dist/cjs/hooks/useInfiniteRows.cjs +20 -3
  89. package/dist/cjs/hooks/useInfiniteRows.native.js +20 -3
  90. package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -1
  91. package/dist/cjs/index.cjs +2 -0
  92. package/dist/cjs/index.native.js +2 -0
  93. package/dist/cjs/index.native.js.map +1 -1
  94. package/dist/cjs/utils/filterUtils.cjs +12 -5
  95. package/dist/cjs/utils/filterUtils.native.js +20 -5
  96. package/dist/cjs/utils/filterUtils.native.js.map +1 -1
  97. package/dist/esm/components/ChildTable/index.mjs +2 -1
  98. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  99. package/dist/esm/components/ChildTable/index.native.js +2 -1
  100. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  101. package/dist/esm/components/ColumnHeaderFilter/index.mjs +17 -9
  102. package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
  103. package/dist/esm/components/ColumnHeaderFilter/index.native.js +32 -11
  104. package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
  105. package/dist/esm/components/DataTable/DataTableDocumentList.mjs +196 -0
  106. package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -0
  107. package/dist/esm/components/DataTable/DataTableDocumentList.native.js +208 -0
  108. package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  109. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -2
  110. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  111. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -2
  112. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  113. package/dist/esm/components/DataTable/DataTableRoot.mjs +93 -42
  114. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  115. package/dist/esm/components/DataTable/DataTableRoot.native.js +98 -44
  116. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  117. package/dist/esm/components/DataTable/DataTableVirtualized.mjs +8 -2
  118. package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  119. package/dist/esm/components/DataTable/DataTableVirtualized.native.js +9 -3
  120. package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  121. package/dist/esm/components/DataTable/documentListSlots.mjs +33 -0
  122. package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -0
  123. package/dist/esm/components/DataTable/documentListSlots.native.js +56 -0
  124. package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -0
  125. package/dist/esm/components/DataTable/index.native.js +52 -37
  126. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  127. package/dist/esm/components/DataTable/rowStateChrome.mjs +28 -0
  128. package/dist/esm/components/DataTable/rowStateChrome.mjs.map +1 -0
  129. package/dist/esm/components/DataTable/rowStateChrome.native.js +29 -0
  130. package/dist/esm/components/DataTable/rowStateChrome.native.js.map +1 -0
  131. package/dist/esm/components/DataTableCell/CellModalEditor.mjs +25 -4
  132. package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  133. package/dist/esm/components/DataTableCell/CellModalEditor.native.js +6 -1
  134. package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  135. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +9 -2
  136. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  137. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  138. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  139. package/dist/esm/components/DataTableCell/index.mjs +75 -64
  140. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  141. package/dist/esm/components/DataTableCell/index.native.js +95 -83
  142. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  143. package/dist/esm/components/DataTableColumnPinning/index.mjs +54 -37
  144. package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
  145. package/dist/esm/components/DataTableColumnPinning/index.native.js +59 -38
  146. package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
  147. package/dist/esm/components/DataTableDateFilter/index.mjs +34 -15
  148. package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
  149. package/dist/esm/components/DataTableDateFilter/index.native.js +34 -13
  150. package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
  151. package/dist/esm/components/DataTableExport/index.mjs +36 -8
  152. package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
  153. package/dist/esm/components/DataTableExport/index.native.js +43 -8
  154. package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
  155. package/dist/esm/components/DataTableFacetMenu/index.mjs +115 -0
  156. package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -0
  157. package/dist/esm/components/DataTableFacetMenu/index.native.js +128 -0
  158. package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -0
  159. package/dist/esm/components/DataTableFilterButton/index.mjs +54 -35
  160. package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
  161. package/dist/esm/components/DataTableFilterButton/index.native.js +66 -43
  162. package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
  163. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs +118 -0
  164. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
  165. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js +120 -0
  166. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  167. package/dist/esm/components/DataTableFilterChips/index.mjs +9 -32
  168. package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
  169. package/dist/esm/components/DataTableFilterChips/index.native.js +9 -33
  170. package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -1
  171. package/dist/esm/components/DataTableFilters/index.mjs +149 -506
  172. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  173. package/dist/esm/components/DataTableFilters/index.native.js +175 -548
  174. package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
  175. package/dist/esm/components/DataTableGrouping/index.mjs +275 -110
  176. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  177. package/dist/esm/components/DataTableGrouping/index.native.js +287 -134
  178. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  179. package/dist/esm/components/DataTablePagination/index.mjs +148 -96
  180. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  181. package/dist/esm/components/DataTablePagination/index.native.js +160 -107
  182. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  183. package/dist/esm/components/DataTableSearch/index.mjs +256 -215
  184. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  185. package/dist/esm/components/DataTableSearch/index.native.js +297 -248
  186. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  187. package/dist/esm/components/DataTableToolbar/index.mjs +145 -119
  188. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  189. package/dist/esm/components/DataTableToolbar/index.native.js +167 -152
  190. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  191. package/dist/esm/components/DataTableViewOptions/index.mjs +26 -22
  192. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  193. package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
  194. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  195. package/dist/esm/components/SimpleTable/index.mjs +338 -48
  196. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  197. package/dist/esm/components/SimpleTable/index.native.js +358 -50
  198. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  199. package/dist/esm/components/TableInput/index.mjs +150 -41
  200. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  201. package/dist/esm/components/TableInput/index.native.js +55 -39
  202. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  203. package/dist/esm/components/TableInput/shared.mjs +34 -1
  204. package/dist/esm/components/TableInput/shared.mjs.map +1 -1
  205. package/dist/esm/components/TableInput/shared.native.js +34 -1
  206. package/dist/esm/components/TableInput/shared.native.js.map +1 -1
  207. package/dist/esm/hooks/useDataTable.mjs +33 -2
  208. package/dist/esm/hooks/useDataTable.mjs.map +1 -1
  209. package/dist/esm/hooks/useDataTable.native.js +41 -2
  210. package/dist/esm/hooks/useDataTable.native.js.map +1 -1
  211. package/dist/esm/hooks/useInfiniteRows.mjs +20 -3
  212. package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -1
  213. package/dist/esm/hooks/useInfiniteRows.native.js +20 -3
  214. package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -1
  215. package/dist/esm/index.mjs +2 -1
  216. package/dist/esm/index.mjs.map +1 -1
  217. package/dist/esm/index.native.js +2 -1
  218. package/dist/esm/index.native.js.map +1 -1
  219. package/dist/esm/utils/filterUtils.mjs +12 -5
  220. package/dist/esm/utils/filterUtils.mjs.map +1 -1
  221. package/dist/esm/utils/filterUtils.native.js +20 -5
  222. package/dist/esm/utils/filterUtils.native.js.map +1 -1
  223. package/dist/jsx/components/ChildTable/index.mjs +2 -1
  224. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  225. package/dist/jsx/components/ChildTable/index.native.js +2 -1
  226. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  227. package/dist/jsx/components/ColumnHeaderFilter/index.mjs +17 -9
  228. package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
  229. package/dist/jsx/components/ColumnHeaderFilter/index.native.js +32 -11
  230. package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
  231. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +196 -0
  232. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -0
  233. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +237 -0
  234. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  235. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -2
  236. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  237. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -2
  238. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  239. package/dist/jsx/components/DataTable/DataTableRoot.mjs +93 -42
  240. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  241. package/dist/jsx/components/DataTable/DataTableRoot.native.js +97 -43
  242. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  243. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +8 -2
  244. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  245. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +9 -3
  246. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  247. package/dist/jsx/components/DataTable/documentListSlots.mjs +33 -0
  248. package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -0
  249. package/dist/jsx/components/DataTable/documentListSlots.native.js +85 -0
  250. package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -0
  251. package/dist/jsx/components/DataTable/index.native.js +74 -59
  252. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  253. package/dist/jsx/components/DataTable/rowStateChrome.mjs +28 -0
  254. package/dist/jsx/components/DataTable/rowStateChrome.mjs.map +1 -0
  255. package/dist/jsx/components/DataTable/rowStateChrome.native.js +59 -0
  256. package/dist/jsx/components/DataTable/rowStateChrome.native.js.map +1 -0
  257. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +25 -4
  258. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  259. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +6 -1
  260. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  261. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +9 -2
  262. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  263. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  264. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  265. package/dist/jsx/components/DataTableCell/index.mjs +75 -64
  266. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  267. package/dist/jsx/components/DataTableCell/index.native.js +94 -82
  268. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  269. package/dist/jsx/components/DataTableColumnPinning/index.mjs +54 -37
  270. package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
  271. package/dist/jsx/components/DataTableColumnPinning/index.native.js +59 -38
  272. package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
  273. package/dist/jsx/components/DataTableDateFilter/index.mjs +34 -15
  274. package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
  275. package/dist/jsx/components/DataTableDateFilter/index.native.js +33 -12
  276. package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
  277. package/dist/jsx/components/DataTableExport/index.mjs +36 -8
  278. package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
  279. package/dist/jsx/components/DataTableExport/index.native.js +42 -7
  280. package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
  281. package/dist/jsx/components/DataTableFacetMenu/index.mjs +115 -0
  282. package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -0
  283. package/dist/jsx/components/DataTableFacetMenu/index.native.js +156 -0
  284. package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -0
  285. package/dist/jsx/components/DataTableFilterButton/index.mjs +54 -35
  286. package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
  287. package/dist/jsx/components/DataTableFilterButton/index.native.js +63 -40
  288. package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
  289. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs +118 -0
  290. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
  291. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js +148 -0
  292. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  293. package/dist/jsx/components/DataTableFilterChips/index.mjs +9 -32
  294. package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
  295. package/dist/jsx/components/DataTableFilterChips/index.native.js +9 -32
  296. package/dist/jsx/components/DataTableFilterChips/index.native.js.map +1 -1
  297. package/dist/jsx/components/DataTableFilters/index.mjs +149 -506
  298. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  299. package/dist/jsx/components/DataTableFilters/index.native.js +171 -544
  300. package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
  301. package/dist/jsx/components/DataTableGrouping/index.mjs +275 -110
  302. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  303. package/dist/jsx/components/DataTableGrouping/index.native.js +310 -157
  304. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  305. package/dist/jsx/components/DataTablePagination/index.mjs +148 -96
  306. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  307. package/dist/jsx/components/DataTablePagination/index.native.js +159 -106
  308. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  309. package/dist/jsx/components/DataTableSearch/index.mjs +256 -215
  310. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  311. package/dist/jsx/components/DataTableSearch/index.native.js +292 -243
  312. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  313. package/dist/jsx/components/DataTableToolbar/index.mjs +145 -119
  314. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  315. package/dist/jsx/components/DataTableToolbar/index.native.js +163 -148
  316. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  317. package/dist/jsx/components/DataTableViewOptions/index.mjs +26 -22
  318. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  319. package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
  320. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  321. package/dist/jsx/components/SimpleTable/index.mjs +338 -48
  322. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  323. package/dist/jsx/components/SimpleTable/index.native.js +356 -48
  324. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  325. package/dist/jsx/components/TableInput/index.mjs +150 -41
  326. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  327. package/dist/jsx/components/TableInput/index.native.js +54 -38
  328. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  329. package/dist/jsx/components/TableInput/shared.mjs +34 -1
  330. package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
  331. package/dist/jsx/components/TableInput/shared.native.js +35 -0
  332. package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
  333. package/dist/jsx/hooks/useDataTable.mjs +33 -2
  334. package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
  335. package/dist/jsx/hooks/useDataTable.native.js +41 -2
  336. package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
  337. package/dist/jsx/hooks/useInfiniteRows.mjs +20 -3
  338. package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -1
  339. package/dist/jsx/hooks/useInfiniteRows.native.js +20 -3
  340. package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -1
  341. package/dist/jsx/index.js +2 -1
  342. package/dist/jsx/index.js.map +1 -1
  343. package/dist/jsx/index.mjs +2 -1
  344. package/dist/jsx/index.mjs.map +1 -1
  345. package/dist/jsx/index.native.js +2 -0
  346. package/dist/jsx/index.native.js.map +1 -1
  347. package/dist/jsx/utils/filterUtils.mjs +12 -5
  348. package/dist/jsx/utils/filterUtils.mjs.map +1 -1
  349. package/dist/jsx/utils/filterUtils.native.js +20 -5
  350. package/dist/jsx/utils/filterUtils.native.js.map +1 -1
  351. package/package.json +15 -15
  352. package/src/components/ChildTable/index.tsx +1 -0
  353. package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.spec.tsx +85 -0
  354. package/src/components/ColumnHeaderFilter/index.tsx +28 -10
  355. package/src/components/DataTable/DataTable.stories.tsx +30 -0
  356. package/src/components/DataTable/DataTableDocumentList.tsx +224 -0
  357. package/src/components/DataTable/DataTableMobileCards.tsx +20 -8
  358. package/src/components/DataTable/DataTableRoot.tsx +135 -58
  359. package/src/components/DataTable/DataTableVirtualized.tsx +8 -11
  360. package/src/components/DataTable/cardLayout.spec.tsx +89 -0
  361. package/src/components/DataTable/documentListSlots.ts +57 -0
  362. package/src/components/DataTable/index.native.tsx +76 -50
  363. package/src/components/DataTable/keepPreviousData.spec.tsx +137 -0
  364. package/src/components/DataTable/rowRing.spec.tsx +118 -0
  365. package/src/components/DataTable/rowStateChrome.ts +38 -0
  366. package/src/components/DataTableCell/CellModalEditor.native.tsx +4 -0
  367. package/src/components/DataTableCell/CellModalEditor.tsx +31 -3
  368. package/src/components/DataTableCell/CellOptionsEditor.tsx +29 -12
  369. package/src/components/DataTableCell/DataTableCell.stories.tsx +3 -3
  370. package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +131 -4
  371. package/src/components/DataTableCell/dataTableCell.spec.tsx +36 -1
  372. package/src/components/DataTableCell/index.tsx +121 -86
  373. package/src/components/DataTableColumnPinning/DataTableColumnPinning.spec.tsx +66 -0
  374. package/src/components/DataTableColumnPinning/index.tsx +32 -17
  375. package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +9 -1
  376. package/src/components/DataTableDateFilter/dateFilterZones.spec.ts +316 -0
  377. package/src/components/DataTableDateFilter/index.tsx +42 -22
  378. package/src/components/DataTableExport/exportDateZones.spec.tsx +348 -0
  379. package/src/components/DataTableExport/index.tsx +107 -63
  380. package/src/components/DataTableFacetMenu/DataTableFacetMenu.spec.tsx +264 -0
  381. package/src/components/DataTableFacetMenu/DataTableFacetMenu.stories.tsx +212 -0
  382. package/src/components/DataTableFacetMenu/index.tsx +202 -0
  383. package/src/components/DataTableFilterButton/index.tsx +66 -49
  384. package/src/components/DataTableFilterChips/DataTableFilterChips.spec.tsx +22 -0
  385. package/src/components/DataTableFilterChips/FilterChip.tsx +122 -0
  386. package/src/components/DataTableFilterChips/index.tsx +13 -29
  387. package/src/components/DataTableFilters/DataTableFilters.spec.tsx +56 -0
  388. package/src/components/DataTableFilters/index.tsx +169 -584
  389. package/src/components/DataTableGrouping/DataTableGrouping.spec.tsx +85 -0
  390. package/src/components/DataTableGrouping/index.tsx +270 -130
  391. package/src/components/DataTablePagination/DataTablePagination.spec.tsx +79 -4
  392. package/src/components/DataTablePagination/index.tsx +168 -112
  393. package/src/components/DataTableSearch/DataTableSearch.spec.tsx +40 -0
  394. package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
  395. package/src/components/DataTableSearch/index.tsx +192 -163
  396. package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +48 -18
  397. package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +5 -45
  398. package/src/components/DataTableToolbar/index.tsx +128 -99
  399. package/src/components/DataTableViewOptions/index.tsx +29 -22
  400. package/src/components/SimpleTable/SimpleTable.stories.tsx +29 -5
  401. package/src/components/SimpleTable/index.tsx +442 -61
  402. package/src/components/SimpleTable/simpleTable.spec.tsx +140 -12
  403. package/src/components/TableInput/index.native.tsx +91 -81
  404. package/src/components/TableInput/index.tsx +191 -50
  405. package/src/components/TableInput/shared.ts +57 -0
  406. package/src/components/TableInput/tableInput.spec.tsx +104 -0
  407. package/src/hooks/useDataTable.spec.ts +100 -3
  408. package/src/hooks/useDataTable.ts +44 -1
  409. package/src/hooks/useInfiniteRows.spec.tsx +37 -0
  410. package/src/hooks/useInfiniteRows.ts +34 -4
  411. package/src/index.ts +7 -0
  412. package/src/types.ts +54 -3
  413. package/src/utils/filterUtils.ts +27 -5
  414. package/types/components/ChildTable/index.d.ts.map +1 -1
  415. package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
  416. package/types/components/DataTable/DataTableDocumentList.d.ts +32 -0
  417. package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -0
  418. package/types/components/DataTable/DataTableMobileCards.d.ts +3 -1
  419. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  420. package/types/components/DataTable/DataTableRoot.d.ts +1 -1
  421. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  422. package/types/components/DataTable/DataTableVirtualized.d.ts +1 -2
  423. package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
  424. package/types/components/DataTable/documentListSlots.d.ts +26 -0
  425. package/types/components/DataTable/documentListSlots.d.ts.map +1 -0
  426. package/types/components/DataTable/index.native.d.ts +1 -1
  427. package/types/components/DataTable/index.native.d.ts.map +1 -1
  428. package/types/components/DataTable/rowStateChrome.d.ts +18 -0
  429. package/types/components/DataTable/rowStateChrome.d.ts.map +1 -0
  430. package/types/components/DataTableCell/CellModalEditor.d.ts +6 -1
  431. package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
  432. package/types/components/DataTableCell/CellModalEditor.native.d.ts +1 -1
  433. package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
  434. package/types/components/DataTableCell/CellOptionsEditor.d.ts +11 -3
  435. package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -1
  436. package/types/components/DataTableCell/index.d.ts +1 -1
  437. package/types/components/DataTableCell/index.d.ts.map +1 -1
  438. package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
  439. package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
  440. package/types/components/DataTableExport/index.d.ts +17 -6
  441. package/types/components/DataTableExport/index.d.ts.map +1 -1
  442. package/types/components/DataTableFacetMenu/index.d.ts +84 -0
  443. package/types/components/DataTableFacetMenu/index.d.ts.map +1 -0
  444. package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
  445. package/types/components/DataTableFilterChips/FilterChip.d.ts +15 -0
  446. package/types/components/DataTableFilterChips/FilterChip.d.ts.map +1 -0
  447. package/types/components/DataTableFilterChips/index.d.ts +5 -0
  448. package/types/components/DataTableFilterChips/index.d.ts.map +1 -1
  449. package/types/components/DataTableFilters/index.d.ts +11 -0
  450. package/types/components/DataTableFilters/index.d.ts.map +1 -1
  451. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  452. package/types/components/DataTablePagination/index.d.ts +5 -0
  453. package/types/components/DataTablePagination/index.d.ts.map +1 -1
  454. package/types/components/DataTableSearch/index.d.ts.map +1 -1
  455. package/types/components/DataTableToolbar/index.d.ts +2 -0
  456. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  457. package/types/components/SimpleTable/index.d.ts +27 -5
  458. package/types/components/SimpleTable/index.d.ts.map +1 -1
  459. package/types/components/TableInput/index.d.ts +6 -1
  460. package/types/components/TableInput/index.d.ts.map +1 -1
  461. package/types/components/TableInput/index.native.d.ts +6 -1
  462. package/types/components/TableInput/index.native.d.ts.map +1 -1
  463. package/types/components/TableInput/shared.d.ts +38 -0
  464. package/types/components/TableInput/shared.d.ts.map +1 -1
  465. package/types/hooks/useDataTable.d.ts +1 -1
  466. package/types/hooks/useDataTable.d.ts.map +1 -1
  467. package/types/hooks/useInfiniteRows.d.ts +8 -1
  468. package/types/hooks/useInfiniteRows.d.ts.map +1 -1
  469. package/types/index.d.ts +1 -0
  470. package/types/index.d.ts.map +1 -1
  471. package/types/types.d.ts +54 -3
  472. package/types/types.d.ts.map +1 -1
  473. package/types/utils/filterUtils.d.ts.map +1 -1
@@ -1,3 +1,4 @@
1
+ import { useState } from "react";
1
2
  import { renderWithProviders } from "@multiplatform.one/test-utils";
2
3
  import { fireEvent, screen } from "@testing-library/react";
3
4
  import { describe, expect, it, vi } from "vitest";
@@ -269,6 +270,22 @@ describe("DataTablePagination", () => {
269
270
 
270
271
  expect(container).toBeDefined();
271
272
  });
273
+
274
+ it("keeps the page-size selector in compact (DG-TBL-04)", () => {
275
+ const { getByLabelText } = renderWithProviders(
276
+ <DataTablePagination {...defaultProps} compact />,
277
+ );
278
+
279
+ expect(getByLabelText("Select rows per page")).toBeDefined();
280
+ });
281
+
282
+ it("hides the jumper in compact — the numbered window already jumps", () => {
283
+ const { queryByLabelText } = renderWithProviders(
284
+ <DataTablePagination {...defaultProps} compact />,
285
+ );
286
+
287
+ expect(queryByLabelText("Page number")).toBeNull();
288
+ });
272
289
  });
273
290
 
274
291
  describe("responsive behavior", () => {
@@ -316,10 +333,10 @@ describe("DataTablePagination", () => {
316
333
  );
317
334
 
318
335
  // Bidi-isolated (FSI…PDI) so RTL contexts can't reorder the range run.
319
- expect(getByText(bidiIsolate("1-10 of 150 items"))).toBeDefined();
336
+ expect(getByText(bidiIsolate("1–10 of 150 items"))).toBeDefined();
320
337
  });
321
338
 
322
- it("clamps the range to 0-0 for an empty set instead of claiming a phantom row", () => {
339
+ it("clamps the range to 0–0 for an empty set instead of claiming a phantom row", () => {
323
340
  const { getByText, queryByText } = renderWithProviders(
324
341
  <DataTablePagination
325
342
  {...defaultProps}
@@ -327,7 +344,7 @@ describe("DataTablePagination", () => {
327
344
  />,
328
345
  );
329
346
 
330
- expect(getByText(bidiIsolate("0-0 items"))).toBeDefined();
347
+ expect(getByText(bidiIsolate("0–0 items"))).toBeDefined();
331
348
  expect(queryByText(/1-0/)).toBeNull();
332
349
  expect(queryByText(/NaN/)).toBeNull();
333
350
  });
@@ -343,7 +360,7 @@ describe("DataTablePagination", () => {
343
360
 
344
361
  expect(queryByLabelText("Page number")).toBeNull();
345
362
  expect(queryByLabelText(/next page/i)).toBeNull();
346
- expect(getByText(bidiIsolate("1-5 of 5 items"))).toBeDefined();
363
+ expect(getByText(bidiIsolate("1–5 of 5 items"))).toBeDefined();
347
364
  });
348
365
 
349
366
  it("shows the pager on a single page when ejected via showPagerWhenSinglePage", () => {
@@ -373,6 +390,64 @@ describe("DataTablePagination", () => {
373
390
 
374
391
  expect(container).toBeDefined();
375
392
  });
393
+
394
+ it("keeps a page size that is not in pageSizeOptions selectable", () => {
395
+ const { getByLabelText } = renderWithProviders(
396
+ <DataTablePagination
397
+ {...defaultProps}
398
+ pageSizeOptions={[10, 25, 50, 100]}
399
+ pagination={{ pageIndex: 0, pageSize: 15, totalCount: 40, totalPages: 3 }}
400
+ />,
401
+ );
402
+
403
+ expect(getByLabelText("Select rows per page")).toBeDefined();
404
+ });
405
+ });
406
+
407
+ describe("page jump sync", () => {
408
+ it("commits Enter and remounts to the current page after a pager click", () => {
409
+ function Harness() {
410
+ const [pagination, setPagination] = useState({
411
+ pageIndex: 0,
412
+ pageSize: 10,
413
+ totalCount: 50,
414
+ totalPages: 5,
415
+ });
416
+ return (
417
+ <DataTablePagination
418
+ pagination={pagination}
419
+ onPaginationChange={(next) =>
420
+ setPagination((prev) => {
421
+ if (prev.pageIndex === next.pageIndex && prev.pageSize === next.pageSize) {
422
+ return prev;
423
+ }
424
+ return { ...prev, ...next };
425
+ })
426
+ }
427
+ showPageJump
428
+ pageSizeOptions={[10, 20, 30, 50, 100, 250]}
429
+ />
430
+ );
431
+ }
432
+
433
+ renderWithProviders(<Harness />);
434
+ const jump = screen.getByLabelText("Page number") as HTMLInputElement;
435
+ expect(jump.value).toBe("1");
436
+
437
+ fireEvent.click(screen.getByLabelText("Go to next page"));
438
+ expect((screen.getByLabelText("Page number") as HTMLInputElement).value).toBe("2");
439
+ });
440
+ });
441
+
442
+ describe("LC-71 ring anatomy", () => {
443
+ it("does not clip Select/Input rings with overflow hidden on the control wrap", () => {
444
+ const { container } = renderWithProviders(<DataTablePagination {...defaultProps} />);
445
+ const wraps = container.querySelectorAll("[data-pagination-control]");
446
+ expect(wraps.length).toBeGreaterThan(0);
447
+ wraps.forEach((el) => {
448
+ expect((el as HTMLElement).style.overflow).not.toBe("hidden");
449
+ });
450
+ });
376
451
  });
377
452
 
378
453
  describe("callback behavior", () => {
@@ -1,5 +1,6 @@
1
- import { useResolvedKnobs } from "@multiplatform.one/theme";
1
+ import { ensureCompositeFocusRing, useResolvedKnobs } from "@multiplatform.one/theme";
2
2
  import { Pagination } from "@multiplatform.one/components";
3
+ import { useMemo, useState } from "react";
3
4
  import type React from "react";
4
5
  import { Input, Select } from "@multiplatform.one/forms";
5
6
  import { Text, View, XStack, useMedia } from "tamagui";
@@ -23,17 +24,30 @@ export interface DataTablePaginationProps {
23
24
  compact?: boolean;
24
25
  }
25
26
 
27
+ function controlWidth(chars: number, chrome: number) {
28
+ return Math.max(48, chars * 12 + chrome);
29
+ }
30
+
31
+ function formatRange(start: number, end: number, total: number) {
32
+ if (total === 0) return "0–0 items";
33
+ return `${start}–${end} of ${total} items`;
34
+ }
35
+
26
36
  /**
27
37
  * DataTable footer pager. Page navigation is the catalog
28
38
  * `Pagination` component (`variant="numbered"`) — one pagination idiom
29
39
  * across the system. This wrapper adds the table-specific chrome:
30
40
  * rows-per-page selector, go-to-page jump, and the item-range summary.
41
+ *
42
+ * Anatomy follows Carbon/MUI table footers: size + numbered window + range,
43
+ * with Ant's quick-jumper only when there is somewhere to type to. Compact
44
+ * inside a DataTable stays shrink-wrapped so the table's own range can sit
45
+ * beside it; standalone compact (reports, stories) keeps the range (LC-37).
31
46
  */
32
47
  export function DataTablePagination(props: DataTablePaginationProps) {
33
- // Try to consume from DataTableStateContext (compound component pattern)
34
48
  const ctx = useDataTableState();
49
+ const insideTable = Boolean(ctx);
35
50
 
36
- // Resolve values: explicit props override context values
37
51
  const pagination =
38
52
  props.pagination ??
39
53
  (ctx
@@ -70,10 +84,14 @@ export function DataTablePagination(props: DataTablePaginationProps) {
70
84
  const { sm } = useMedia();
71
85
  const { knobProps } = useResolvedKnobs();
72
86
  const isMobile = !sm;
87
+ // LC-71: mount the composite-boundary ring sheet before Select/Input paint.
88
+ ensureCompositeFocusRing();
73
89
 
74
90
  const handlePageSizeChange = (newPageSize: number) => {
91
+ if (!Number.isFinite(newPageSize) || newPageSize <= 0) return;
92
+ if (newPageSize === pagination.pageSize && pagination.pageIndex === 0) return;
75
93
  onPaginationChange({
76
- pageIndex: 0, // Reset to first page when changing page size
94
+ pageIndex: 0,
77
95
  pageSize: newPageSize,
78
96
  });
79
97
  };
@@ -87,138 +105,176 @@ export function DataTablePagination(props: DataTablePaginationProps) {
87
105
  }
88
106
  };
89
107
 
90
- const handlePageJump = (pageNumber: string) => {
91
- const page = Number.parseInt(pageNumber, 10) - 1; // Convert to 0-based
92
- if (!Number.isNaN(page) && page >= 0 && page < (pagination.totalPages || 1)) {
93
- handlePageChange(page);
94
- }
95
- };
96
-
97
- const currentPage = pagination.pageIndex + 1; // Convert to 1-based for display
108
+ const currentPage = pagination.pageIndex + 1;
98
109
  const totalPages = pagination.totalPages || 1;
99
- // LC-37: page navigation (pager + jump) exists only when there is somewhere
100
- // to navigate. Size selector and range info stay — they are not navigation.
101
110
  const showPager = totalPages > 1 || showPagerWhenSinglePage;
102
- // Empty set clamps to "0-0" (same rule as DataTableRoot's range label) —
103
- // "1-0 items" asserted a phantom first row when totalCount was 0/unknown.
104
111
  const totalCount = pagination.totalCount || 0;
105
112
  const startItem = totalCount === 0 ? 0 : pagination.pageIndex * pagination.pageSize + 1;
106
113
  const endItem = Math.min((pagination.pageIndex + 1) * pagination.pageSize, totalCount);
107
114
 
108
- if (compact) {
109
- if (!showPager) return null;
115
+ const sizeOptions = useMemo(() => {
116
+ const sizes = new Set(pageSizeOptions.filter((n) => Number.isFinite(n) && n > 0));
117
+ if (pagination.pageSize > 0) sizes.add(pagination.pageSize);
118
+ return [...sizes].sort((a, b) => a - b);
119
+ }, [pageSizeOptions, pagination.pageSize]);
120
+
121
+ const showSize = showPageSizeSelector;
122
+ // Compact-inside-DataTable: the table footer already paints the range.
123
+ const showRange = showInfo && !(compact && insideTable);
124
+ const showJump = showPageJump && showPager && !compact && !isMobile;
125
+
126
+ const [jumpNonce, setJumpNonce] = useState(0);
127
+
128
+ const commitJump = (pageNumber: string, revertInvalid = false) => {
129
+ const page = Number.parseInt(pageNumber, 10) - 1;
130
+ if (!Number.isNaN(page) && page >= 0 && page < totalPages) {
131
+ if (page !== pagination.pageIndex) handlePageChange(page);
132
+ return;
133
+ }
134
+ if (revertInvalid) setJumpNonce((n) => n + 1);
135
+ };
136
+
137
+ if (!showPager && !showSize && !showRange) return null;
138
+
139
+ const helperText = {
140
+ ...knobProps.label,
141
+ color: "$color10" as const,
142
+ userSelect: "none" as const,
143
+ };
144
+
145
+ const sizeControl = showSize ? (
146
+ <XStack alignItems="center" gap="$2" flexShrink={0}>
147
+ <Text {...helperText}>Rows per page:</Text>
148
+ <View
149
+ width={controlWidth(Math.max(2, ...sizeOptions.map((n) => String(n).length)), 44)}
150
+ overflow="visible"
151
+ flexShrink={0}
152
+ {...({ "data-pagination-control": "size" } as object)}
153
+ >
154
+ <Select
155
+ value={String(pagination.pageSize)}
156
+ onChange={(value) => {
157
+ if (typeof value === "string") {
158
+ handlePageSizeChange(Number.parseInt(value, 10));
159
+ }
160
+ }}
161
+ options={sizeOptions.map((size) => ({
162
+ label: String(size),
163
+ value: String(size),
164
+ }))}
165
+ aria-label="Select rows per page"
166
+ size={knobProps.sizeToken}
167
+ compact
168
+ />
169
+ </View>
170
+ </XStack>
171
+ ) : null;
172
+
173
+ const pager = showPager ? (
174
+ <Pagination
175
+ variant="numbered"
176
+ total={totalPages}
177
+ page={currentPage}
178
+ onPageChange={(page) => handlePageChange(page - 1)}
179
+ showFirstLast={!compact && !isMobile}
180
+ aria-label="Page"
181
+ />
182
+ ) : null;
183
+
184
+ const jumpControl = showJump ? (
185
+ <XStack alignItems="center" gap="$2" flexShrink={0} aria-label="Jump to page">
186
+ <Text {...helperText}>Go to page:</Text>
187
+ <View
188
+ width={controlWidth(String(totalPages).length, 28)}
189
+ overflow="visible"
190
+ flexShrink={0}
191
+ {...({ "data-pagination-control": "jump" } as object)}
192
+ >
193
+ <Input
194
+ key={`${currentPage}-${jumpNonce}`}
195
+ defaultValue={String(currentPage)}
196
+ inputProps={{
197
+ inputMode: "numeric",
198
+ autoComplete: "off",
199
+ style: { textAlign: "center" },
200
+ onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {
201
+ if (e.key === "Enter") {
202
+ commitJump((e.target as HTMLInputElement).value, true);
203
+ }
204
+ },
205
+ }}
206
+ placeholder={`1-${totalPages}`}
207
+ aria-label="Page number"
208
+ size={knobProps.sizeToken}
209
+ compact
210
+ />
211
+ </View>
212
+ <Text {...helperText} aria-hidden>
213
+ / {bidiIsolate(String(totalPages))}
214
+ </Text>
215
+ </XStack>
216
+ ) : null;
217
+
218
+ const rangeControl = showRange ? (
219
+ <Text {...helperText} aria-live="polite" whiteSpace="nowrap" flexShrink={0}>
220
+ {bidiIsolate(formatRange(startItem, endItem, totalCount))}
221
+ </Text>
222
+ ) : null;
223
+
224
+ const packed = compact && insideTable;
225
+
226
+ if (packed) {
110
227
  return (
111
- <Pagination
112
- variant="numbered"
113
- total={totalPages}
114
- page={currentPage}
115
- onPageChange={(page) => handlePageChange(page - 1)}
116
- paddingVertical="$1"
117
- paddingHorizontal="$2"
228
+ <XStack
229
+ role="group"
118
230
  aria-label="Table pagination"
119
- />
231
+ alignItems="center"
232
+ overflow="visible"
233
+ {...knobProps.gap}
234
+ >
235
+ {sizeControl}
236
+ {pager}
237
+ </XStack>
120
238
  );
121
239
  }
122
240
 
123
- const showMetaRight = ((showPageJump && showPager) || showInfo) && !isMobile;
124
-
125
241
  return (
126
- // UX-P08 / LC-10 + Axiom 15 (G-03): each cluster grows, so when the row
127
- // wraps every wrapped line spans the full width and keeps its own
128
- // alignment line (left cluster → left edge, pager → centered, jump/info →
129
- // right edge) instead of orphaning bottom-left at flex-start. rowGap keeps
130
- // wrapped lines on the within-group rhythm rather than gapLg's
131
- // between-groups spread.
242
+ // UX-P08 / LC-10 + Axiom 15 (G-03): side clusters grow equally so the
243
+ // pager stays on the true centerline; when the row wraps each cluster
244
+ // keeps its own alignment line. rowGap stays on the within-group rhythm.
132
245
  <XStack
246
+ role="group"
247
+ aria-label="Table pagination"
133
248
  alignItems="center"
134
- justifyContent="space-between"
249
+ overflow="visible"
135
250
  {...knobProps.gapLg}
136
251
  rowGap={knobProps.gap.gap}
137
252
  flexWrap="wrap"
138
253
  width="100%"
139
254
  paddingHorizontal={knobProps.panelPadding.padding}
140
255
  paddingVertical="$2"
141
- aria-label="Table pagination"
142
256
  >
143
- {/* Left Section - Page Size Selector */}
144
- {showPageSizeSelector && !isMobile && (
145
- <XStack alignItems="center" gap="$2" flexGrow={1} justifyContent="flex-start">
146
- <Text fontSize={knobProps.sizeToken} color="$color10">
147
- Rows per page:
148
- </Text>
149
- <View width={80}>
150
- <Select
151
- value={pagination.pageSize.toString()}
152
- onValueChange={(value) => {
153
- if (typeof value === "string") {
154
- handlePageSizeChange(Number.parseInt(value, 10));
155
- }
156
- }}
157
- options={pageSizeOptions.map((size) => ({
158
- label: size.toString(),
159
- value: size.toString(),
160
- }))}
161
- aria-label="Select rows per page"
162
- size={knobProps.sizeToken}
163
- compact
164
- />
165
- </View>
166
- </XStack>
167
- )}
257
+ <XStack alignItems="center" flexGrow={1} flexBasis={0} justifyContent="flex-start">
258
+ {sizeControl}
259
+ </XStack>
168
260
 
169
- {/* Center Section - Navigation (catalog Pagination, numbered idiom) */}
170
- {showPager && (
171
- <XStack alignItems="center" flexGrow={1} justifyContent="center">
172
- <Pagination
173
- variant="numbered"
174
- total={totalPages}
175
- page={currentPage}
176
- onPageChange={(page) => handlePageChange(page - 1)}
177
- showFirstLast
178
- />
261
+ {pager ? (
262
+ <XStack alignItems="center" flexGrow={1} flexShrink={0} justifyContent="center">
263
+ {pager}
179
264
  </XStack>
180
- )}
265
+ ) : null}
181
266
 
182
- {/* Right Section - Page Jump & Info (gated: an empty grow box would
183
- consume line space and skew the pager off-center) */}
184
- {showMetaRight && (
185
- <XStack alignItems="center" {...knobProps.gapLg} flexGrow={1} justifyContent="flex-end">
186
- {showPageJump && showPager && (
187
- <XStack alignItems="center" gap="$2" aria-label="Jump to page">
188
- <Text fontSize={knobProps.sizeToken} color="$color10">
189
- Go to page:
190
- </Text>
191
- <View width={60}>
192
- <Input
193
- defaultValue={currentPage.toString()}
194
- inputProps={{
195
- type: "number",
196
- style: { textAlign: "center" },
197
- onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {
198
- if (e.key === "Enter") {
199
- handlePageJump((e.target as HTMLInputElement).value);
200
- }
201
- },
202
- }}
203
- placeholder={`1-${totalPages}`}
204
- aria-label="Page number"
205
- size={knobProps.sizeToken}
206
- compact
207
- />
208
- </View>
209
- </XStack>
210
- )}
211
-
212
- {showInfo && (
213
- <Text fontSize={knobProps.sizeToken} color="$color10" aria-live="polite">
214
- {/* Bidi-isolated so RTL contexts can't reorder the range run */}
215
- {bidiIsolate(
216
- pagination.totalCount
217
- ? `${startItem}-${endItem} of ${pagination.totalCount} items`
218
- : `${startItem}-${endItem} items`,
219
- )}
220
- </Text>
221
- )}
267
+ {(jumpControl || rangeControl) && (
268
+ <XStack
269
+ alignItems="center"
270
+ {...knobProps.gap}
271
+ flexGrow={1}
272
+ flexBasis={0}
273
+ flexShrink={0}
274
+ justifyContent="flex-end"
275
+ >
276
+ {jumpControl}
277
+ {rangeControl}
222
278
  </XStack>
223
279
  )}
224
280
  </XStack>
@@ -278,6 +278,46 @@ describe("DataTableSearch", () => {
278
278
  expect(onSearchResults).toHaveBeenCalled();
279
279
  });
280
280
  });
281
+ describe("LC-71 whole search box", () => {
282
+ it("nests the searchbox inside the composite ring (SearchInput, not a forked field)", () => {
283
+ const { getByRole } = renderWithProviders(<DataTableSearch {...defaultProps} />);
284
+ const searchInput = getByRole("searchbox");
285
+ expect(searchInput.closest(".mp-composite-ring")).not.toBeNull();
286
+ });
287
+ it("keeps options as a sibling control, not a second search field", () => {
288
+ const { getByRole } = renderWithProviders(<DataTableSearch {...defaultProps} />);
289
+ expect(getByRole("searchbox")).toBeDefined();
290
+ expect(getByRole("button", { name: "Search options" })).toBeDefined();
291
+ });
292
+ });
293
+ describe("matching", () => {
294
+ it("returns every row when the same term hits each row (no global-regex lastIndex skip)", async () => {
295
+ const onSearchResults = vi.fn();
296
+ const rows = [{ name: "a" }, { name: "a" }, { name: "a" }];
297
+ const { getByRole } = renderWithProviders(
298
+ <DataTableSearch
299
+ data={rows}
300
+ columns={[{ accessorKey: "name", header: "Name", id: "name", searchable: true }]}
301
+ debounceMs={0}
302
+ onSearchResults={onSearchResults}
303
+ />,
304
+ );
305
+ fireEvent.change(getByRole("searchbox"), { target: { value: "a" } });
306
+ await waitFor(() => {
307
+ const last = onSearchResults.mock.calls.at(-1);
308
+ expect(last?.[0]).toHaveLength(3);
309
+ });
310
+ });
311
+ it("announces shown-of-total in a live region", async () => {
312
+ const { getByRole } = renderWithProviders(
313
+ <DataTableSearch {...defaultProps} debounceMs={0} />,
314
+ );
315
+ fireEvent.change(getByRole("searchbox"), { target: { value: "Jane" } });
316
+ await waitFor(() => {
317
+ expect(getByRole("status").textContent).toMatch(/1 of 3/);
318
+ });
319
+ });
320
+ });
281
321
  describe("error handling", () => {
282
322
  it("should handle columns with invalid accessor keys gracefully", () => {
283
323
  const invalidColumns = [
@@ -33,7 +33,7 @@ export default meta;
33
33
  export const Default = {
34
34
  name: "Main",
35
35
  render: () => (
36
- <YStack width={400} padding="$4">
36
+ <YStack width={480} padding="$4">
37
37
  <DataTableSearch
38
38
  data={data}
39
39
  columns={columns}