@lucasbernardosn/react-table 0.0.0-stage → 0.2.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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +268 -2
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/components/column-menu/column-menu-check.d.ts +8 -0
  5. package/dist/components/column-menu/column-menu-check.d.ts.map +1 -0
  6. package/dist/components/column-menu/column-menu-check.js +17 -0
  7. package/dist/components/column-menu/column-menu-check.js.map +1 -0
  8. package/dist/components/column-menu/column-menu-hide-item.d.ts +23 -0
  9. package/dist/components/column-menu/column-menu-hide-item.d.ts.map +1 -0
  10. package/dist/components/column-menu/column-menu-hide-item.js +27 -0
  11. package/dist/components/column-menu/column-menu-hide-item.js.map +1 -0
  12. package/dist/components/column-menu/column-menu-labels.d.ts +21 -0
  13. package/dist/components/column-menu/column-menu-labels.d.ts.map +1 -0
  14. package/dist/components/column-menu/column-menu-labels.js +14 -0
  15. package/dist/components/column-menu/column-menu-labels.js.map +1 -0
  16. package/dist/components/column-menu/column-menu-pin-items.d.ts +25 -0
  17. package/dist/components/column-menu/column-menu-pin-items.d.ts.map +1 -0
  18. package/dist/components/column-menu/column-menu-pin-items.js +64 -0
  19. package/dist/components/column-menu/column-menu-pin-items.js.map +1 -0
  20. package/dist/components/column-menu/column-menu-popup.d.ts +40 -0
  21. package/dist/components/column-menu/column-menu-popup.d.ts.map +1 -0
  22. package/dist/components/column-menu/column-menu-popup.js +67 -0
  23. package/dist/components/column-menu/column-menu-popup.js.map +1 -0
  24. package/dist/components/column-menu/column-menu-root.d.ts +34 -0
  25. package/dist/components/column-menu/column-menu-root.d.ts.map +1 -0
  26. package/dist/components/column-menu/column-menu-root.js +36 -0
  27. package/dist/components/column-menu/column-menu-root.js.map +1 -0
  28. package/dist/components/column-menu/column-menu-sort-items.d.ts +30 -0
  29. package/dist/components/column-menu/column-menu-sort-items.d.ts.map +1 -0
  30. package/dist/components/column-menu/column-menu-sort-items.js +62 -0
  31. package/dist/components/column-menu/column-menu-sort-items.js.map +1 -0
  32. package/dist/components/column-menu/column-menu-trigger.d.ts +23 -0
  33. package/dist/components/column-menu/column-menu-trigger.d.ts.map +1 -0
  34. package/dist/components/column-menu/column-menu-trigger.js +38 -0
  35. package/dist/components/column-menu/column-menu-trigger.js.map +1 -0
  36. package/dist/components/column-menu/index.d.ts +2 -0
  37. package/dist/components/column-menu/index.js +2 -0
  38. package/dist/components/column-menu/index.parts.d.ts +13 -0
  39. package/dist/components/column-menu/index.parts.d.ts.map +1 -0
  40. package/dist/components/column-menu/index.parts.js +20 -0
  41. package/dist/components/column-menu/index.parts.js.map +1 -0
  42. package/dist/components/columns-panel/columns-panel-item.d.ts +34 -0
  43. package/dist/components/columns-panel/columns-panel-item.d.ts.map +1 -0
  44. package/dist/components/columns-panel/columns-panel-item.js +109 -0
  45. package/dist/components/columns-panel/columns-panel-item.js.map +1 -0
  46. package/dist/components/columns-panel/columns-panel-root.d.ts +51 -0
  47. package/dist/components/columns-panel/columns-panel-root.d.ts.map +1 -0
  48. package/dist/components/columns-panel/columns-panel-root.js +134 -0
  49. package/dist/components/columns-panel/columns-panel-root.js.map +1 -0
  50. package/dist/components/columns-panel/get-columns-panel-column-order.d.ts +16 -0
  51. package/dist/components/columns-panel/get-columns-panel-column-order.d.ts.map +1 -0
  52. package/dist/components/columns-panel/get-columns-panel-column-order.js +24 -0
  53. package/dist/components/columns-panel/get-columns-panel-column-order.js.map +1 -0
  54. package/dist/components/columns-panel/index.d.ts +2 -0
  55. package/dist/components/columns-panel/index.js +2 -0
  56. package/dist/components/columns-panel/index.parts.d.ts +8 -0
  57. package/dist/components/columns-panel/index.parts.d.ts.map +1 -0
  58. package/dist/components/columns-panel/index.parts.js +12 -0
  59. package/dist/components/columns-panel/index.parts.js.map +1 -0
  60. package/dist/components/data-table/body/data-table-body.d.ts +58 -0
  61. package/dist/components/data-table/body/data-table-body.d.ts.map +1 -0
  62. package/dist/components/data-table/body/data-table-body.js +99 -0
  63. package/dist/components/data-table/body/data-table-body.js.map +1 -0
  64. package/dist/components/data-table/body/data-table-cell.d.ts +26 -0
  65. package/dist/components/data-table/body/data-table-cell.d.ts.map +1 -0
  66. package/dist/components/data-table/body/data-table-cell.js +80 -0
  67. package/dist/components/data-table/body/data-table-cell.js.map +1 -0
  68. package/dist/components/data-table/body/data-table-empty.d.ts +38 -0
  69. package/dist/components/data-table/body/data-table-empty.d.ts.map +1 -0
  70. package/dist/components/data-table/body/data-table-empty.js +71 -0
  71. package/dist/components/data-table/body/data-table-empty.js.map +1 -0
  72. package/dist/components/data-table/body/data-table-row-focus.d.ts +32 -0
  73. package/dist/components/data-table/body/data-table-row-focus.d.ts.map +1 -0
  74. package/dist/components/data-table/body/data-table-row-focus.js +58 -0
  75. package/dist/components/data-table/body/data-table-row-focus.js.map +1 -0
  76. package/dist/components/data-table/body/data-table-row.d.ts +67 -0
  77. package/dist/components/data-table/body/data-table-row.d.ts.map +1 -0
  78. package/dist/components/data-table/body/data-table-row.js +154 -0
  79. package/dist/components/data-table/body/data-table-row.js.map +1 -0
  80. package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts +19 -0
  81. package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts.map +1 -0
  82. package/dist/components/data-table/body/use-data-table-row-focus-recovery.js +64 -0
  83. package/dist/components/data-table/body/use-data-table-row-focus-recovery.js.map +1 -0
  84. package/dist/components/data-table/header/data-table-header-button.d.ts +25 -0
  85. package/dist/components/data-table/header/data-table-header-button.d.ts.map +1 -0
  86. package/dist/components/data-table/header/data-table-header-button.js +57 -0
  87. package/dist/components/data-table/header/data-table-header-button.js.map +1 -0
  88. package/dist/components/data-table/header/data-table-header-cell.d.ts +34 -0
  89. package/dist/components/data-table/header/data-table-header-cell.d.ts.map +1 -0
  90. package/dist/components/data-table/header/data-table-header-cell.js +97 -0
  91. package/dist/components/data-table/header/data-table-header-cell.js.map +1 -0
  92. package/dist/components/data-table/header/data-table-header-content.d.ts +21 -0
  93. package/dist/components/data-table/header/data-table-header-content.d.ts.map +1 -0
  94. package/dist/components/data-table/header/data-table-header-content.js +37 -0
  95. package/dist/components/data-table/header/data-table-header-content.js.map +1 -0
  96. package/dist/components/data-table/header/data-table-header-row.d.ts +15 -0
  97. package/dist/components/data-table/header/data-table-header-row.d.ts.map +1 -0
  98. package/dist/components/data-table/header/data-table-header-row.js +28 -0
  99. package/dist/components/data-table/header/data-table-header-row.js.map +1 -0
  100. package/dist/components/data-table/header/data-table-header.d.ts +46 -0
  101. package/dist/components/data-table/header/data-table-header.d.ts.map +1 -0
  102. package/dist/components/data-table/header/data-table-header.js +80 -0
  103. package/dist/components/data-table/header/data-table-header.js.map +1 -0
  104. package/dist/components/data-table/index.d.ts +2 -0
  105. package/dist/components/data-table/index.js +2 -0
  106. package/dist/components/data-table/index.parts.d.ts +33 -0
  107. package/dist/components/data-table/index.parts.d.ts.map +1 -0
  108. package/dist/components/data-table/index.parts.js +62 -0
  109. package/dist/components/data-table/index.parts.js.map +1 -0
  110. package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts +16 -0
  111. package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts.map +1 -0
  112. package/dist/components/data-table/loading/get-data-table-loading-without-rows.js +18 -0
  113. package/dist/components/data-table/loading/get-data-table-loading-without-rows.js.map +1 -0
  114. package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts +16 -0
  115. package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts.map +1 -0
  116. package/dist/components/data-table/loading/use-data-table-loading-inert.js +54 -0
  117. package/dist/components/data-table/loading/use-data-table-loading-inert.js.map +1 -0
  118. package/dist/components/data-table/loading/use-data-table-loading.d.ts +13 -0
  119. package/dist/components/data-table/loading/use-data-table-loading.d.ts.map +1 -0
  120. package/dist/components/data-table/loading/use-data-table-loading.js +40 -0
  121. package/dist/components/data-table/loading/use-data-table-loading.js.map +1 -0
  122. package/dist/components/data-table/pagination/data-table-page-button.d.ts +45 -0
  123. package/dist/components/data-table/pagination/data-table-page-button.d.ts.map +1 -0
  124. package/dist/components/data-table/pagination/data-table-page-button.js +67 -0
  125. package/dist/components/data-table/pagination/data-table-page-button.js.map +1 -0
  126. package/dist/components/data-table/pagination/data-table-page-size-select.d.ts +47 -0
  127. package/dist/components/data-table/pagination/data-table-page-size-select.d.ts.map +1 -0
  128. package/dist/components/data-table/pagination/data-table-page-size-select.js +68 -0
  129. package/dist/components/data-table/pagination/data-table-page-size-select.js.map +1 -0
  130. package/dist/components/data-table/pagination/data-table-page-status.d.ts +43 -0
  131. package/dist/components/data-table/pagination/data-table-page-status.d.ts.map +1 -0
  132. package/dist/components/data-table/pagination/data-table-page-status.js +48 -0
  133. package/dist/components/data-table/pagination/data-table-page-status.js.map +1 -0
  134. package/dist/components/data-table/pagination/data-table-pagination.d.ts +38 -0
  135. package/dist/components/data-table/pagination/data-table-pagination.d.ts.map +1 -0
  136. package/dist/components/data-table/pagination/data-table-pagination.js +87 -0
  137. package/dist/components/data-table/pagination/data-table-pagination.js.map +1 -0
  138. package/dist/components/data-table/pagination/data-table-row-range.d.ts +49 -0
  139. package/dist/components/data-table/pagination/data-table-row-range.d.ts.map +1 -0
  140. package/dist/components/data-table/pagination/data-table-row-range.js +63 -0
  141. package/dist/components/data-table/pagination/data-table-row-range.js.map +1 -0
  142. package/dist/components/data-table/pagination/data-table-selected-count.d.ts +37 -0
  143. package/dist/components/data-table/pagination/data-table-selected-count.d.ts.map +1 -0
  144. package/dist/components/data-table/pagination/data-table-selected-count.js +44 -0
  145. package/dist/components/data-table/pagination/data-table-selected-count.js.map +1 -0
  146. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts +15 -0
  147. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts.map +1 -0
  148. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js +38 -0
  149. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js.map +1 -0
  150. package/dist/components/data-table/resize/data-table-resize-handle.d.ts +48 -0
  151. package/dist/components/data-table/resize/data-table-resize-handle.d.ts.map +1 -0
  152. package/dist/components/data-table/resize/data-table-resize-handle.js +116 -0
  153. package/dist/components/data-table/resize/data-table-resize-handle.js.map +1 -0
  154. package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts +18 -0
  155. package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts.map +1 -0
  156. package/dist/components/data-table/resize/use-data-table-resize-scroll.js +55 -0
  157. package/dist/components/data-table/resize/use-data-table-resize-scroll.js.map +1 -0
  158. package/dist/components/data-table/root/data-table-grid-class-names.d.ts +10 -0
  159. package/dist/components/data-table/root/data-table-grid-class-names.d.ts.map +1 -0
  160. package/dist/components/data-table/root/data-table-grid-class-names.js +22 -0
  161. package/dist/components/data-table/root/data-table-grid-class-names.js.map +1 -0
  162. package/dist/components/data-table/root/data-table-root.d.ts +41 -0
  163. package/dist/components/data-table/root/data-table-root.d.ts.map +1 -0
  164. package/dist/components/data-table/root/data-table-root.js +72 -0
  165. package/dist/components/data-table/root/data-table-root.js.map +1 -0
  166. package/dist/components/data-table/root/data-table-scroll-area.d.ts +30 -0
  167. package/dist/components/data-table/root/data-table-scroll-area.d.ts.map +1 -0
  168. package/dist/components/data-table/root/data-table-scroll-area.js +137 -0
  169. package/dist/components/data-table/root/data-table-scroll-area.js.map +1 -0
  170. package/dist/components/data-table/root/get-data-table-column-layout.d.ts +45 -0
  171. package/dist/components/data-table/root/get-data-table-column-layout.d.ts.map +1 -0
  172. package/dist/components/data-table/root/get-data-table-column-layout.js +55 -0
  173. package/dist/components/data-table/root/get-data-table-column-layout.js.map +1 -0
  174. package/dist/components/data-table/root/get-data-table-column-pinning.d.ts +46 -0
  175. package/dist/components/data-table/root/get-data-table-column-pinning.d.ts.map +1 -0
  176. package/dist/components/data-table/root/get-data-table-column-pinning.js +46 -0
  177. package/dist/components/data-table/root/get-data-table-column-pinning.js.map +1 -0
  178. package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts +13 -0
  179. package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts.map +1 -0
  180. package/dist/components/data-table/root/get-data-table-scroll-parent.js +20 -0
  181. package/dist/components/data-table/root/get-data-table-scroll-parent.js.map +1 -0
  182. package/dist/components/data-table/root/use-data-table-column-layout.d.ts +25 -0
  183. package/dist/components/data-table/root/use-data-table-column-layout.d.ts.map +1 -0
  184. package/dist/components/data-table/root/use-data-table-column-layout.js +106 -0
  185. package/dist/components/data-table/root/use-data-table-column-layout.js.map +1 -0
  186. package/dist/components/data-table/root/use-data-table-header-offset.d.ts +15 -0
  187. package/dist/components/data-table/root/use-data-table-header-offset.d.ts.map +1 -0
  188. package/dist/components/data-table/root/use-data-table-header-offset.js +35 -0
  189. package/dist/components/data-table/root/use-data-table-header-offset.js.map +1 -0
  190. package/dist/components/data-table/selection/data-table-row-checkbox.d.ts +33 -0
  191. package/dist/components/data-table/selection/data-table-row-checkbox.d.ts.map +1 -0
  192. package/dist/components/data-table/selection/data-table-row-checkbox.js +50 -0
  193. package/dist/components/data-table/selection/data-table-row-checkbox.js.map +1 -0
  194. package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts +31 -0
  195. package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts.map +1 -0
  196. package/dist/components/data-table/selection/data-table-select-all-checkbox.js +44 -0
  197. package/dist/components/data-table/selection/data-table-select-all-checkbox.js.map +1 -0
  198. package/dist/components/data-table/selection/data-table-selection-bar.d.ts +51 -0
  199. package/dist/components/data-table/selection/data-table-selection-bar.d.ts.map +1 -0
  200. package/dist/components/data-table/selection/data-table-selection-bar.js +58 -0
  201. package/dist/components/data-table/selection/data-table-selection-bar.js.map +1 -0
  202. package/dist/components/data-table/selection/selection-column-def.d.ts +54 -0
  203. package/dist/components/data-table/selection/selection-column-def.d.ts.map +1 -0
  204. package/dist/components/data-table/selection/selection-column-def.js +55 -0
  205. package/dist/components/data-table/selection/selection-column-def.js.map +1 -0
  206. package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts +26 -0
  207. package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts.map +1 -0
  208. package/dist/components/data-table/sorting/data-table-sort-indicator.js +64 -0
  209. package/dist/components/data-table/sorting/data-table-sort-indicator.js.map +1 -0
  210. package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts +31 -0
  211. package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts.map +1 -0
  212. package/dist/components/data-table/sorting/data-table-sort-trigger.js +46 -0
  213. package/dist/components/data-table/sorting/data-table-sort-trigger.js.map +1 -0
  214. package/dist/components/data-table/toolbar/data-table-density-select.d.ts +39 -0
  215. package/dist/components/data-table/toolbar/data-table-density-select.d.ts.map +1 -0
  216. package/dist/components/data-table/toolbar/data-table-density-select.js +60 -0
  217. package/dist/components/data-table/toolbar/data-table-density-select.js.map +1 -0
  218. package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts +48 -0
  219. package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts.map +1 -0
  220. package/dist/components/data-table/toolbar/data-table-sort-column-select.js +79 -0
  221. package/dist/components/data-table/toolbar/data-table-sort-column-select.js.map +1 -0
  222. package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts +40 -0
  223. package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts.map +1 -0
  224. package/dist/components/data-table/toolbar/data-table-sort-direction-select.js +66 -0
  225. package/dist/components/data-table/toolbar/data-table-sort-direction-select.js.map +1 -0
  226. package/dist/features/active-row/active-row-feature.d.ts +22 -0
  227. package/dist/features/active-row/active-row-feature.d.ts.map +1 -0
  228. package/dist/features/active-row/active-row-feature.js +55 -0
  229. package/dist/features/active-row/active-row-feature.js.map +1 -0
  230. package/dist/features/active-row/active-row-feature.types.d.ts +64 -0
  231. package/dist/features/active-row/active-row-feature.types.d.ts.map +1 -0
  232. package/dist/features/active-row/active-row-feature.types.js +0 -0
  233. package/dist/features/column-alignment/column-alignment-feature.d.ts +23 -0
  234. package/dist/features/column-alignment/column-alignment-feature.d.ts.map +1 -0
  235. package/dist/features/column-alignment/column-alignment-feature.js +34 -0
  236. package/dist/features/column-alignment/column-alignment-feature.js.map +1 -0
  237. package/dist/features/column-alignment/column-alignment-feature.types.d.ts +34 -0
  238. package/dist/features/column-alignment/column-alignment-feature.types.d.ts.map +1 -0
  239. package/dist/features/column-alignment/column-alignment-feature.types.js +0 -0
  240. package/dist/features/index.d.ts +9 -0
  241. package/dist/features/index.js +5 -0
  242. package/dist/features/loading/loading-feature.d.ts +30 -0
  243. package/dist/features/loading/loading-feature.d.ts.map +1 -0
  244. package/dist/features/loading/loading-feature.js +48 -0
  245. package/dist/features/loading/loading-feature.js.map +1 -0
  246. package/dist/features/loading/loading-feature.types.d.ts +50 -0
  247. package/dist/features/loading/loading-feature.types.d.ts.map +1 -0
  248. package/dist/features/loading/loading-feature.types.js +0 -0
  249. package/dist/features/row-density/row-density-feature.d.ts +26 -0
  250. package/dist/features/row-density/row-density-feature.d.ts.map +1 -0
  251. package/dist/features/row-density/row-density-feature.js +44 -0
  252. package/dist/features/row-density/row-density-feature.js.map +1 -0
  253. package/dist/features/row-density/row-density-feature.types.d.ts +53 -0
  254. package/dist/features/row-density/row-density-feature.types.d.ts.map +1 -0
  255. package/dist/features/row-density/row-density-feature.types.js +0 -0
  256. package/dist/types/index.d.ts +2 -0
  257. package/dist/types/index.js +0 -0
  258. package/dist/types/table-with.d.ts +96 -0
  259. package/dist/types/table-with.d.ts.map +1 -0
  260. package/dist/types/table-with.js +0 -0
  261. package/dist/utils/get-default-column-label.d.ts +17 -0
  262. package/dist/utils/get-default-column-label.d.ts.map +1 -0
  263. package/dist/utils/get-default-column-label.js +18 -0
  264. package/dist/utils/get-default-column-label.js.map +1 -0
  265. package/dist/utils/has-feature.d.ts +54 -0
  266. package/dist/utils/has-feature.d.ts.map +1 -0
  267. package/dist/utils/has-feature.js +55 -0
  268. package/dist/utils/has-feature.js.map +1 -0
  269. package/dist/utils/index.d.ts +3 -0
  270. package/dist/utils/index.js +3 -0
  271. package/package.json +80 -3
@@ -0,0 +1,87 @@
1
+ import { hasTableFeature } from "../../../utils/has-feature.js";
2
+ import { DataTablePageButton } from "./data-table-page-button.js";
3
+ import { DataTablePageSizeSelect } from "./data-table-page-size-select.js";
4
+ import { DataTablePageStatus } from "./data-table-page-status.js";
5
+ import { DataTableRowRange } from "./data-table-row-range.js";
6
+ import { DataTableSelectedCount } from "./data-table-selected-count.js";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import { mergeProps, useRender } from "@base-ui/react";
9
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
10
+ //#region src/components/data-table/pagination/data-table-pagination.tsx
11
+ /**
12
+ * A barra da paginação, para baixo da tabela. Sem `children`, monta o padrão: à esquerda, a
13
+ * contagem de selecionadas (com `rowSelectionFeature`); à direita, o `DataTable.PageSizeSelect`,
14
+ * o `DataTable.RowRange`, o `DataTable.PageStatus` e os quatro `DataTable.PageButton`. Com
15
+ * `children`, o app compõe as partes, cada uma com a `table`. Em tela estreita, os grupos quebram
16
+ * linha.
17
+ *
18
+ * Funciona com a paginação local (`createPaginatedRowModel`) e com a da API
19
+ * (`manualPagination`, com o `rowCount` ou o `pageCount`).
20
+ *
21
+ * É um `nav` com o nome "Paginação", trocável pelo `aria-label`: um marco, que o leitor de tela
22
+ * lista e para onde salta.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * <DataTable.Pagination table={table}>
27
+ * <DataTable.PageStatus table={table} />
28
+ * <DataTable.PageButton table={table} page="previous" />
29
+ * <DataTable.PageButton table={table} page="next" />
30
+ * </DataTable.Pagination>
31
+ * ```
32
+ */
33
+ const DataTablePagination = (props) => {
34
+ const { table, render, className, children, ...rest } = props;
35
+ const content = children === void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [hasTableFeature(table, "rowSelectionFeature") && /* @__PURE__ */ jsx(DataTableSelectedCount, { table }), /* @__PURE__ */ jsxs("div", {
36
+ className: "ms-auto flex flex-wrap items-center gap-x-4 gap-y-2",
37
+ children: [
38
+ /* @__PURE__ */ jsx(DataTablePageSizeSelect, { table }),
39
+ /* @__PURE__ */ jsx(DataTableRowRange, { table }),
40
+ /* @__PURE__ */ jsx(DataTablePageStatus, { table }),
41
+ /* @__PURE__ */ jsxs("div", {
42
+ className: "flex items-center gap-1",
43
+ children: [
44
+ /* @__PURE__ */ jsx(DataTablePageButton, {
45
+ table,
46
+ page: "first"
47
+ }),
48
+ /* @__PURE__ */ jsx(DataTablePageButton, {
49
+ table,
50
+ page: "previous"
51
+ }),
52
+ /* @__PURE__ */ jsx(DataTablePageButton, {
53
+ table,
54
+ page: "next"
55
+ }),
56
+ /* @__PURE__ */ jsx(DataTablePageButton, {
57
+ table,
58
+ page: "last"
59
+ })
60
+ ]
61
+ })
62
+ ]
63
+ })] }) : children;
64
+ const baseProps = {
65
+ "data-component": "DataTable.Pagination",
66
+ "aria-label": "Paginação",
67
+ className: mergeTwClassNames([
68
+ "flex",
69
+ "flex-wrap",
70
+ "items-center",
71
+ "justify-between",
72
+ "gap-x-6",
73
+ "gap-y-2"
74
+ ], className),
75
+ children: content
76
+ };
77
+ return useRender({
78
+ render,
79
+ defaultTagName: "nav",
80
+ props: mergeProps(baseProps, rest)
81
+ });
82
+ };
83
+ DataTablePagination.displayName = "DataTable.Pagination";
84
+ //#endregion
85
+ export { DataTablePagination };
86
+
87
+ //# sourceMappingURL=data-table-pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-pagination.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-pagination.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\nimport { hasTableFeature } from '../../../utils';\nimport { DataTablePageButton } from './data-table-page-button';\nimport { DataTablePageSizeSelect } from './data-table-page-size-select';\nimport { DataTablePageStatus } from './data-table-page-status';\nimport { DataTableRowRange } from './data-table-row-range';\nimport { DataTableSelectedCount } from './data-table-selected-count';\n\nexport type DataTablePaginationProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'nav'>,\n {\n /** A tabela. Exige `rowPaginationFeature`. */\n table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;\n }\n>;\n\n/**\n * A barra da paginação, para baixo da tabela. Sem `children`, monta o padrão: à esquerda, a\n * contagem de selecionadas (com `rowSelectionFeature`); à direita, o `DataTable.PageSizeSelect`,\n * o `DataTable.RowRange`, o `DataTable.PageStatus` e os quatro `DataTable.PageButton`. Com\n * `children`, o app compõe as partes, cada uma com a `table`. Em tela estreita, os grupos quebram\n * linha.\n *\n * Funciona com a paginação local (`createPaginatedRowModel`) e com a da API\n * (`manualPagination`, com o `rowCount` ou o `pageCount`).\n *\n * É um `nav` com o nome \"Paginação\", trocável pelo `aria-label`: um marco, que o leitor de tela\n * lista e para onde salta.\n *\n * @example\n * ```tsx\n * <DataTable.Pagination table={table}>\n * <DataTable.PageStatus table={table} />\n * <DataTable.PageButton table={table} page=\"previous\" />\n * <DataTable.PageButton table={table} page=\"next\" />\n * </DataTable.Pagination>\n * ```\n */\nexport const DataTablePagination = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTablePaginationProps<TFeatures, TData>,\n) => {\n const { table, render, className, children, ...rest } = props;\n\n const content =\n children === undefined ? (\n <>\n {hasTableFeature(table, 'rowSelectionFeature') && (\n <DataTableSelectedCount table={table} />\n )}\n\n {/* À direita mesmo sozinho, sem a contagem: o `justify-between` o levaria para a\n esquerda. */}\n <div className=\"ms-auto flex flex-wrap items-center gap-x-4 gap-y-2\">\n <DataTablePageSizeSelect table={table} />\n <DataTableRowRange table={table} />\n <DataTablePageStatus table={table} />\n\n <div className=\"flex items-center gap-1\">\n <DataTablePageButton\n table={table}\n page=\"first\"\n />\n <DataTablePageButton\n table={table}\n page=\"previous\"\n />\n <DataTablePageButton\n table={table}\n page=\"next\"\n />\n <DataTablePageButton\n table={table}\n page=\"last\"\n />\n </div>\n </div>\n </>\n ) : (\n children\n );\n\n const baseProps = {\n 'data-component': 'DataTable.Pagination',\n 'aria-label': 'Paginação',\n className: mergeTwClassNames(\n [\n 'flex',\n 'flex-wrap',\n 'items-center',\n 'justify-between',\n 'gap-x-6',\n 'gap-y-2',\n ],\n className,\n ),\n children: content,\n };\n\n return useRender({\n render,\n defaultTagName: 'nav',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDataTablePagination.displayName = 'DataTable.Pagination';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAa,uBAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,WAAW,UAAU,GAAG,SAAS;CAExD,MAAM,UACJ,aAAa,KAAA,IACX,qBAAA,UAAA,EAAA,UAAA,CACG,gBAAgB,OAAO,qBAAqB,KAC3C,oBAAC,wBAAD,EAA+B,MAAQ,CAAA,GAKzC,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,oBAAC,yBAAD,EAAgC,MAAQ,CAAA;GACxC,oBAAC,mBAAD,EAA0B,MAAQ,CAAA;GAClC,oBAAC,qBAAD,EAA4B,MAAQ,CAAA;GAEpC,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,oBAAC,qBAAD;MACS;MACP,MAAK;KACN,CAAA;KACD,oBAAC,qBAAD;MACS;MACP,MAAK;KACN,CAAA;KACD,oBAAC,qBAAD;MACS;MACP,MAAK;KACN,CAAA;KACD,oBAAC,qBAAD;MACS;MACP,MAAK;KACN,CAAA;IACE;;EACF;CACL,CAAA,CAAA,EAAA,CAAA,IAEF;CAGJ,MAAM,YAAY;EAChB,kBAAkB;EAClB,cAAc;EACd,WAAW,kBACT;GACE;GACA;GACA;GACA;GACA;GACA;EACF,GACA,SACF;EACA,UAAU;CACZ;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,oBAAoB,cAAc"}
@@ -0,0 +1,49 @@
1
+ import { TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowData, TableFeatures } from "@tanstack/react-table";
4
+ import { useRender } from "@base-ui/react";
5
+ import React from "react";
6
+ import { MergeOverride } from "@lucasbernardosn/utils";
7
+ //#region src/components/data-table/pagination/data-table-row-range.d.ts
8
+ /** As linhas da página atual e o total, para o texto do `DataTable.RowRange`. */
9
+ export type DataTableRowRangeValues = {
10
+ /** A posição da primeira linha da página, a partir de 1, ou 0 sem linhas. */
11
+ firstRow: number;
12
+ /** A posição da última linha da página, ou 0 sem linhas. */
13
+ lastRow: number;
14
+ /**
15
+ * O total de linhas, ou `-1` sem ele: na paginação pela API, sem o `rowCount` da tabela, e, com
16
+ * `loadingFeature`, na carga sem linhas, antes de o total chegar.
17
+ */
18
+ rowCount: number;
19
+ };
20
+ export type DataTableRowRangeProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
21
+ /** A tabela. Exige `rowPaginationFeature`. */
22
+ table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;
23
+ /**
24
+ * Uma função que recebe as posições e o total e devolve o texto.
25
+ * @default ({ firstRow, lastRow, rowCount }) => '11–20 de 243', ou '11–20' sem o total
26
+ */
27
+ children?: (values: DataTableRowRangeValues) => React.ReactNode;
28
+ }>;
29
+ /**
30
+ * Quais linhas a página mostra, e de quantas: "11–20 de 243". Com a paginação pela API, o total
31
+ * vem do `rowCount` da tabela; sem ele, só "11–20". Na carga sem linhas, como a primeira, fica
32
+ * vazio: o total ainda não chegou.
33
+ *
34
+ * Marca `role="status"`: quando o intervalo muda, como na troca de página, o leitor de tela
35
+ * anuncia o texto novo sem mover o foco.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <DataTable.RowRange table={table}>
40
+ * {({ rowCount }) => `${rowCount} pessoas`}
41
+ * </DataTable.RowRange>
42
+ * ```
43
+ */
44
+ export declare const DataTableRowRange: {
45
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableRowRangeProps<TFeatures, TData>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
46
+ displayName: string;
47
+ };
48
+ //#endregion
49
+ //# sourceMappingURL=data-table-row-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-row-range.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-row-range.tsx"],"mappings":";;;;;;;;YAUY;;EAEV;;EAEA;;;;;EAKA;;YAGU,uBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,UAAU,WAAW;;;;;EAK5B,YAAY,QAAQ,4BAA4B,MAAM;;;;;;;;;;;;;;;;;qBAmB7C;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,uBAAuB,WAAW,SAAM,MAAA,+BAAA,MAAA"}
@@ -0,0 +1,63 @@
1
+ import { getDataTableLoadingWithoutRows } from "../loading/get-data-table-loading-without-rows.js";
2
+ import { mergeProps, useRender } from "@base-ui/react";
3
+ import { shallow, useSelector } from "@tanstack/react-store";
4
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
5
+ //#region src/components/data-table/pagination/data-table-row-range.tsx
6
+ /**
7
+ * Quais linhas a página mostra, e de quantas: "11–20 de 243". Com a paginação pela API, o total
8
+ * vem do `rowCount` da tabela; sem ele, só "11–20". Na carga sem linhas, como a primeira, fica
9
+ * vazio: o total ainda não chegou.
10
+ *
11
+ * Marca `role="status"`: quando o intervalo muda, como na troca de página, o leitor de tela
12
+ * anuncia o texto novo sem mover o foco.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <DataTable.RowRange table={table}>
17
+ * {({ rowCount }) => `${rowCount} pessoas`}
18
+ * </DataTable.RowRange>
19
+ * ```
20
+ */
21
+ const DataTableRowRange = (props) => {
22
+ const { table, render, className, children, ...rest } = props;
23
+ /**
24
+ * Re-renderiza quando a página, o tamanho dela ou as linhas mudam. O store, e não só o atom da
25
+ * paginação: as linhas da página e o total mudam com os dados.
26
+ */
27
+ const values = useSelector(table.store, () => {
28
+ const { pageIndex, pageSize } = table.atoms.pagination.get();
29
+ const pageRowCount = table.getRowModel().rows.length;
30
+ const offset = pageIndex * pageSize;
31
+ return {
32
+ firstRow: pageRowCount === 0 ? 0 : offset + 1,
33
+ lastRow: pageRowCount === 0 ? 0 : offset + pageRowCount,
34
+ rowCount: getDataTableLoadingWithoutRows(table) || table.options.manualPagination && table.options.rowCount === void 0 ? -1 : table.getRowCount()
35
+ };
36
+ }, { compare: shallow });
37
+ /** Re-renderiza quando a carga sem linhas começa ou termina. */
38
+ const isLoadingWithoutRows = useSelector(table.store, () => getDataTableLoadingWithoutRows(table));
39
+ const range = values.lastRow === 0 ? "0" : `${values.firstRow.toLocaleString("pt-BR")}–${values.lastRow.toLocaleString("pt-BR")}`;
40
+ /** Na carga sem linhas, "0" diria que não há nada, e não que ainda não se sabe. */
41
+ const defaultText = isLoadingWithoutRows ? "" : values.rowCount === -1 ? range : `${range} de ${values.rowCount.toLocaleString("pt-BR")}`;
42
+ const baseProps = {
43
+ "data-component": "DataTable.RowRange",
44
+ role: "status",
45
+ className: mergeTwClassNames([
46
+ "text-gray-11",
47
+ "text-sm",
48
+ "tabular-nums",
49
+ "whitespace-nowrap"
50
+ ], className),
51
+ children: children === void 0 ? defaultText : children(values)
52
+ };
53
+ return useRender({
54
+ render,
55
+ defaultTagName: "span",
56
+ props: mergeProps(baseProps, rest)
57
+ });
58
+ };
59
+ DataTableRowRange.displayName = "DataTable.RowRange";
60
+ //#endregion
61
+ export { DataTableRowRange };
62
+
63
+ //# sourceMappingURL=data-table-row-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-row-range.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-row-range.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { shallow, useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type React from 'react';\nimport type { TableWith } from '../../../types';\nimport { getDataTableLoadingWithoutRows } from '../loading/get-data-table-loading-without-rows';\n\n/** As linhas da página atual e o total, para o texto do `DataTable.RowRange`. */\nexport type DataTableRowRangeValues = {\n /** A posição da primeira linha da página, a partir de 1, ou 0 sem linhas. */\n firstRow: number;\n /** A posição da última linha da página, ou 0 sem linhas. */\n lastRow: number;\n /**\n * O total de linhas, ou `-1` sem ele: na paginação pela API, sem o `rowCount` da tabela, e, com\n * `loadingFeature`, na carga sem linhas, antes de o total chegar.\n */\n rowCount: number;\n};\n\nexport type DataTableRowRangeProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'span'>,\n {\n /** A tabela. Exige `rowPaginationFeature`. */\n table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;\n /**\n * Uma função que recebe as posições e o total e devolve o texto.\n * @default ({ firstRow, lastRow, rowCount }) => '11–20 de 243', ou '11–20' sem o total\n */\n children?: (values: DataTableRowRangeValues) => React.ReactNode;\n }\n>;\n\n/**\n * Quais linhas a página mostra, e de quantas: \"11–20 de 243\". Com a paginação pela API, o total\n * vem do `rowCount` da tabela; sem ele, só \"11–20\". Na carga sem linhas, como a primeira, fica\n * vazio: o total ainda não chegou.\n *\n * Marca `role=\"status\"`: quando o intervalo muda, como na troca de página, o leitor de tela\n * anuncia o texto novo sem mover o foco.\n *\n * @example\n * ```tsx\n * <DataTable.RowRange table={table}>\n * {({ rowCount }) => `${rowCount} pessoas`}\n * </DataTable.RowRange>\n * ```\n */\nexport const DataTableRowRange = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableRowRangeProps<TFeatures, TData>,\n) => {\n const { table, render, className, children, ...rest } = props;\n\n /**\n * Re-renderiza quando a página, o tamanho dela ou as linhas mudam. O store, e não só o atom da\n * paginação: as linhas da página e o total mudam com os dados.\n */\n const values = useSelector(\n table.store,\n (): DataTableRowRangeValues => {\n const { pageIndex, pageSize } = table.atoms.pagination.get();\n const pageRowCount = table.getRowModel().rows.length;\n const offset = pageIndex * pageSize;\n\n return {\n firstRow: pageRowCount === 0 ? 0 : offset + 1,\n lastRow: pageRowCount === 0 ? 0 : offset + pageRowCount,\n // Sem o `rowCount`, o `getRowCount()` do TanStack conta as linhas carregadas, que na\n // paginação pela API são só as da página.\n rowCount:\n getDataTableLoadingWithoutRows(table) ||\n (table.options.manualPagination &&\n table.options.rowCount === undefined)\n ? -1\n : table.getRowCount(),\n };\n },\n { compare: shallow },\n );\n\n /** Re-renderiza quando a carga sem linhas começa ou termina. */\n const isLoadingWithoutRows = useSelector(table.store, () =>\n getDataTableLoadingWithoutRows(table),\n );\n\n const range =\n values.lastRow === 0\n ? '0'\n : `${values.firstRow.toLocaleString('pt-BR')}–${values.lastRow.toLocaleString('pt-BR')}`;\n\n /** Na carga sem linhas, \"0\" diria que não há nada, e não que ainda não se sabe. */\n const defaultText = isLoadingWithoutRows\n ? ''\n : values.rowCount === -1\n ? range\n : `${range} de ${values.rowCount.toLocaleString('pt-BR')}`;\n\n const baseProps = {\n 'data-component': 'DataTable.RowRange',\n role: 'status',\n className: mergeTwClassNames(\n ['text-gray-11', 'text-sm', 'tabular-nums', 'whitespace-nowrap'],\n className,\n ),\n children: children === undefined ? defaultText : children(values),\n };\n\n return useRender({\n render,\n defaultTagName: 'span',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDataTableRowRange.displayName = 'DataTable.RowRange';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqDA,MAAa,qBAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,WAAW,UAAU,GAAG,SAAS;;;;;CAMxD,MAAM,SAAS,YACb,MAAM,aACyB;EAC7B,MAAM,EAAE,WAAW,aAAa,MAAM,MAAM,WAAW,IAAI;EAC3D,MAAM,eAAe,MAAM,YAAY,CAAC,CAAC,KAAK;EAC9C,MAAM,SAAS,YAAY;EAE3B,OAAO;GACL,UAAU,iBAAiB,IAAI,IAAI,SAAS;GAC5C,SAAS,iBAAiB,IAAI,IAAI,SAAS;GAG3C,UACE,+BAA+B,KAAK,KACnC,MAAM,QAAQ,oBACb,MAAM,QAAQ,aAAa,KAAA,IACzB,KACA,MAAM,YAAY;EAC1B;CACF,GACA,EAAE,SAAS,QAAQ,CACrB;;CAGA,MAAM,uBAAuB,YAAY,MAAM,aAC7C,+BAA+B,KAAK,CACtC;CAEA,MAAM,QACJ,OAAO,YAAY,IACf,MACA,GAAG,OAAO,SAAS,eAAe,OAAO,EAAE,GAAG,OAAO,QAAQ,eAAe,OAAO;;CAGzF,MAAM,cAAc,uBAChB,KACA,OAAO,aAAa,KAClB,QACA,GAAG,MAAM,MAAM,OAAO,SAAS,eAAe,OAAO;CAE3D,MAAM,YAAY;EAChB,kBAAkB;EAClB,MAAM;EACN,WAAW,kBACT;GAAC;GAAgB;GAAW;GAAgB;EAAmB,GAC/D,SACF;EACA,UAAU,aAAa,KAAA,IAAY,cAAc,SAAS,MAAM;CAClE;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,kBAAkB,cAAc"}
@@ -0,0 +1,37 @@
1
+ import { TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowData, TableFeatures } from "@tanstack/react-table";
4
+ import { useRender } from "@base-ui/react";
5
+ import React from "react";
6
+ import { MergeOverride } from "@lucasbernardosn/utils";
7
+ //#region src/components/data-table/pagination/data-table-selected-count.d.ts
8
+ export type DataTableSelectedCountProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
9
+ /** A tabela. Exige `rowSelectionFeature`. */
10
+ table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;
11
+ /**
12
+ * Uma função que recebe quantas linhas estão marcadas e devolve o texto.
13
+ * @default (count) => '3 selecionadas', '1 selecionada' ou '0 selecionadas'
14
+ */
15
+ children?: (count: number) => React.ReactNode;
16
+ }>;
17
+ /**
18
+ * Quantas linhas estão marcadas: "3 selecionadas". Aparece também sem nenhuma, "0 selecionadas":
19
+ * na barra da paginação, o lado esquerdo não some e volta a cada seleção.
20
+ *
21
+ * Conta os ids marcados no estado, e não as linhas carregadas: com a paginação pela API, entram as
22
+ * marcadas em outras páginas. Exige o `getRowId` com o id do registro (ver
23
+ * `DataTable.RowCheckbox`).
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <DataTable.SelectedCount table={table}>
28
+ * {(count) => `${count} de ${total}`}
29
+ * </DataTable.SelectedCount>
30
+ * ```
31
+ */
32
+ export declare const DataTableSelectedCount: {
33
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSelectedCountProps<TFeatures, TData>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
34
+ displayName: string;
35
+ };
36
+ //#endregion
37
+ //# sourceMappingURL=data-table-selected-count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-selected-count.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-selected-count.tsx"],"mappings":";;;;;;;YAQY,4BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,UAAU,WAAW;;;;;EAK5B,YAAY,kBAAkB,MAAM;;;;;;;;;;;;;;;;;qBAmB3B;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,4BAA4B,WAAW,SAAM,MAAA,+BAAA,MAAA"}
@@ -0,0 +1,44 @@
1
+ import { mergeProps, useRender } from "@base-ui/react";
2
+ import { useSelector } from "@tanstack/react-store";
3
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
4
+ //#region src/components/data-table/pagination/data-table-selected-count.tsx
5
+ /**
6
+ * Quantas linhas estão marcadas: "3 selecionadas". Aparece também sem nenhuma, "0 selecionadas":
7
+ * na barra da paginação, o lado esquerdo não some e volta a cada seleção.
8
+ *
9
+ * Conta os ids marcados no estado, e não as linhas carregadas: com a paginação pela API, entram as
10
+ * marcadas em outras páginas. Exige o `getRowId` com o id do registro (ver
11
+ * `DataTable.RowCheckbox`).
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <DataTable.SelectedCount table={table}>
16
+ * {(count) => `${count} de ${total}`}
17
+ * </DataTable.SelectedCount>
18
+ * ```
19
+ */
20
+ const DataTableSelectedCount = (props) => {
21
+ const { table, render, className, children, ...rest } = props;
22
+ /** Re-renderiza quando o número de marcadas muda. */
23
+ const count = useSelector(table.atoms.rowSelection, (rowSelection) => Object.values(rowSelection).filter(Boolean).length);
24
+ const baseProps = {
25
+ "data-component": "DataTable.SelectedCount",
26
+ className: mergeTwClassNames([
27
+ "text-gray-11",
28
+ "text-sm",
29
+ "tabular-nums",
30
+ "whitespace-nowrap"
31
+ ], className),
32
+ children: children === void 0 ? `${count.toLocaleString("pt-BR")} ${count === 1 ? "selecionada" : "selecionadas"}` : children(count)
33
+ };
34
+ return useRender({
35
+ render,
36
+ defaultTagName: "span",
37
+ props: mergeProps(baseProps, rest)
38
+ });
39
+ };
40
+ DataTableSelectedCount.displayName = "DataTable.SelectedCount";
41
+ //#endregion
42
+ export { DataTableSelectedCount };
43
+
44
+ //# sourceMappingURL=data-table-selected-count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-selected-count.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-selected-count.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type React from 'react';\nimport type { TableWith } from '../../../types';\n\nexport type DataTableSelectedCountProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'span'>,\n {\n /** A tabela. Exige `rowSelectionFeature`. */\n table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;\n /**\n * Uma função que recebe quantas linhas estão marcadas e devolve o texto.\n * @default (count) => '3 selecionadas', '1 selecionada' ou '0 selecionadas'\n */\n children?: (count: number) => React.ReactNode;\n }\n>;\n\n/**\n * Quantas linhas estão marcadas: \"3 selecionadas\". Aparece também sem nenhuma, \"0 selecionadas\":\n * na barra da paginação, o lado esquerdo não some e volta a cada seleção.\n *\n * Conta os ids marcados no estado, e não as linhas carregadas: com a paginação pela API, entram as\n * marcadas em outras páginas. Exige o `getRowId` com o id do registro (ver\n * `DataTable.RowCheckbox`).\n *\n * @example\n * ```tsx\n * <DataTable.SelectedCount table={table}>\n * {(count) => `${count} de ${total}`}\n * </DataTable.SelectedCount>\n * ```\n */\nexport const DataTableSelectedCount = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSelectedCountProps<TFeatures, TData>,\n) => {\n const { table, render, className, children, ...rest } = props;\n\n /** Re-renderiza quando o número de marcadas muda. */\n const count = useSelector(\n table.atoms.rowSelection,\n (rowSelection) => Object.values(rowSelection).filter(Boolean).length,\n );\n\n const baseProps = {\n 'data-component': 'DataTable.SelectedCount',\n className: mergeTwClassNames(\n [\n 'text-gray-11',\n 'text-sm',\n\n 'tabular-nums',\n 'whitespace-nowrap',\n ],\n className,\n ),\n children:\n children === undefined\n ? `${count.toLocaleString('pt-BR')} ${count === 1 ? 'selecionada' : 'selecionadas'}`\n : children(count),\n };\n\n return useRender({\n render,\n defaultTagName: 'span',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDataTableSelectedCount.displayName = 'DataTable.SelectedCount';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuCA,MAAa,0BAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,WAAW,UAAU,GAAG,SAAS;;CAGxD,MAAM,QAAQ,YACZ,MAAM,MAAM,eACX,iBAAiB,OAAO,OAAO,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,MAChE;CAEA,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GAEA;GACA;EACF,GACA,SACF;EACA,UACE,aAAa,KAAA,IACT,GAAG,MAAM,eAAe,OAAO,EAAE,GAAG,UAAU,IAAI,gBAAgB,mBAClE,SAAS,KAAK;CACtB;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,uBAAuB,cAAc"}
@@ -0,0 +1,15 @@
1
+ import { RowData, Table, TableFeatures } from "@tanstack/react-table";
2
+ import React from "react";
3
+ //#region src/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts
4
+ /**
5
+ * Volta a rolagem vertical ao topo quando a página ou o tamanho dela mudam. Sem isto, quem rolou
6
+ * até o fim e passou de página cai no fim da página seguinte. A rolagem horizontal fica. Só com
7
+ * `rowPaginationFeature`.
8
+ *
9
+ * Assina a paginação fora do React, como o bloqueio da carga: rolar não re-renderiza o corpo, que
10
+ * recriaria todas as linhas. Na paginação pela API, a página muda antes de as linhas chegarem, e
11
+ * um render ali seria à toa.
12
+ */
13
+ export declare const useDataTablePageScrollReset: <TFeatures extends TableFeatures, TData extends RowData>(table: Table<TFeatures, TData>, ref: React.RefObject<HTMLElement | null>) => void;
14
+ //#endregion
15
+ //# sourceMappingURL=use-data-table-page-scroll-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-data-table-page-scroll-reset.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/use-data-table-page-scroll-reset.ts"],"mappings":";;;;;;;;;;;;qBAea,8BACX,kBAAkB,eAClB,cAAc,SAEd,OAAO,MAAM,WAAW,QACxB,KAAK,MAAM,UAAU"}
@@ -0,0 +1,38 @@
1
+ import { hasTableFeature } from "../../../utils/has-feature.js";
2
+ import { getDataTableScrollParent } from "../root/get-data-table-scroll-parent.js";
3
+ import { useLayoutEffect } from "react";
4
+ //#region src/components/data-table/pagination/use-data-table-page-scroll-reset.ts
5
+ /**
6
+ * Volta a rolagem vertical ao topo quando a página ou o tamanho dela mudam. Sem isto, quem rolou
7
+ * até o fim e passou de página cai no fim da página seguinte. A rolagem horizontal fica. Só com
8
+ * `rowPaginationFeature`.
9
+ *
10
+ * Assina a paginação fora do React, como o bloqueio da carga: rolar não re-renderiza o corpo, que
11
+ * recriaria todas as linhas. Na paginação pela API, a página muda antes de as linhas chegarem, e
12
+ * um render ali seria à toa.
13
+ */
14
+ const useDataTablePageScrollReset = (table, ref) => {
15
+ useLayoutEffect(() => {
16
+ if (!hasTableFeature(table, "rowPaginationFeature")) return;
17
+ const paginationAtom = table.atoms.pagination;
18
+ /** A página e o tamanho num texto, para comparar com `===`. */
19
+ const getPageKey = () => {
20
+ const { pageIndex, pageSize } = paginationAtom.get();
21
+ return `${pageIndex}:${pageSize}`;
22
+ };
23
+ /** A página da última rolagem: na montagem, não rola. */
24
+ let lastPageKey = getPageKey();
25
+ const subscription = paginationAtom.subscribe(() => {
26
+ const pageKey = getPageKey();
27
+ if (pageKey === lastPageKey) return;
28
+ lastPageKey = pageKey;
29
+ const scrollParent = ref.current && getDataTableScrollParent(ref.current);
30
+ if (scrollParent) scrollParent.scrollTop = 0;
31
+ });
32
+ return () => subscription.unsubscribe();
33
+ }, [table, ref]);
34
+ };
35
+ //#endregion
36
+ export { useDataTablePageScrollReset };
37
+
38
+ //# sourceMappingURL=use-data-table-page-scroll-reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-data-table-page-scroll-reset.js","names":[],"sources":["../../../../src/components/data-table/pagination/use-data-table-page-scroll-reset.ts"],"sourcesContent":["import type { RowData, Table, TableFeatures } from '@tanstack/react-table';\nimport type React from 'react';\nimport { useLayoutEffect } from 'react';\nimport { hasTableFeature } from '../../../utils';\nimport { getDataTableScrollParent } from '../root/get-data-table-scroll-parent';\n\n/**\n * Volta a rolagem vertical ao topo quando a página ou o tamanho dela mudam. Sem isto, quem rolou\n * até o fim e passou de página cai no fim da página seguinte. A rolagem horizontal fica. Só com\n * `rowPaginationFeature`.\n *\n * Assina a paginação fora do React, como o bloqueio da carga: rolar não re-renderiza o corpo, que\n * recriaria todas as linhas. Na paginação pela API, a página muda antes de as linhas chegarem, e\n * um render ali seria à toa.\n */\nexport const useDataTablePageScrollReset = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table<TFeatures, TData>,\n ref: React.RefObject<HTMLElement | null>,\n) => {\n useLayoutEffect(() => {\n if (!hasTableFeature(table, 'rowPaginationFeature')) {\n return;\n }\n\n const paginationAtom = table.atoms.pagination;\n\n /** A página e o tamanho num texto, para comparar com `===`. */\n const getPageKey = () => {\n const { pageIndex, pageSize } = paginationAtom.get();\n\n return `${pageIndex}:${pageSize}`;\n };\n\n /** A página da última rolagem: na montagem, não rola. */\n let lastPageKey = getPageKey();\n\n const subscription = paginationAtom.subscribe(() => {\n const pageKey = getPageKey();\n\n if (pageKey === lastPageKey) {\n return;\n }\n\n lastPageKey = pageKey;\n\n const scrollParent = ref.current && getDataTableScrollParent(ref.current);\n\n if (scrollParent) {\n scrollParent.scrollTop = 0;\n }\n });\n\n return () => subscription.unsubscribe();\n }, [table, ref]);\n};\n"],"mappings":";;;;;;;;;;;;;AAeA,MAAa,+BAIX,OACA,QACG;CACH,sBAAsB;EACpB,IAAI,CAAC,gBAAgB,OAAO,sBAAsB,GAChD;EAGF,MAAM,iBAAiB,MAAM,MAAM;;EAGnC,MAAM,mBAAmB;GACvB,MAAM,EAAE,WAAW,aAAa,eAAe,IAAI;GAEnD,OAAO,GAAG,UAAU,GAAG;EACzB;;EAGA,IAAI,cAAc,WAAW;EAE7B,MAAM,eAAe,eAAe,gBAAgB;GAClD,MAAM,UAAU,WAAW;GAE3B,IAAI,YAAY,aACd;GAGF,cAAc;GAEd,MAAM,eAAe,IAAI,WAAW,yBAAyB,IAAI,OAAO;GAExE,IAAI,cACF,aAAa,YAAY;EAE7B,CAAC;EAED,aAAa,aAAa,YAAY;CACxC,GAAG,CAAC,OAAO,GAAG,CAAC;AACjB"}
@@ -0,0 +1,48 @@
1
+ import { HeaderWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowData, TableFeatures } from "@tanstack/react-table";
4
+ import { useRender } from "@base-ui/react";
5
+ import React from "react";
6
+ import { MergeOverride } from "@lucasbernardosn/utils";
7
+ //#region src/components/data-table/resize/data-table-resize-handle.d.ts
8
+ export type DataTableResizeHandleProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'div'>, {
9
+ /** O header da coluna. Exige `columnSizingFeature` e `columnResizingFeature`. */
10
+ header: HeaderWith<TFeatures, TData, 'columnResizingFeature' | 'columnSizingFeature'>;
11
+ }>;
12
+ /**
13
+ * Área de agarre para redimensionar uma coluna, sobre a linha vertical do fim do header (que
14
+ * precisa ser `relative`). Arrastar redimensiona; duplo clique devolve a coluna ao tamanho
15
+ * definido.
16
+ *
17
+ * A caixa tem largura zero, e a área de agarre é um `::before` transparente de 12px centrado na
18
+ * linha, metade sobre a coluna vizinha; na última coluna e antes de uma fixada do fim, toda do
19
+ * lado de dentro. No repouso não aparece; no hover e no arrasto, o handle vira a âncora da
20
+ * linha-guia, que a `DataTable.ScrollArea` desenha na altura toda da tabela.
21
+ * Quando a borda chega à beira de uma fixada do fim ou ao fim da área visível, a rolagem
22
+ * acompanha o arrasto. Numa coluna que não redimensiona (`enableResizing: false`), não
23
+ * renderiza.
24
+ *
25
+ * Durante o arrasto, o `InteractionShield` do `ui` cobre a página: nada, dentro ou fora da
26
+ * tabela, reage ao ponteiro, o cursor de resize vale em toda parte, e o texto não é selecionado.
27
+ * A roda do mouse, por cima dele, não rola a tabela.
28
+ *
29
+ * Exige `columnResizeMode: 'onChange'` na tabela. Com o padrão do TanStack, `'onEnd'`, o tamanho
30
+ * só muda ao soltar: no arrasto nada anda na tela (nem a coluna, nem o handle, nem a guia), e a
31
+ * coluna pula no fim.
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * const table = useTable({ features, columns, data, columnResizeMode: 'onChange' });
36
+ *
37
+ * <DataTable.HeaderCell header={header}>
38
+ * <DataTable.HeaderContent header={header} />
39
+ * <DataTable.ResizeHandle header={header} />
40
+ * </DataTable.HeaderCell>
41
+ * ```
42
+ */
43
+ export declare const DataTableResizeHandle: {
44
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableResizeHandleProps<TFeatures, TData>): React.JSX.Element | null;
45
+ displayName: string;
46
+ };
47
+ //#endregion
48
+ //# sourceMappingURL=data-table-resize-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-resize-handle.d.ts","names":[],"sources":["../../../../src/components/data-table/resize/data-table-resize-handle.tsx"],"mappings":";;;;;;;YAWY,2BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WACN,WACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAqCO;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,2BAA2B,WAAW,SAAM,MAAA,IAAA"}
@@ -0,0 +1,116 @@
1
+ import { useDataTableResizeScroll } from "./use-data-table-resize-scroll.js";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { mergeProps, useRender } from "@base-ui/react";
4
+ import { useSelector } from "@tanstack/react-store";
5
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
6
+ import { useRef } from "react";
7
+ import { InteractionShield } from "@lucasbernardosn/react-ui/utilities/interaction-shield";
8
+ //#region src/components/data-table/resize/data-table-resize-handle.tsx
9
+ /**
10
+ * Área de agarre para redimensionar uma coluna, sobre a linha vertical do fim do header (que
11
+ * precisa ser `relative`). Arrastar redimensiona; duplo clique devolve a coluna ao tamanho
12
+ * definido.
13
+ *
14
+ * A caixa tem largura zero, e a área de agarre é um `::before` transparente de 12px centrado na
15
+ * linha, metade sobre a coluna vizinha; na última coluna e antes de uma fixada do fim, toda do
16
+ * lado de dentro. No repouso não aparece; no hover e no arrasto, o handle vira a âncora da
17
+ * linha-guia, que a `DataTable.ScrollArea` desenha na altura toda da tabela.
18
+ * Quando a borda chega à beira de uma fixada do fim ou ao fim da área visível, a rolagem
19
+ * acompanha o arrasto. Numa coluna que não redimensiona (`enableResizing: false`), não
20
+ * renderiza.
21
+ *
22
+ * Durante o arrasto, o `InteractionShield` do `ui` cobre a página: nada, dentro ou fora da
23
+ * tabela, reage ao ponteiro, o cursor de resize vale em toda parte, e o texto não é selecionado.
24
+ * A roda do mouse, por cima dele, não rola a tabela.
25
+ *
26
+ * Exige `columnResizeMode: 'onChange'` na tabela. Com o padrão do TanStack, `'onEnd'`, o tamanho
27
+ * só muda ao soltar: no arrasto nada anda na tela (nem a coluna, nem o handle, nem a guia), e a
28
+ * coluna pula no fim.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * const table = useTable({ features, columns, data, columnResizeMode: 'onChange' });
33
+ *
34
+ * <DataTable.HeaderCell header={header}>
35
+ * <DataTable.HeaderContent header={header} />
36
+ * <DataTable.ResizeHandle header={header} />
37
+ * </DataTable.HeaderCell>
38
+ * ```
39
+ */
40
+ const DataTableResizeHandle = (props) => {
41
+ const { header, render, className, ref, ...rest } = props;
42
+ const handleRef = useRef(null);
43
+ /**
44
+ * O atom do resize muda a cada tick do arrasto, mas o booleano só no começo e no fim: o handle
45
+ * re-renderiza duas vezes por arrasto, e só o da coluna arrastada.
46
+ */
47
+ const isResizing = useSelector(header.column.table.atoms.columnResizing, () => header.column.getIsResizing());
48
+ useDataTableResizeScroll(header.column.table, isResizing, handleRef);
49
+ const onResizeStart = header.getResizeHandler();
50
+ /**
51
+ * O duplo clique pelo `detail` do `mousedown`, que conta os cliques, e não pelo `dblclick`: o
52
+ * arrasto começa no primeiro `mousedown`, o shield cobre o handle, e o `mouseup` cai nele. O
53
+ * navegador então não manda o `click` nem o `dblclick` ao handle.
54
+ */
55
+ const handleMouseDown = (event) => {
56
+ if (event.detail === 2) {
57
+ header.column.resetSize();
58
+ return;
59
+ }
60
+ onResizeStart(event);
61
+ };
62
+ const baseProps = {
63
+ "data-component": "DataTable.ResizeHandle",
64
+ "data-resizing": isResizing ? "" : void 0,
65
+ "aria-hidden": true,
66
+ onMouseDown: handleMouseDown,
67
+ onTouchStart: onResizeStart,
68
+ className: mergeTwClassNames([
69
+ "absolute",
70
+ "top-0",
71
+ "right-0",
72
+ "in-[[role=columnheader]:last-child]:right-px",
73
+ "z-10",
74
+ "h-full",
75
+ "cursor-col-resize",
76
+ "in-[[role=columnheader]:has([data-popup-open])]:pointer-events-none",
77
+ "touch-none",
78
+ "select-none",
79
+ "before:absolute",
80
+ "before:top-0",
81
+ "before:right-0",
82
+ "before:h-full",
83
+ "before:w-3",
84
+ "before:translate-x-1.5",
85
+ "before:content-[\"\"]",
86
+ "in-[[role=columnheader]:last-child]:before:translate-x-0",
87
+ "in-[[role=columnheader]:has(+[data-pinned=end])]:before:translate-x-0",
88
+ "after:absolute",
89
+ "after:inset-y-0",
90
+ "after:left-0",
91
+ "after:w-0.5",
92
+ "after:-translate-x-1/2",
93
+ "after:content-[\"\"]",
94
+ "hover:after:bg-gray-9",
95
+ "data-resizing:after:bg-black",
96
+ "dark:data-resizing:after:bg-white",
97
+ "hover:[anchor-name:--data-table-resize-handle]",
98
+ "data-resizing:[anchor-name:--data-table-resize-handle]"
99
+ ], className)
100
+ };
101
+ const element = useRender({
102
+ render,
103
+ defaultTagName: "div",
104
+ ref: [handleRef, ref ?? null],
105
+ props: mergeProps(baseProps, rest)
106
+ });
107
+ return header.column.getCanResize() ? /* @__PURE__ */ jsxs(Fragment, { children: [element, /* @__PURE__ */ jsx(InteractionShield, {
108
+ active: isResizing,
109
+ cursor: "col-resize"
110
+ })] }) : null;
111
+ };
112
+ DataTableResizeHandle.displayName = "DataTable.ResizeHandle";
113
+ //#endregion
114
+ export { DataTableResizeHandle };
115
+
116
+ //# sourceMappingURL=data-table-resize-handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-resize-handle.js","names":[],"sources":["../../../../src/components/data-table/resize/data-table-resize-handle.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { InteractionShield } from '@lucasbernardosn/react-ui/utilities/interaction-shield';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport type { HeaderWith } from '../../../types';\nimport { useDataTableResizeScroll } from './use-data-table-resize-scroll';\n\nexport type DataTableResizeHandleProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'div'>,\n {\n /** O header da coluna. Exige `columnSizingFeature` e `columnResizingFeature`. */\n header: HeaderWith<\n TFeatures,\n TData,\n 'columnResizingFeature' | 'columnSizingFeature'\n >;\n }\n>;\n\n/**\n * Área de agarre para redimensionar uma coluna, sobre a linha vertical do fim do header (que\n * precisa ser `relative`). Arrastar redimensiona; duplo clique devolve a coluna ao tamanho\n * definido.\n *\n * A caixa tem largura zero, e a área de agarre é um `::before` transparente de 12px centrado na\n * linha, metade sobre a coluna vizinha; na última coluna e antes de uma fixada do fim, toda do\n * lado de dentro. No repouso não aparece; no hover e no arrasto, o handle vira a âncora da\n * linha-guia, que a `DataTable.ScrollArea` desenha na altura toda da tabela.\n * Quando a borda chega à beira de uma fixada do fim ou ao fim da área visível, a rolagem\n * acompanha o arrasto. Numa coluna que não redimensiona (`enableResizing: false`), não\n * renderiza.\n *\n * Durante o arrasto, o `InteractionShield` do `ui` cobre a página: nada, dentro ou fora da\n * tabela, reage ao ponteiro, o cursor de resize vale em toda parte, e o texto não é selecionado.\n * A roda do mouse, por cima dele, não rola a tabela.\n *\n * Exige `columnResizeMode: 'onChange'` na tabela. Com o padrão do TanStack, `'onEnd'`, o tamanho\n * só muda ao soltar: no arrasto nada anda na tela (nem a coluna, nem o handle, nem a guia), e a\n * coluna pula no fim.\n *\n * @example\n * ```tsx\n * const table = useTable({ features, columns, data, columnResizeMode: 'onChange' });\n *\n * <DataTable.HeaderCell header={header}>\n * <DataTable.HeaderContent header={header} />\n * <DataTable.ResizeHandle header={header} />\n * </DataTable.HeaderCell>\n * ```\n */\nexport const DataTableResizeHandle = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableResizeHandleProps<TFeatures, TData>,\n) => {\n const { header, render, className, ref, ...rest } = props;\n\n const handleRef = useRef<HTMLDivElement>(null);\n\n /**\n * O atom do resize muda a cada tick do arrasto, mas o booleano só no começo e no fim: o handle\n * re-renderiza duas vezes por arrasto, e só o da coluna arrastada.\n */\n const isResizing = useSelector(header.column.table.atoms.columnResizing, () =>\n header.column.getIsResizing(),\n );\n\n useDataTableResizeScroll(header.column.table, isResizing, handleRef);\n\n const onResizeStart = header.getResizeHandler();\n\n /**\n * O duplo clique pelo `detail` do `mousedown`, que conta os cliques, e não pelo `dblclick`: o\n * arrasto começa no primeiro `mousedown`, o shield cobre o handle, e o `mouseup` cai nele. O\n * navegador então não manda o `click` nem o `dblclick` ao handle.\n */\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (event.detail === 2) {\n header.column.resetSize();\n\n return;\n }\n\n onResizeStart(event);\n };\n\n const baseProps = {\n 'data-component': 'DataTable.ResizeHandle',\n 'data-resizing': isResizing ? '' : undefined,\n // Só ponteiro: sem resize por teclado, um `separator` prometeria teclas que não existem.\n 'aria-hidden': true,\n onMouseDown: handleMouseDown,\n onTouchStart: onResizeStart,\n className: mergeTwClassNames(\n [\n // Sobre a linha vertical: o `right-0` é o fim do padding, e a borda de 1px que o\n // `divide-x` põe na célula vem logo depois. A última da linha não tem borda, e o\n // `right-px` põe o handle no mesmo ponto em relação ao fim dela. Antes de uma fixada do\n // fim, a célula também perde a borda, mas a linha passa a ser a da fixada, logo depois:\n // o `right-0` continua certo. Pela posição no DOM, com os seletores das bordas da\n // `DataTable.HeaderRow`, o handle e a borda não têm como discordar.\n 'absolute',\n 'top-0',\n 'right-0',\n 'in-[[role=columnheader]:last-child]:right-px',\n 'z-10',\n\n 'h-full',\n\n 'cursor-col-resize',\n // Com um menu aberto no gatilho da célula, o backdrop do Base UI deixa um recorte do\n // tamanho do gatilho, e a metade de dentro da área de agarre cairia nele: o hover acenderia\n // a linha-guia com o menu aberto.\n 'in-[[role=columnheader]:has([data-popup-open])]:pointer-events-none',\n // Sem isto, o arrasto no toque rola a página em vez de redimensionar.\n 'touch-none',\n 'select-none',\n\n // Área de agarre centrada na linha. Conteúdo recortado não recebe clique, então nada\n // entre o handle e o header pode ter `overflow: hidden`.\n 'before:absolute',\n 'before:top-0',\n 'before:right-0',\n 'before:h-full',\n 'before:w-3',\n 'before:translate-x-1.5',\n 'before:content-[\"\"]',\n\n // Onde a metade de fora não serve, os 12px ficam todos do lado de dentro. Na última da\n // linha, ela passaria do fim da tabela e acenderia a barra de rolagem horizontal sem\n // haver o que rolar; antes de uma fixada do fim, ficaria por baixo dela, sem pegar o\n // clique.\n 'in-[[role=columnheader]:last-child]:before:translate-x-0',\n 'in-[[role=columnheader]:has(+[data-pinned=end])]:before:translate-x-0',\n\n // A linha de 2px no cabeçalho, sobre a borda e 1px antes dela, no hover e no arrasto. Onde\n // há anchor positioning, a linha-guia cobre esta no mesmo lugar e segue pelo corpo; sem\n // ele, fica só esta.\n 'after:absolute',\n 'after:inset-y-0',\n 'after:left-0',\n 'after:w-0.5',\n 'after:-translate-x-1/2',\n 'after:content-[\"\"]',\n 'hover:after:bg-gray-9',\n 'data-resizing:after:bg-black',\n 'dark:data-resizing:after:bg-white',\n\n // A âncora da linha-guia (ver `DataTable.ScrollArea`), no hover e no arrasto. Um nome só\n // basta: no arrasto, o shield cobre os outros handles, e nenhum fica em hover junto com\n // o arrastado. Com o nome repetido, a guia iria para o último.\n 'hover:[anchor-name:--data-table-resize-handle]',\n 'data-resizing:[anchor-name:--data-table-resize-handle]',\n ],\n className,\n ),\n };\n\n const element = useRender({\n render,\n defaultTagName: 'div',\n ref: [handleRef, ref ?? null],\n props: mergeProps(baseProps, rest),\n });\n\n return header.column.getCanResize() ? (\n <>\n {element}\n <InteractionShield\n active={isResizing}\n cursor=\"col-resize\"\n />\n </>\n ) : null;\n};\n\nDataTableResizeHandle.displayName = 'DataTable.ResizeHandle';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAa,yBAIX,UACG;CACH,MAAM,EAAE,QAAQ,QAAQ,WAAW,KAAK,GAAG,SAAS;CAEpD,MAAM,YAAY,OAAuB,IAAI;;;;;CAM7C,MAAM,aAAa,YAAY,OAAO,OAAO,MAAM,MAAM,sBACvD,OAAO,OAAO,cAAc,CAC9B;CAEA,yBAAyB,OAAO,OAAO,OAAO,YAAY,SAAS;CAEnE,MAAM,gBAAgB,OAAO,iBAAiB;;;;;;CAO9C,MAAM,mBAAmB,UAA4C;EACnE,IAAI,MAAM,WAAW,GAAG;GACtB,OAAO,OAAO,UAAU;GAExB;EACF;EAEA,cAAc,KAAK;CACrB;CAEA,MAAM,YAAY;EAChB,kBAAkB;EAClB,iBAAiB,aAAa,KAAK,KAAA;EAEnC,eAAe;EACf,aAAa;EACb,cAAc;EACd,WAAW,kBACT;GAOE;GACA;GACA;GACA;GACA;GAEA;GAEA;GAIA;GAEA;GACA;GAIA;GACA;GACA;GACA;GACA;GACA;GACA;GAMA;GACA;GAKA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAKA;GACA;EACF,GACA,SACF;CACF;CAEA,MAAM,UAAU,UAAU;EACxB;EACA,gBAAgB;EAChB,KAAK,CAAC,WAAW,OAAO,IAAI;EAC5B,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;CAED,OAAO,OAAO,OAAO,aAAa,IAChC,qBAAA,UAAA,EAAA,UAAA,CACG,SACD,oBAAC,mBAAD;EACE,QAAQ;EACR,QAAO;CACR,CAAA,CACD,EAAA,CAAA,IACA;AACN;AAEA,sBAAsB,cAAc"}
@@ -0,0 +1,18 @@
1
+ import { RowData, Table, TableFeatures } from "@tanstack/react-table";
2
+ import React from "react";
3
+ //#region src/components/data-table/resize/use-data-table-resize-scroll.d.ts
4
+ /**
5
+ * No arrasto do resize, a rolagem acompanha a borda da coluna quando ela chega à beira de uma
6
+ * fixada do fim ou ao fim da área visível: a borda para ali, e as colunas de antes andam para a
7
+ * esquerda. Sem isto, a coluna cresceria por baixo da fixada, ou fora da vista, e nada mudaria na
8
+ * tela enquanto o ponteiro anda. Coluna fixada fica de fora: a borda dela não sai da vista.
9
+ *
10
+ * Assina o store só durante o arrasto, fora do React, e mede numa microtarefa: ela roda depois de
11
+ * todas as assinaturas da mesma mudança, inclusive a do `DataTable.Root`, que escreve o template
12
+ * das colunas, e antes da pintura. A medida já tem a largura nova, e a borda não chega a aparecer
13
+ * além da beira. O viewport e as fixadas do fim são lidos no começo do arrasto: o pinning não muda
14
+ * no meio dele.
15
+ */
16
+ export declare const useDataTableResizeScroll: <TFeatures extends TableFeatures, TData extends RowData>(table: Table<TFeatures, TData>, isResizing: boolean, ref: React.RefObject<HTMLElement | null>) => void;
17
+ //#endregion
18
+ //# sourceMappingURL=use-data-table-resize-scroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-data-table-resize-scroll.d.ts","names":[],"sources":["../../../../src/components/data-table/resize/use-data-table-resize-scroll.ts"],"mappings":";;;;;;;;;;;;;;;qBAiBa,2BACX,kBAAkB,eAClB,cAAc,SAEd,OAAO,MAAM,WAAW,QACxB,qBACA,KAAK,MAAM,UAAU"}