@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
@@ -51,7 +51,7 @@ import { CellModalEditor } from "./CellModalEditor";
51
51
  import { CellOptionsEditor } from "./CellOptionsEditor";
52
52
  import { Star } from "@phosphor-icons/react";
53
53
  import { RichTextEditor } from "@multiplatform.one/rich-text";
54
- import { useResolvedKnobs } from "@multiplatform.one/theme";
54
+ import { useResolvedKnobs, ensureCompositeFocusRing } from "@multiplatform.one/theme";
55
55
  import React, { useCallback, useEffect, useRef, useState } from "react";
56
56
  import { View, isWeb } from "tamagui";
57
57
  import type { DataTableFieldProps, DataTableField } from "../../types";
@@ -85,7 +85,7 @@ export interface DataTableCellProps {
85
85
  rowData?: any;
86
86
  /** Size token for field sizing */
87
87
  size?: string;
88
- /** Use compact sizing */
88
+ /** Use compact density (tighter layout gaps; control size unchanged) */
89
89
  compact?: boolean;
90
90
  /**
91
91
  * For linked daterange columns: the value of the linked (end date) column.
@@ -117,6 +117,7 @@ export function DataTableCell({
117
117
  // Cells are always compact unless caller explicitly opts out — table rows
118
118
  // are 40-44px tall, so default-sized fields overflow the row.
119
119
  const { knobProps } = useResolvedKnobs({ size, compact: compact ?? true });
120
+ const cellName = (fieldProps as any)["aria-label"] ?? columnLabel ?? columnId;
120
121
  const {
121
122
  options,
122
123
  placeholder,
@@ -243,7 +244,7 @@ export function DataTableCell({
243
244
  placeholder={placeholder}
244
245
  size={knobProps.sizeToken}
245
246
  {...restProps}
246
- aria-label={(restProps as any)["aria-label"] ?? columnLabel ?? columnId}
247
+ aria-label={(restProps as any)["aria-label"] ?? cellName}
247
248
  />
248
249
  </CellWrapper>
249
250
  );
@@ -260,7 +261,7 @@ export function DataTableCell({
260
261
  placeholder={placeholder}
261
262
  size={knobProps.sizeToken}
262
263
  {...restProps}
263
- aria-label={(restProps as any)["aria-label"] ?? columnLabel ?? columnId}
264
+ aria-label={(restProps as any)["aria-label"] ?? cellName}
264
265
  />
265
266
  </CellWrapper>
266
267
  );
@@ -279,7 +280,7 @@ export function DataTableCell({
279
280
  value={value}
280
281
  fieldProps={fieldProps}
281
282
  disabled={disabled || readOnly}
282
- label={(restProps as any)["aria-label"] ?? columnLabel ?? columnId}
283
+ label={cellName}
283
284
  >
284
285
  {(close) => (
285
286
  <RadioGroup
@@ -300,17 +301,36 @@ export function DataTableCell({
300
301
  );
301
302
 
302
303
  case "togglegroup":
304
+ // LC-06: the option strip is wider than a typical column (same clipping
305
+ // class as radiogroup). Face is the current value; options live in an
306
+ // anchored popover (web) / sheet (native). Single-select is COMMIT
307
+ // class (pick closes); allowMultiple is COMPOSE (panel stays open).
303
308
  return (
304
309
  <CellWrapper>
305
- <ToggleGroup
306
- value={allowMultiple ? (Array.isArray(value) ? value : []) : value}
307
- onValueChange={handleChange}
308
- options={options ?? []}
310
+ <CellOptionsEditor
311
+ field="togglegroup"
312
+ value={value}
313
+ fieldProps={fieldProps}
309
314
  disabled={disabled || readOnly}
310
- type={allowMultiple ? "multiple" : "single"}
311
- size={knobProps.sizeToken}
312
- {...restProps}
313
- />
315
+ label={cellName}
316
+ dismissOnPick={!allowMultiple}
317
+ >
318
+ {(close) => (
319
+ <ToggleGroup
320
+ value={allowMultiple ? (Array.isArray(value) ? value : []) : value}
321
+ onValueChange={(next: string | string[]) => {
322
+ handleChange(next);
323
+ if (!allowMultiple) close();
324
+ }}
325
+ options={options ?? []}
326
+ disabled={disabled || readOnly}
327
+ type={allowMultiple ? "multiple" : "single"}
328
+ size={knobProps.sizeToken}
329
+ orientation="vertical"
330
+ {...restProps}
331
+ />
332
+ )}
333
+ </CellOptionsEditor>
314
334
  </CellWrapper>
315
335
  );
316
336
 
@@ -588,13 +608,14 @@ export function DataTableCell({
588
608
 
589
609
  case "mentioninput":
590
610
  return (
591
- <CellModalEditor
611
+ <ModalCell
592
612
  field="mentioninput"
593
613
  value={value}
594
614
  fieldProps={fieldProps}
595
615
  disabled={disabled}
596
616
  readOnly={readOnly}
597
617
  onCommit={handleChange}
618
+ label={cellName}
598
619
  title={t("Edit text")}
599
620
  >
600
621
  {(draftValue, onDraftChange) => (
@@ -611,7 +632,7 @@ export function DataTableCell({
611
632
  {...restProps}
612
633
  />
613
634
  )}
614
- </CellModalEditor>
635
+ </ModalCell>
615
636
  );
616
637
 
617
638
  case "barcode":
@@ -620,13 +641,14 @@ export function DataTableCell({
620
641
  // like other heavy fields — never inline where the scanner would grow
621
642
  // the row. The cell face is FieldDisplay's compact drawn-barcode preview.
622
643
  return (
623
- <CellModalEditor
644
+ <ModalCell
624
645
  field="barcode"
625
646
  value={value}
626
647
  fieldProps={fieldProps}
627
648
  disabled={disabled}
628
649
  readOnly={readOnly}
629
650
  onCommit={handleChange}
651
+ label={cellName}
630
652
  title={t("Barcode")}
631
653
  >
632
654
  {(draftValue, onDraftChange) => (
@@ -650,19 +672,20 @@ export function DataTableCell({
650
672
  />
651
673
  </View>
652
674
  )}
653
- </CellModalEditor>
675
+ </ModalCell>
654
676
  );
655
677
 
656
678
  // ─── File/media inputs ────────────────────────────────────
657
679
  case "fileupload":
658
680
  return (
659
- <CellModalEditor
681
+ <ModalCell
660
682
  field="fileupload"
661
683
  value={value}
662
684
  fieldProps={fieldProps}
663
685
  disabled={disabled}
664
686
  readOnly={readOnly}
665
687
  onCommit={handleChange}
688
+ label={cellName}
666
689
  title={t("Upload file")}
667
690
  >
668
691
  {(draftValue, onDraftChange) => (
@@ -677,18 +700,19 @@ export function DataTableCell({
677
700
  {...restProps}
678
701
  />
679
702
  )}
680
- </CellModalEditor>
703
+ </ModalCell>
681
704
  );
682
705
 
683
706
  case "image":
684
707
  return (
685
- <CellModalEditor
708
+ <ModalCell
686
709
  field="image"
687
710
  value={value}
688
711
  fieldProps={fieldProps}
689
712
  disabled={disabled}
690
713
  readOnly={readOnly}
691
714
  onCommit={handleChange}
715
+ label={cellName}
692
716
  title={t("Image")}
693
717
  >
694
718
  {(draftValue, onDraftChange) => (
@@ -703,18 +727,19 @@ export function DataTableCell({
703
727
  {...restProps}
704
728
  />
705
729
  )}
706
- </CellModalEditor>
730
+ </ModalCell>
707
731
  );
708
732
 
709
733
  case "signature":
710
734
  return (
711
- <CellModalEditor
735
+ <ModalCell
712
736
  field="signature"
713
737
  value={value}
714
738
  fieldProps={fieldProps}
715
739
  disabled={disabled}
716
740
  readOnly={readOnly}
717
741
  onCommit={handleChange}
742
+ label={cellName}
718
743
  title={t("Signature")}
719
744
  >
720
745
  {(draftValue, onDraftChange) => (
@@ -729,18 +754,19 @@ export function DataTableCell({
729
754
  {...restProps}
730
755
  />
731
756
  )}
732
- </CellModalEditor>
757
+ </ModalCell>
733
758
  );
734
759
 
735
760
  case "geolocation":
736
761
  return (
737
- <CellModalEditor
762
+ <ModalCell
738
763
  field="geolocation"
739
764
  value={value}
740
765
  fieldProps={fieldProps}
741
766
  disabled={disabled}
742
767
  readOnly={readOnly}
743
768
  onCommit={handleChange}
769
+ label={cellName}
744
770
  title={t("Location")}
745
771
  >
746
772
  {(draftValue, onDraftChange) => (
@@ -761,19 +787,20 @@ export function DataTableCell({
761
787
  {...restProps}
762
788
  />
763
789
  )}
764
- </CellModalEditor>
790
+ </ModalCell>
765
791
  );
766
792
 
767
793
  // ─── Rich text / code editors ─────────────────────────────
768
794
  case "richtexteditor":
769
795
  return (
770
- <CellModalEditor
796
+ <ModalCell
771
797
  field="richtexteditor"
772
798
  value={value}
773
799
  fieldProps={fieldProps}
774
800
  disabled={disabled}
775
801
  readOnly={readOnly}
776
802
  onCommit={handleChange}
803
+ label={cellName}
777
804
  title={t("Edit")}
778
805
  >
779
806
  {(draftValue, onDraftChange) => (
@@ -788,18 +815,19 @@ export function DataTableCell({
788
815
  {...restProps}
789
816
  />
790
817
  )}
791
- </CellModalEditor>
818
+ </ModalCell>
792
819
  );
793
820
 
794
821
  case "markdowneditor":
795
822
  return (
796
- <CellModalEditor
823
+ <ModalCell
797
824
  field="markdowneditor"
798
825
  value={value}
799
826
  fieldProps={fieldProps}
800
827
  disabled={disabled}
801
828
  readOnly={readOnly}
802
829
  onCommit={handleChange}
830
+ label={cellName}
803
831
  title={t("Edit markdown")}
804
832
  >
805
833
  {(draftValue, onDraftChange) => (
@@ -813,18 +841,19 @@ export function DataTableCell({
813
841
  {...restProps}
814
842
  />
815
843
  )}
816
- </CellModalEditor>
844
+ </ModalCell>
817
845
  );
818
846
 
819
847
  case "codeeditor":
820
848
  return (
821
- <CellModalEditor
849
+ <ModalCell
822
850
  field="codeeditor"
823
851
  value={value}
824
852
  fieldProps={fieldProps}
825
853
  disabled={disabled}
826
854
  readOnly={readOnly}
827
855
  onCommit={handleChange}
856
+ label={cellName}
828
857
  title={t("Edit code")}
829
858
  >
830
859
  {(draftValue, onDraftChange) => (
@@ -838,25 +867,45 @@ export function DataTableCell({
838
867
  {...restProps}
839
868
  />
840
869
  )}
841
- </CellModalEditor>
870
+ </ModalCell>
842
871
  );
843
872
 
844
873
  // ─── Text inputs ──────────────────────────────────────────
845
874
  case "textarea":
875
+ // LC-06 / Airtable expand / Frappe Text Editor: multiline text is
876
+ // taller than the row. Face is a single-line FieldDisplay; the editor
877
+ // opens in the modal (web) / sheet (native) so the anchor row never
878
+ // grows. Staging matches the other compose editors (Done / Cancel).
846
879
  return (
847
- <CellWrapper>
848
- <InlineTextEditor
849
- value={value}
850
- onCommit={handleChange}
851
- multiline
852
- placeholder={placeholder}
853
- disabled={disabled}
854
- readOnly={readOnly}
855
- sizeToken={knobProps.sizeToken}
856
- ariaLabel={(restProps as any)["aria-label"] ?? columnLabel ?? columnId}
857
- restProps={restProps}
858
- />
859
- </CellWrapper>
880
+ <ModalCell
881
+ field="textarea"
882
+ value={value}
883
+ fieldProps={fieldProps}
884
+ disabled={disabled}
885
+ readOnly={readOnly}
886
+ onCommit={handleChange}
887
+ label={cellName}
888
+ title={t("Edit text")}
889
+ >
890
+ {(draftValue, onDraftChange) => (
891
+ <TextArea
892
+ value={draftValue != null ? String(draftValue) : ""}
893
+ onChangeText={onDraftChange}
894
+ placeholder={placeholder}
895
+ disabled={disabled}
896
+ readOnly={readOnly}
897
+ size={knobProps.sizeToken}
898
+ {...restProps}
899
+ textAreaProps={{
900
+ "aria-label": cellName,
901
+ // TextArea has no top-level minHeight prop; the modal editor's
902
+ // taller-than-row height rides the underlying textarea element.
903
+ minHeight: restProps.minHeight ?? 160,
904
+ ...(restProps as any).textAreaProps,
905
+ }}
906
+ />
907
+ )}
908
+ </ModalCell>
860
909
  );
861
910
 
862
911
  case "input":
@@ -887,14 +936,14 @@ function CellStar(props: { size: number; weight: "fill" | "regular"; color: stri
887
936
  }
888
937
 
889
938
  /**
890
- * Draft-until-commit wrapper for inline text editors (input, textarea).
891
- * Typing edits a local draft; Enter (single-line) or blur commits it via
892
- * onCommit; Escape restores the pre-edit value without committing.
939
+ * Draft-until-commit wrapper for the inline single-line text editor.
940
+ * Typing edits a local draft; Enter or blur commits it via onCommit;
941
+ * Escape restores the pre-edit value without committing. Multiline text
942
+ * is LC-06 oversized and routes through ModalCell instead.
893
943
  */
894
944
  function InlineTextEditor({
895
945
  value,
896
946
  onCommit,
897
- multiline,
898
947
  placeholder,
899
948
  disabled,
900
949
  readOnly,
@@ -904,7 +953,6 @@ function InlineTextEditor({
904
953
  }: {
905
954
  value: any;
906
955
  onCommit: (value: string) => void;
907
- multiline?: boolean;
908
956
  placeholder?: string;
909
957
  disabled?: boolean;
910
958
  readOnly?: boolean;
@@ -949,37 +997,12 @@ function InlineTextEditor({
949
997
  (event: any) => {
950
998
  const key = event?.nativeEvent?.key ?? event?.key;
951
999
  if (key === "Escape") cancel();
952
- else if (key === "Enter" && !multiline) commit();
1000
+ else if (key === "Enter") commit();
953
1001
  },
954
- [cancel, commit, multiline],
1002
+ [cancel, commit],
955
1003
  );
956
1004
 
957
- const { inputProps: userInputProps, textAreaProps: userTextAreaProps, ...fieldRest } = restProps;
958
-
959
- if (multiline) {
960
- return (
961
- <TextArea
962
- key={resetKey}
963
- value={draft}
964
- onChangeText={setDraft}
965
- onBlur={commit}
966
- placeholder={placeholder}
967
- disabled={disabled}
968
- readOnly={readOnly}
969
- size={sizeToken}
970
- {...fieldRest}
971
- textAreaProps={{
972
- ...(ariaLabel !== undefined ? { "aria-label": ariaLabel } : undefined),
973
- ...userTextAreaProps,
974
- // Native fires onKeyPress; the DOM keypress event never fires for
975
- // Escape, so web needs onKeyDown to see it.
976
- onKeyPress: handleKeyPress,
977
- onKeyDown: handleKeyPress,
978
- onBlur: commit,
979
- }}
980
- />
981
- );
982
- }
1005
+ const { inputProps: userInputProps, ...fieldRest } = restProps;
983
1006
 
984
1007
  return (
985
1008
  <Input
@@ -1179,6 +1202,14 @@ function DraftFieldEditor({
1179
1202
  );
1180
1203
  }
1181
1204
 
1205
+ function ModalCell(props: React.ComponentProps<typeof CellModalEditor>) {
1206
+ return (
1207
+ <CellWrapper>
1208
+ <CellModalEditor {...props} />
1209
+ </CellWrapper>
1210
+ );
1211
+ }
1212
+
1182
1213
  function CellWrapper({
1183
1214
  children,
1184
1215
  justify = "flex-start",
@@ -1191,10 +1222,12 @@ function CellWrapper({
1191
1222
  minWidth?: number;
1192
1223
  }) {
1193
1224
  // Fields render chromeless inside cells (useIsInTableCell strips the input
1194
- // frame), so the cell chrome owns the focus affordance: the knob recipe's
1195
- // focus-visible ring shows on the cell whenever focus is inside it
1196
- // (DG-A11Y-01 / Axiom 12 — recipe ring, not a hand-rolled outline).
1197
- const { control } = useResolvedKnobs();
1225
+ // frame), so the cell chrome owns the focus affordance. LC-71: one ring on
1226
+ // the perceived control boundary (this wrapper). Keyboard-origin focus
1227
+ // rings via :has(:focus-visible); text-entry also rings on any input
1228
+ // focus (the carve-out). Mouse click on a checkbox/switch paints no ring.
1229
+ // Inner field outlines are suppressed by the composite-ring stylesheet.
1230
+ if (isWeb) ensureCompositeFocusRing();
1198
1231
  // Column + stretch layout so field roots adopt the cell width (input frames
1199
1232
  // carry minWidth 0 and shrink to fit); maxWidth + a horizontal-only clip
1200
1233
  // (overflow-x: clip pairs with overflow-y: visible, unlike hidden) catch
@@ -1214,13 +1247,15 @@ function CellWrapper({
1214
1247
  width="100%"
1215
1248
  maxWidth="100%"
1216
1249
  // Per-axis overflow is web-only CSS; RN styles know only `overflow`.
1217
- {...(isWeb ? { overflowX: "clip" as any, overflowY: "visible" as any } : undefined)}
1250
+ {...(isWeb
1251
+ ? {
1252
+ overflowX: "clip" as any,
1253
+ overflowY: "visible" as any,
1254
+ className: "mp-composite-ring mp-composite-ring-deep",
1255
+ }
1256
+ : undefined)}
1218
1257
  gap={gap as any}
1219
1258
  minWidth={minWidth}
1220
- // focus-within is a web-only concept; on native the style prop makes the
1221
- // wrapper claim the responder and Tamagui-driven presses inside the cell
1222
- // (Checkbox/Switch frames) never fire.
1223
- {...(isWeb ? { focusWithinStyle: { ...control.focusVisibleKnobProps } } : undefined)}
1224
1259
  >
1225
1260
  {children}
1226
1261
  </View>
@@ -58,10 +58,12 @@ function TestComponent({
58
58
  onPinChange,
59
59
  maxPinnedColumns = 3,
60
60
  allowPinning = true,
61
+ disabled = false,
61
62
  }: {
62
63
  onPinChange?: (columnId: string, position?: "left" | "right") => void;
63
64
  maxPinnedColumns?: number;
64
65
  allowPinning?: boolean;
66
+ disabled?: boolean;
65
67
  }) {
66
68
  const [pinnedColumns, setPinnedColumns] = React.useState<{
67
69
  left: string[];
@@ -95,6 +97,7 @@ function TestComponent({
95
97
  onPinChange,
96
98
  maxPinnedColumns,
97
99
  allowPinning,
100
+ disabled,
98
101
  });
99
102
 
100
103
  // Force pinning to use current state
@@ -197,6 +200,69 @@ describe("DataTableColumnPinning", () => {
197
200
  });
198
201
  });
199
202
 
203
+ // LC-54 amendment (2026-08-13) VERIFY arm: in hover/press the element
204
+ // carrying the press-target outset keeps `background-color: transparent` —
205
+ // painted feedback lives on the glyph-scale ring inside it. jsdom never
206
+ // applies :hover, but tamagui compiles state backgrounds into value-carrying
207
+ // atomic classes (`_bg-0hover-color4`), so the paint channel is asserted
208
+ // through the atoms each node carries — red on the old anatomy (the floor
209
+ // carried the hover AND press fills), green only when the floor is
210
+ // paint-free in every state.
211
+ describe("DataTableColumnPinning press-floor paint (LC-54 amendment)", () => {
212
+ const paintedStateAtom = /_bg-0(?:hover|active)-(?!transparent)/;
213
+ const floorFor = (columnId: string) =>
214
+ screen.getByTestId(`column-${columnId}`).querySelector('[role="button"]') as HTMLElement;
215
+
216
+ it("floor node carries no hover/press background paint", () => {
217
+ renderWithProviders(<TestComponent />);
218
+ expect(floorFor("name").className).not.toMatch(paintedStateAtom);
219
+ });
220
+
221
+ it("positive control: the glyph-scale ring is where the hover fill lives", () => {
222
+ renderWithProviders(<TestComponent />);
223
+ const floor = floorFor("name");
224
+ const ring = floor.firstElementChild as HTMLElement;
225
+ expect(ring).not.toBeNull();
226
+ // Proves the atom detector can see hover paint in this harness (the
227
+ // no-paint assert above is meaningless without this arm), and pins the
228
+ // fill to the ring: icon + one space token, never the 44px floor.
229
+ expect(ring.className).toMatch(/_bg-0hover-color4/);
230
+ expect(ring.querySelector("svg")).not.toBeNull();
231
+ });
232
+
233
+ it("activation bubbles from a press on the glyph ring", async () => {
234
+ const onPinChange = vi.fn();
235
+ renderWithProviders(<TestComponent onPinChange={onPinChange} />);
236
+ // Real pointers land on the glyph-scale ring inside the grown target —
237
+ // activation must bubble through it to the floor's press handler.
238
+ const ring = floorFor("name").firstElementChild as HTMLElement;
239
+ fireEvent.click(ring);
240
+ await waitFor(() => expect(onPinChange).toHaveBeenCalledWith("name", "left"));
241
+ });
242
+
243
+ it("a pinned column keeps full rest opacity (honest active state)", async () => {
244
+ // 0.7 compiles to the `_o-0--7` atom (dots escape as double dashes).
245
+ renderWithProviders(<TestComponent />);
246
+ expect(floorFor("name").className).toMatch(/_o-0--7/);
247
+ fireEvent.click(floorFor("name"));
248
+ await waitFor(() => {
249
+ expect(screen.getByTestId("pinned-name")).toHaveTextContent("pinned");
250
+ });
251
+ expect(floorFor("name").className).not.toMatch(/_o-0--7/);
252
+ });
253
+
254
+ it("an inert trigger keeps its LC-40 dim and paints no ring hover", () => {
255
+ renderWithProviders(<TestComponent disabled />);
256
+ const floor = floorFor("name");
257
+ expect(floor.getAttribute("aria-disabled")).toBe("true");
258
+ expect(floor.className).toMatch(/_o-0--4/);
259
+ // Feedback on an inert control would promise an action it won't take —
260
+ // the ring's hover fill is gated off with the press handler.
261
+ const ring = floor.firstElementChild as HTMLElement;
262
+ expect(ring.className).not.toMatch(paintedStateAtom);
263
+ });
264
+ });
265
+
200
266
  describe("useColumnPinning", () => {
201
267
  function HookTestComponent() {
202
268
  const table = useReactTable({
@@ -236,21 +236,26 @@ export function DataTableColumnPinning<TData>(props: DataTableColumnPinningProps
236
236
  : t("Pin {{column}} column left", { column: columnLabel });
237
237
 
238
238
  return (
239
+ // LC-54 amendment (2026-08-13): the grown press target NEVER paints —
240
+ // hover/press fills on this box spread across the full 44px floor and
241
+ // bled into the neighboring header band via the negative outsets.
242
+ // Floor-wide feedback is subtree opacity; the painted hover chrome
243
+ // rides the glyph-scale ring inside (ColumnHeaderFilter anatomy).
239
244
  <View
240
- padding="$1"
241
- borderRadius="$2"
242
245
  cursor={next === "none" ? "default" : "pointer"}
243
246
  {...pressTargetStyle()}
244
- flexDirection="row"
245
247
  alignItems="center"
246
248
  justifyContent="center"
247
- gap={2}
248
249
  marginVertical={-PIN_TRIGGER_OUTSET}
249
250
  marginHorizontal={-PIN_TRIGGER_OUTSET}
250
251
  hitSlop={pressTargetHitSlop(PIN_TRIGGER_VISUAL)}
251
- hoverStyle={{ backgroundColor: "$color4" }}
252
- pressStyle={{ backgroundColor: "$color5" }}
253
- opacity={next === "none" ? 0.4 : 1}
252
+ // Axiom 6 HONEST STATE: a pinned column is an active signal — it
253
+ // keeps full strength; the idle affordance rests dimmed. An inert
254
+ // trigger (LC-40: table disabled / both sides maxed) keeps its dim
255
+ // in every state — feedback would promise an action it won't take.
256
+ opacity={next === "none" ? 0.4 : pinned ? 1 : 0.7}
257
+ hoverStyle={{ opacity: next === "none" ? 0.4 : 1 }}
258
+ pressStyle={{ opacity: next === "none" ? 0.4 : 0.9 }}
254
259
  onPress={(e: any) => {
255
260
  e?.stopPropagation?.();
256
261
  if (next === "none") return;
@@ -260,16 +265,26 @@ export function DataTableColumnPinning<TData>(props: DataTableColumnPinningProps
260
265
  aria-label={label}
261
266
  aria-disabled={next === "none" || undefined}
262
267
  >
263
- <PushPinIcon
264
- size={14}
265
- color={pinned ? "var(--accentColor)" : "var(--color10)"}
266
- weight={pinned ? "fill" : "regular"}
267
- />
268
- {pinned && currentPosition ? (
269
- <Text fontSize={10} color="$color10">
270
- {currentPosition === "left" ? "L" : "R"}
271
- </Text>
272
- ) : null}
268
+ <View
269
+ padding="$1"
270
+ borderRadius="$2"
271
+ flexDirection="row"
272
+ alignItems="center"
273
+ justifyContent="center"
274
+ gap={2}
275
+ {...(next === "none" ? undefined : { hoverStyle: { backgroundColor: "$color4" } })}
276
+ >
277
+ <PushPinIcon
278
+ size={14}
279
+ color={pinned ? "var(--accentColor)" : "var(--color10)"}
280
+ weight={pinned ? "fill" : "regular"}
281
+ />
282
+ {pinned && currentPosition ? (
283
+ <Text fontSize={10} color="$color10">
284
+ {currentPosition === "left" ? "L" : "R"}
285
+ </Text>
286
+ ) : null}
287
+ </View>
273
288
  </View>
274
289
  );
275
290
  },
@@ -1,5 +1,6 @@
1
1
  import { fireEvent, screen, waitFor } from "@testing-library/react";
2
2
  import { renderWithProviders } from "@multiplatform.one/test-utils";
3
+ import { formatAbsoluteDate } from "@multiplatform.one/theme";
3
4
  import React from "react";
4
5
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
6
  import {
@@ -67,7 +68,14 @@ describe("DataTableDateFilter", () => {
67
68
 
68
69
  renderWithProviders(<DataTableDateFilter value={value} />);
69
70
 
70
- expect(screen.getByText(/Is Jan 15, 2024/)).toBeInTheDocument();
71
+ // The trigger renders an instant through the house absolute register
72
+ // (LC-12), which reads it in LOCAL time — so the day it names depends on
73
+ // the ambient zone: this one is Jan 16 at UTC+14. Deriving the label from
74
+ // the same register asserts the register was used, which is the contract;
75
+ // a hard-coded "Jan 15, 2024" asserted the host was at a non-positive
76
+ // offset, which is not.
77
+ const expected = formatAbsoluteDate(value.value, { year: "always" });
78
+ expect(screen.getByText(`Is ${expected}`)).toBeInTheDocument();
71
79
  });
72
80
 
73
81
  it("shows different display formats for different operators", () => {