@multiplatform.one/table 6.6.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 (506) 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 +3 -2
  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 +33 -12
  7. package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
  8. package/dist/cjs/components/DataTable/DataTableCardControls.native.js +1 -1
  9. package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
  10. package/dist/cjs/components/DataTable/DataTableContext.native.js.map +1 -1
  11. package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +222 -0
  12. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +237 -0
  13. package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  14. package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +5 -2
  15. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -2
  16. package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  17. package/dist/cjs/components/DataTable/DataTableRoot.cjs +92 -41
  18. package/dist/cjs/components/DataTable/DataTableRoot.native.js +104 -50
  19. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  20. package/dist/cjs/components/DataTable/DataTableStateContext.native.js.map +1 -1
  21. package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +8 -2
  22. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +9 -3
  23. package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  24. package/dist/cjs/components/DataTable/documentListSlots.cjs +59 -0
  25. package/dist/cjs/components/DataTable/documentListSlots.native.js +85 -0
  26. package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -0
  27. package/dist/cjs/components/DataTable/index.native.js +84 -69
  28. package/dist/cjs/components/DataTable/index.native.js.map +1 -1
  29. package/dist/cjs/components/DataTable/rowStateChrome.cjs +55 -0
  30. package/dist/cjs/components/DataTable/rowStateChrome.native.js +59 -0
  31. package/dist/cjs/components/DataTable/rowStateChrome.native.js.map +1 -0
  32. package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
  33. package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +24 -3
  34. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +6 -1
  35. package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  36. package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +9 -2
  37. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  38. package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  39. package/dist/cjs/components/DataTableCell/index.cjs +74 -63
  40. package/dist/cjs/components/DataTableCell/index.native.js +94 -82
  41. package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
  42. package/dist/cjs/components/DataTableColumnPinning/index.cjs +54 -37
  43. package/dist/cjs/components/DataTableColumnPinning/index.native.js +59 -38
  44. package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
  45. package/dist/cjs/components/DataTableDateFilter/index.cjs +33 -14
  46. package/dist/cjs/components/DataTableDateFilter/index.native.js +33 -12
  47. package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
  48. package/dist/cjs/components/DataTableExport/index.cjs +35 -7
  49. package/dist/cjs/components/DataTableExport/index.native.js +42 -7
  50. package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
  51. package/dist/cjs/components/DataTableFacetMenu/index.cjs +140 -0
  52. package/dist/cjs/components/DataTableFacetMenu/index.native.js +156 -0
  53. package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -0
  54. package/dist/cjs/components/DataTableFilterButton/index.cjs +51 -32
  55. package/dist/cjs/components/DataTableFilterButton/index.native.js +64 -41
  56. package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
  57. package/dist/cjs/components/DataTableFilterChips/FilterChip.cjs +143 -0
  58. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js +148 -0
  59. package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  60. package/dist/cjs/components/DataTableFilterChips/index.cjs +9 -31
  61. package/dist/cjs/components/DataTableFilterChips/index.native.js +9 -32
  62. package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -1
  63. package/dist/cjs/components/DataTableFilters/index.cjs +145 -502
  64. package/dist/cjs/components/DataTableFilters/index.native.js +171 -544
  65. package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
  66. package/dist/cjs/components/DataTableGrouping/index.cjs +273 -108
  67. package/dist/cjs/components/DataTableGrouping/index.native.js +310 -157
  68. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  69. package/dist/cjs/components/DataTablePagination/index.cjs +147 -95
  70. package/dist/cjs/components/DataTablePagination/index.native.js +159 -106
  71. package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
  72. package/dist/cjs/components/DataTableSearch/index.cjs +251 -210
  73. package/dist/cjs/components/DataTableSearch/index.native.js +292 -243
  74. package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
  75. package/dist/cjs/components/DataTableToolbar/index.cjs +141 -115
  76. package/dist/cjs/components/DataTableToolbar/index.native.js +164 -149
  77. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  78. package/dist/cjs/components/DataTableViewOptions/index.cjs +25 -21
  79. package/dist/cjs/components/DataTableViewOptions/index.native.js +6 -4
  80. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  81. package/dist/cjs/components/FilterManager.native.js.map +1 -1
  82. package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  83. package/dist/cjs/components/KnobDialog.native.js.map +1 -1
  84. package/dist/cjs/components/SavedFilterDropdown.native.js.map +1 -1
  85. package/dist/cjs/components/SimpleTable/index.cjs +336 -46
  86. package/dist/cjs/components/SimpleTable/index.native.js +356 -48
  87. package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
  88. package/dist/cjs/components/TableInput/index.cjs +147 -38
  89. package/dist/cjs/components/TableInput/index.native.js +55 -39
  90. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  91. package/dist/cjs/components/TableInput/shared.cjs +36 -1
  92. package/dist/cjs/components/TableInput/shared.native.js +35 -0
  93. package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
  94. package/dist/cjs/hooks/useDataTable.cjs +33 -2
  95. package/dist/cjs/hooks/useDataTable.native.js +41 -2
  96. package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
  97. package/dist/cjs/hooks/useDataTableKeyboard.native.js.map +1 -1
  98. package/dist/cjs/hooks/useDragScroll.native.js.map +1 -1
  99. package/dist/cjs/hooks/useInfiniteRows.cjs +20 -3
  100. package/dist/cjs/hooks/useInfiniteRows.native.js +20 -3
  101. package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -1
  102. package/dist/cjs/hooks/useSavedFilters.native.js.map +1 -1
  103. package/dist/cjs/hooks/useTableColumnPinning.native.js.map +1 -1
  104. package/dist/cjs/hooks/useTableFiltering.native.js.map +1 -1
  105. package/dist/cjs/hooks/useTableGrouping.native.js.map +1 -1
  106. package/dist/cjs/hooks/useTableKeyboard.native.js.map +1 -1
  107. package/dist/cjs/hooks/useTablePagination.native.js.map +1 -1
  108. package/dist/cjs/hooks/useTableSearch.native.js.map +1 -1
  109. package/dist/cjs/hooks/useTableSelection.native.js.map +1 -1
  110. package/dist/cjs/hooks/useTableSorting.native.js.map +1 -1
  111. package/dist/cjs/hooks/useTableUrlSync.native.js.map +1 -1
  112. package/dist/cjs/hooks/useTableViews.native.js.map +1 -1
  113. package/dist/cjs/index.cjs +2 -0
  114. package/dist/cjs/index.native.js +2 -0
  115. package/dist/cjs/index.native.js.map +1 -1
  116. package/dist/cjs/shared/t.native.js.map +1 -1
  117. package/dist/cjs/shims/primitives.native.js.map +1 -1
  118. package/dist/cjs/shims/tableCellContext.native.js.map +1 -1
  119. package/dist/cjs/types.native.js.map +1 -1
  120. package/dist/cjs/utils/columnAlign.native.js.map +1 -1
  121. package/dist/cjs/utils/filterFields.native.js.map +1 -1
  122. package/dist/cjs/utils/filterUtils.cjs +12 -5
  123. package/dist/cjs/utils/filterUtils.native.js +20 -5
  124. package/dist/cjs/utils/filterUtils.native.js.map +1 -1
  125. package/dist/cjs/utils/paginationDefaults.native.js.map +1 -1
  126. package/dist/cjs/utils/rowPress.native.js.map +1 -1
  127. package/dist/cjs/utils/urlStateUtils.native.js.map +1 -1
  128. package/dist/cjs/utils/viewData.native.js.map +1 -1
  129. package/dist/cjs/utils/withInterp.native.js.map +1 -1
  130. package/dist/esm/components/ChildTable/index.mjs +2 -1
  131. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  132. package/dist/esm/components/ChildTable/index.native.js +2 -1
  133. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  134. package/dist/esm/components/ColumnHeaderFilter/index.mjs +17 -9
  135. package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
  136. package/dist/esm/components/ColumnHeaderFilter/index.native.js +32 -11
  137. package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
  138. package/dist/esm/components/DataTable/DataTableDocumentList.mjs +196 -0
  139. package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -0
  140. package/dist/esm/components/DataTable/DataTableDocumentList.native.js +208 -0
  141. package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  142. package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -2
  143. package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  144. package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -2
  145. package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  146. package/dist/esm/components/DataTable/DataTableRoot.mjs +93 -42
  147. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  148. package/dist/esm/components/DataTable/DataTableRoot.native.js +98 -44
  149. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  150. package/dist/esm/components/DataTable/DataTableVirtualized.mjs +8 -2
  151. package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  152. package/dist/esm/components/DataTable/DataTableVirtualized.native.js +9 -3
  153. package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  154. package/dist/esm/components/DataTable/documentListSlots.mjs +33 -0
  155. package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -0
  156. package/dist/esm/components/DataTable/documentListSlots.native.js +56 -0
  157. package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -0
  158. package/dist/esm/components/DataTable/index.native.js +52 -37
  159. package/dist/esm/components/DataTable/index.native.js.map +1 -1
  160. package/dist/esm/components/DataTable/rowStateChrome.mjs +28 -0
  161. package/dist/esm/components/DataTable/rowStateChrome.mjs.map +1 -0
  162. package/dist/esm/components/DataTable/rowStateChrome.native.js +29 -0
  163. package/dist/esm/components/DataTable/rowStateChrome.native.js.map +1 -0
  164. package/dist/esm/components/DataTableCell/CellModalEditor.mjs +25 -4
  165. package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  166. package/dist/esm/components/DataTableCell/CellModalEditor.native.js +6 -1
  167. package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  168. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +9 -2
  169. package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  170. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  171. package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  172. package/dist/esm/components/DataTableCell/index.mjs +75 -64
  173. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  174. package/dist/esm/components/DataTableCell/index.native.js +95 -83
  175. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  176. package/dist/esm/components/DataTableColumnPinning/index.mjs +54 -37
  177. package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
  178. package/dist/esm/components/DataTableColumnPinning/index.native.js +59 -38
  179. package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
  180. package/dist/esm/components/DataTableDateFilter/index.mjs +34 -15
  181. package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
  182. package/dist/esm/components/DataTableDateFilter/index.native.js +34 -13
  183. package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
  184. package/dist/esm/components/DataTableExport/index.mjs +36 -8
  185. package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
  186. package/dist/esm/components/DataTableExport/index.native.js +43 -8
  187. package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
  188. package/dist/esm/components/DataTableFacetMenu/index.mjs +115 -0
  189. package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -0
  190. package/dist/esm/components/DataTableFacetMenu/index.native.js +128 -0
  191. package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -0
  192. package/dist/esm/components/DataTableFilterButton/index.mjs +54 -35
  193. package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
  194. package/dist/esm/components/DataTableFilterButton/index.native.js +66 -43
  195. package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
  196. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs +118 -0
  197. package/dist/esm/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
  198. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js +120 -0
  199. package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  200. package/dist/esm/components/DataTableFilterChips/index.mjs +9 -32
  201. package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
  202. package/dist/esm/components/DataTableFilterChips/index.native.js +9 -33
  203. package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -1
  204. package/dist/esm/components/DataTableFilters/index.mjs +149 -506
  205. package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
  206. package/dist/esm/components/DataTableFilters/index.native.js +175 -548
  207. package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
  208. package/dist/esm/components/DataTableGrouping/index.mjs +275 -110
  209. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  210. package/dist/esm/components/DataTableGrouping/index.native.js +287 -134
  211. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  212. package/dist/esm/components/DataTablePagination/index.mjs +148 -96
  213. package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
  214. package/dist/esm/components/DataTablePagination/index.native.js +160 -107
  215. package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
  216. package/dist/esm/components/DataTableSearch/index.mjs +256 -215
  217. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  218. package/dist/esm/components/DataTableSearch/index.native.js +297 -248
  219. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  220. package/dist/esm/components/DataTableToolbar/index.mjs +145 -119
  221. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  222. package/dist/esm/components/DataTableToolbar/index.native.js +167 -152
  223. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  224. package/dist/esm/components/DataTableViewOptions/index.mjs +26 -22
  225. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  226. package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
  227. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  228. package/dist/esm/components/SimpleTable/index.mjs +338 -48
  229. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  230. package/dist/esm/components/SimpleTable/index.native.js +358 -50
  231. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  232. package/dist/esm/components/TableInput/index.mjs +150 -41
  233. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  234. package/dist/esm/components/TableInput/index.native.js +55 -39
  235. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  236. package/dist/esm/components/TableInput/shared.mjs +34 -1
  237. package/dist/esm/components/TableInput/shared.mjs.map +1 -1
  238. package/dist/esm/components/TableInput/shared.native.js +34 -1
  239. package/dist/esm/components/TableInput/shared.native.js.map +1 -1
  240. package/dist/esm/hooks/useDataTable.mjs +33 -2
  241. package/dist/esm/hooks/useDataTable.mjs.map +1 -1
  242. package/dist/esm/hooks/useDataTable.native.js +41 -2
  243. package/dist/esm/hooks/useDataTable.native.js.map +1 -1
  244. package/dist/esm/hooks/useInfiniteRows.mjs +20 -3
  245. package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -1
  246. package/dist/esm/hooks/useInfiniteRows.native.js +20 -3
  247. package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -1
  248. package/dist/esm/index.mjs +2 -1
  249. package/dist/esm/index.mjs.map +1 -1
  250. package/dist/esm/index.native.js +2 -1
  251. package/dist/esm/index.native.js.map +1 -1
  252. package/dist/esm/utils/filterUtils.mjs +12 -5
  253. package/dist/esm/utils/filterUtils.mjs.map +1 -1
  254. package/dist/esm/utils/filterUtils.native.js +20 -5
  255. package/dist/esm/utils/filterUtils.native.js.map +1 -1
  256. package/dist/jsx/components/ChildTable/index.mjs +2 -1
  257. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  258. package/dist/jsx/components/ChildTable/index.native.js +2 -1
  259. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  260. package/dist/jsx/components/ColumnHeaderFilter/index.mjs +17 -9
  261. package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
  262. package/dist/jsx/components/ColumnHeaderFilter/index.native.js +32 -11
  263. package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
  264. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +196 -0
  265. package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -0
  266. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +237 -0
  267. package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -0
  268. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -2
  269. package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
  270. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -2
  271. package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
  272. package/dist/jsx/components/DataTable/DataTableRoot.mjs +93 -42
  273. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  274. package/dist/jsx/components/DataTable/DataTableRoot.native.js +97 -43
  275. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  276. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +8 -2
  277. package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
  278. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +9 -3
  279. package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
  280. package/dist/jsx/components/DataTable/documentListSlots.mjs +33 -0
  281. package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -0
  282. package/dist/jsx/components/DataTable/documentListSlots.native.js +85 -0
  283. package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -0
  284. package/dist/jsx/components/DataTable/index.native.js +74 -59
  285. package/dist/jsx/components/DataTable/index.native.js.map +1 -1
  286. package/dist/jsx/components/DataTable/rowStateChrome.mjs +28 -0
  287. package/dist/jsx/components/DataTable/rowStateChrome.mjs.map +1 -0
  288. package/dist/jsx/components/DataTable/rowStateChrome.native.js +59 -0
  289. package/dist/jsx/components/DataTable/rowStateChrome.native.js.map +1 -0
  290. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +25 -4
  291. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  292. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +6 -1
  293. package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
  294. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +9 -2
  295. package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
  296. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +11 -2
  297. package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
  298. package/dist/jsx/components/DataTableCell/index.mjs +75 -64
  299. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  300. package/dist/jsx/components/DataTableCell/index.native.js +94 -82
  301. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  302. package/dist/jsx/components/DataTableColumnPinning/index.mjs +54 -37
  303. package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
  304. package/dist/jsx/components/DataTableColumnPinning/index.native.js +59 -38
  305. package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
  306. package/dist/jsx/components/DataTableDateFilter/index.mjs +34 -15
  307. package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
  308. package/dist/jsx/components/DataTableDateFilter/index.native.js +33 -12
  309. package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
  310. package/dist/jsx/components/DataTableExport/index.mjs +36 -8
  311. package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
  312. package/dist/jsx/components/DataTableExport/index.native.js +42 -7
  313. package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
  314. package/dist/jsx/components/DataTableFacetMenu/index.mjs +115 -0
  315. package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -0
  316. package/dist/jsx/components/DataTableFacetMenu/index.native.js +156 -0
  317. package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -0
  318. package/dist/jsx/components/DataTableFilterButton/index.mjs +54 -35
  319. package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
  320. package/dist/jsx/components/DataTableFilterButton/index.native.js +63 -40
  321. package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
  322. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs +118 -0
  323. package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
  324. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js +148 -0
  325. package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
  326. package/dist/jsx/components/DataTableFilterChips/index.mjs +9 -32
  327. package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
  328. package/dist/jsx/components/DataTableFilterChips/index.native.js +9 -32
  329. package/dist/jsx/components/DataTableFilterChips/index.native.js.map +1 -1
  330. package/dist/jsx/components/DataTableFilters/index.mjs +149 -506
  331. package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
  332. package/dist/jsx/components/DataTableFilters/index.native.js +171 -544
  333. package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
  334. package/dist/jsx/components/DataTableGrouping/index.mjs +275 -110
  335. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  336. package/dist/jsx/components/DataTableGrouping/index.native.js +310 -157
  337. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  338. package/dist/jsx/components/DataTablePagination/index.mjs +148 -96
  339. package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
  340. package/dist/jsx/components/DataTablePagination/index.native.js +159 -106
  341. package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
  342. package/dist/jsx/components/DataTableSearch/index.mjs +256 -215
  343. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  344. package/dist/jsx/components/DataTableSearch/index.native.js +292 -243
  345. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  346. package/dist/jsx/components/DataTableToolbar/index.mjs +145 -119
  347. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  348. package/dist/jsx/components/DataTableToolbar/index.native.js +163 -148
  349. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  350. package/dist/jsx/components/DataTableViewOptions/index.mjs +26 -22
  351. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  352. package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
  353. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  354. package/dist/jsx/components/SimpleTable/index.mjs +338 -48
  355. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  356. package/dist/jsx/components/SimpleTable/index.native.js +356 -48
  357. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  358. package/dist/jsx/components/TableInput/index.mjs +150 -41
  359. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  360. package/dist/jsx/components/TableInput/index.native.js +54 -38
  361. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  362. package/dist/jsx/components/TableInput/shared.mjs +34 -1
  363. package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
  364. package/dist/jsx/components/TableInput/shared.native.js +35 -0
  365. package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
  366. package/dist/jsx/hooks/useDataTable.mjs +33 -2
  367. package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
  368. package/dist/jsx/hooks/useDataTable.native.js +41 -2
  369. package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
  370. package/dist/jsx/hooks/useInfiniteRows.mjs +20 -3
  371. package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -1
  372. package/dist/jsx/hooks/useInfiniteRows.native.js +20 -3
  373. package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -1
  374. package/dist/jsx/index.js +2 -1
  375. package/dist/jsx/index.js.map +1 -1
  376. package/dist/jsx/index.mjs +2 -1
  377. package/dist/jsx/index.mjs.map +1 -1
  378. package/dist/jsx/index.native.js +2 -0
  379. package/dist/jsx/index.native.js.map +1 -1
  380. package/dist/jsx/utils/filterUtils.mjs +12 -5
  381. package/dist/jsx/utils/filterUtils.mjs.map +1 -1
  382. package/dist/jsx/utils/filterUtils.native.js +20 -5
  383. package/dist/jsx/utils/filterUtils.native.js.map +1 -1
  384. package/package.json +16 -16
  385. package/src/components/ChildTable/index.tsx +1 -0
  386. package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.spec.tsx +85 -0
  387. package/src/components/ColumnHeaderFilter/index.tsx +28 -10
  388. package/src/components/DataTable/DataTable.stories.tsx +30 -0
  389. package/src/components/DataTable/DataTableDocumentList.tsx +224 -0
  390. package/src/components/DataTable/DataTableMobileCards.tsx +20 -8
  391. package/src/components/DataTable/DataTableRoot.tsx +135 -58
  392. package/src/components/DataTable/DataTableVirtualized.tsx +8 -11
  393. package/src/components/DataTable/cardLayout.spec.tsx +89 -0
  394. package/src/components/DataTable/documentListSlots.ts +57 -0
  395. package/src/components/DataTable/index.native.tsx +76 -50
  396. package/src/components/DataTable/keepPreviousData.spec.tsx +137 -0
  397. package/src/components/DataTable/rowRing.spec.tsx +118 -0
  398. package/src/components/DataTable/rowStateChrome.ts +38 -0
  399. package/src/components/DataTableCell/CellModalEditor.native.tsx +4 -0
  400. package/src/components/DataTableCell/CellModalEditor.tsx +31 -3
  401. package/src/components/DataTableCell/CellOptionsEditor.tsx +29 -12
  402. package/src/components/DataTableCell/DataTableCell.stories.tsx +3 -3
  403. package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +131 -4
  404. package/src/components/DataTableCell/dataTableCell.spec.tsx +36 -1
  405. package/src/components/DataTableCell/index.tsx +121 -86
  406. package/src/components/DataTableColumnPinning/DataTableColumnPinning.spec.tsx +66 -0
  407. package/src/components/DataTableColumnPinning/index.tsx +32 -17
  408. package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +9 -1
  409. package/src/components/DataTableDateFilter/dateFilterZones.spec.ts +316 -0
  410. package/src/components/DataTableDateFilter/index.tsx +42 -22
  411. package/src/components/DataTableExport/exportDateZones.spec.tsx +348 -0
  412. package/src/components/DataTableExport/index.tsx +107 -63
  413. package/src/components/DataTableFacetMenu/DataTableFacetMenu.spec.tsx +264 -0
  414. package/src/components/DataTableFacetMenu/DataTableFacetMenu.stories.tsx +212 -0
  415. package/src/components/DataTableFacetMenu/index.tsx +202 -0
  416. package/src/components/DataTableFilterButton/index.tsx +66 -49
  417. package/src/components/DataTableFilterChips/DataTableFilterChips.spec.tsx +22 -0
  418. package/src/components/DataTableFilterChips/FilterChip.tsx +122 -0
  419. package/src/components/DataTableFilterChips/index.tsx +13 -29
  420. package/src/components/DataTableFilters/DataTableFilters.spec.tsx +56 -0
  421. package/src/components/DataTableFilters/index.tsx +169 -584
  422. package/src/components/DataTableGrouping/DataTableGrouping.spec.tsx +85 -0
  423. package/src/components/DataTableGrouping/index.tsx +270 -130
  424. package/src/components/DataTablePagination/DataTablePagination.spec.tsx +79 -4
  425. package/src/components/DataTablePagination/index.tsx +168 -112
  426. package/src/components/DataTableSearch/DataTableSearch.spec.tsx +40 -0
  427. package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
  428. package/src/components/DataTableSearch/index.tsx +192 -163
  429. package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +48 -18
  430. package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +5 -45
  431. package/src/components/DataTableToolbar/index.tsx +128 -99
  432. package/src/components/DataTableViewOptions/index.tsx +29 -22
  433. package/src/components/SimpleTable/SimpleTable.stories.tsx +29 -5
  434. package/src/components/SimpleTable/index.tsx +442 -61
  435. package/src/components/SimpleTable/simpleTable.spec.tsx +140 -12
  436. package/src/components/TableInput/index.native.tsx +91 -81
  437. package/src/components/TableInput/index.tsx +191 -50
  438. package/src/components/TableInput/shared.ts +57 -0
  439. package/src/components/TableInput/tableInput.spec.tsx +104 -0
  440. package/src/hooks/useDataTable.spec.ts +100 -3
  441. package/src/hooks/useDataTable.ts +44 -1
  442. package/src/hooks/useInfiniteRows.spec.tsx +37 -0
  443. package/src/hooks/useInfiniteRows.ts +34 -4
  444. package/src/index.ts +7 -0
  445. package/src/types.ts +54 -3
  446. package/src/utils/filterUtils.ts +27 -5
  447. package/types/components/ChildTable/index.d.ts.map +1 -1
  448. package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
  449. package/types/components/DataTable/DataTableDocumentList.d.ts +32 -0
  450. package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -0
  451. package/types/components/DataTable/DataTableMobileCards.d.ts +3 -1
  452. package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
  453. package/types/components/DataTable/DataTableRoot.d.ts +1 -1
  454. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  455. package/types/components/DataTable/DataTableVirtualized.d.ts +1 -2
  456. package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
  457. package/types/components/DataTable/documentListSlots.d.ts +26 -0
  458. package/types/components/DataTable/documentListSlots.d.ts.map +1 -0
  459. package/types/components/DataTable/index.native.d.ts +1 -1
  460. package/types/components/DataTable/index.native.d.ts.map +1 -1
  461. package/types/components/DataTable/rowStateChrome.d.ts +18 -0
  462. package/types/components/DataTable/rowStateChrome.d.ts.map +1 -0
  463. package/types/components/DataTableCell/CellModalEditor.d.ts +6 -1
  464. package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
  465. package/types/components/DataTableCell/CellModalEditor.native.d.ts +1 -1
  466. package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
  467. package/types/components/DataTableCell/CellOptionsEditor.d.ts +11 -3
  468. package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -1
  469. package/types/components/DataTableCell/index.d.ts +1 -1
  470. package/types/components/DataTableCell/index.d.ts.map +1 -1
  471. package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
  472. package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
  473. package/types/components/DataTableExport/index.d.ts +17 -6
  474. package/types/components/DataTableExport/index.d.ts.map +1 -1
  475. package/types/components/DataTableFacetMenu/index.d.ts +84 -0
  476. package/types/components/DataTableFacetMenu/index.d.ts.map +1 -0
  477. package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
  478. package/types/components/DataTableFilterChips/FilterChip.d.ts +15 -0
  479. package/types/components/DataTableFilterChips/FilterChip.d.ts.map +1 -0
  480. package/types/components/DataTableFilterChips/index.d.ts +5 -0
  481. package/types/components/DataTableFilterChips/index.d.ts.map +1 -1
  482. package/types/components/DataTableFilters/index.d.ts +11 -0
  483. package/types/components/DataTableFilters/index.d.ts.map +1 -1
  484. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  485. package/types/components/DataTablePagination/index.d.ts +5 -0
  486. package/types/components/DataTablePagination/index.d.ts.map +1 -1
  487. package/types/components/DataTableSearch/index.d.ts.map +1 -1
  488. package/types/components/DataTableToolbar/index.d.ts +2 -0
  489. package/types/components/DataTableToolbar/index.d.ts.map +1 -1
  490. package/types/components/SimpleTable/index.d.ts +27 -5
  491. package/types/components/SimpleTable/index.d.ts.map +1 -1
  492. package/types/components/TableInput/index.d.ts +6 -1
  493. package/types/components/TableInput/index.d.ts.map +1 -1
  494. package/types/components/TableInput/index.native.d.ts +6 -1
  495. package/types/components/TableInput/index.native.d.ts.map +1 -1
  496. package/types/components/TableInput/shared.d.ts +38 -0
  497. package/types/components/TableInput/shared.d.ts.map +1 -1
  498. package/types/hooks/useDataTable.d.ts +1 -1
  499. package/types/hooks/useDataTable.d.ts.map +1 -1
  500. package/types/hooks/useInfiniteRows.d.ts +8 -1
  501. package/types/hooks/useInfiniteRows.d.ts.map +1 -1
  502. package/types/index.d.ts +1 -0
  503. package/types/index.d.ts.map +1 -1
  504. package/types/types.d.ts +54 -3
  505. package/types/types.d.ts.map +1 -1
  506. 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}