@lucasbernardosn/react-table 0.0.0-stage → 0.1.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 (267) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_virtual/_rolldown/runtime.js +13 -0
  3. package/dist/components/column-menu/column-menu-check.d.ts +8 -0
  4. package/dist/components/column-menu/column-menu-check.d.ts.map +1 -0
  5. package/dist/components/column-menu/column-menu-check.js +17 -0
  6. package/dist/components/column-menu/column-menu-check.js.map +1 -0
  7. package/dist/components/column-menu/column-menu-hide-item.d.ts +23 -0
  8. package/dist/components/column-menu/column-menu-hide-item.d.ts.map +1 -0
  9. package/dist/components/column-menu/column-menu-hide-item.js +28 -0
  10. package/dist/components/column-menu/column-menu-hide-item.js.map +1 -0
  11. package/dist/components/column-menu/column-menu-labels.d.ts +21 -0
  12. package/dist/components/column-menu/column-menu-labels.d.ts.map +1 -0
  13. package/dist/components/column-menu/column-menu-labels.js +14 -0
  14. package/dist/components/column-menu/column-menu-labels.js.map +1 -0
  15. package/dist/components/column-menu/column-menu-pin-items.d.ts +25 -0
  16. package/dist/components/column-menu/column-menu-pin-items.d.ts.map +1 -0
  17. package/dist/components/column-menu/column-menu-pin-items.js +65 -0
  18. package/dist/components/column-menu/column-menu-pin-items.js.map +1 -0
  19. package/dist/components/column-menu/column-menu-popup.d.ts +39 -0
  20. package/dist/components/column-menu/column-menu-popup.d.ts.map +1 -0
  21. package/dist/components/column-menu/column-menu-popup.js +66 -0
  22. package/dist/components/column-menu/column-menu-popup.js.map +1 -0
  23. package/dist/components/column-menu/column-menu-root.d.ts +34 -0
  24. package/dist/components/column-menu/column-menu-root.d.ts.map +1 -0
  25. package/dist/components/column-menu/column-menu-root.js +36 -0
  26. package/dist/components/column-menu/column-menu-root.js.map +1 -0
  27. package/dist/components/column-menu/column-menu-sort-items.d.ts +29 -0
  28. package/dist/components/column-menu/column-menu-sort-items.d.ts.map +1 -0
  29. package/dist/components/column-menu/column-menu-sort-items.js +61 -0
  30. package/dist/components/column-menu/column-menu-sort-items.js.map +1 -0
  31. package/dist/components/column-menu/column-menu-trigger.d.ts +23 -0
  32. package/dist/components/column-menu/column-menu-trigger.d.ts.map +1 -0
  33. package/dist/components/column-menu/column-menu-trigger.js +38 -0
  34. package/dist/components/column-menu/column-menu-trigger.js.map +1 -0
  35. package/dist/components/column-menu/index.d.ts +2 -0
  36. package/dist/components/column-menu/index.js +2 -0
  37. package/dist/components/column-menu/index.parts.d.ts +13 -0
  38. package/dist/components/column-menu/index.parts.d.ts.map +1 -0
  39. package/dist/components/column-menu/index.parts.js +20 -0
  40. package/dist/components/column-menu/index.parts.js.map +1 -0
  41. package/dist/components/columns-panel/columns-panel-item.d.ts +31 -0
  42. package/dist/components/columns-panel/columns-panel-item.d.ts.map +1 -0
  43. package/dist/components/columns-panel/columns-panel-item.js +92 -0
  44. package/dist/components/columns-panel/columns-panel-item.js.map +1 -0
  45. package/dist/components/columns-panel/columns-panel-root.d.ts +51 -0
  46. package/dist/components/columns-panel/columns-panel-root.d.ts.map +1 -0
  47. package/dist/components/columns-panel/columns-panel-root.js +134 -0
  48. package/dist/components/columns-panel/columns-panel-root.js.map +1 -0
  49. package/dist/components/columns-panel/get-columns-panel-column-order.d.ts +16 -0
  50. package/dist/components/columns-panel/get-columns-panel-column-order.d.ts.map +1 -0
  51. package/dist/components/columns-panel/get-columns-panel-column-order.js +24 -0
  52. package/dist/components/columns-panel/get-columns-panel-column-order.js.map +1 -0
  53. package/dist/components/columns-panel/index.d.ts +2 -0
  54. package/dist/components/columns-panel/index.js +2 -0
  55. package/dist/components/columns-panel/index.parts.d.ts +8 -0
  56. package/dist/components/columns-panel/index.parts.d.ts.map +1 -0
  57. package/dist/components/columns-panel/index.parts.js +12 -0
  58. package/dist/components/columns-panel/index.parts.js.map +1 -0
  59. package/dist/components/data-table/body/data-table-body.d.ts +58 -0
  60. package/dist/components/data-table/body/data-table-body.d.ts.map +1 -0
  61. package/dist/components/data-table/body/data-table-body.js +99 -0
  62. package/dist/components/data-table/body/data-table-body.js.map +1 -0
  63. package/dist/components/data-table/body/data-table-cell.d.ts +26 -0
  64. package/dist/components/data-table/body/data-table-cell.d.ts.map +1 -0
  65. package/dist/components/data-table/body/data-table-cell.js +80 -0
  66. package/dist/components/data-table/body/data-table-cell.js.map +1 -0
  67. package/dist/components/data-table/body/data-table-empty.d.ts +38 -0
  68. package/dist/components/data-table/body/data-table-empty.d.ts.map +1 -0
  69. package/dist/components/data-table/body/data-table-empty.js +71 -0
  70. package/dist/components/data-table/body/data-table-empty.js.map +1 -0
  71. package/dist/components/data-table/body/data-table-row-focus.d.ts +32 -0
  72. package/dist/components/data-table/body/data-table-row-focus.d.ts.map +1 -0
  73. package/dist/components/data-table/body/data-table-row-focus.js +58 -0
  74. package/dist/components/data-table/body/data-table-row-focus.js.map +1 -0
  75. package/dist/components/data-table/body/data-table-row.d.ts +67 -0
  76. package/dist/components/data-table/body/data-table-row.d.ts.map +1 -0
  77. package/dist/components/data-table/body/data-table-row.js +150 -0
  78. package/dist/components/data-table/body/data-table-row.js.map +1 -0
  79. package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts +19 -0
  80. package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts.map +1 -0
  81. package/dist/components/data-table/body/use-data-table-row-focus-recovery.js +64 -0
  82. package/dist/components/data-table/body/use-data-table-row-focus-recovery.js.map +1 -0
  83. package/dist/components/data-table/header/data-table-header-button.d.ts +25 -0
  84. package/dist/components/data-table/header/data-table-header-button.d.ts.map +1 -0
  85. package/dist/components/data-table/header/data-table-header-button.js +57 -0
  86. package/dist/components/data-table/header/data-table-header-button.js.map +1 -0
  87. package/dist/components/data-table/header/data-table-header-cell.d.ts +34 -0
  88. package/dist/components/data-table/header/data-table-header-cell.d.ts.map +1 -0
  89. package/dist/components/data-table/header/data-table-header-cell.js +97 -0
  90. package/dist/components/data-table/header/data-table-header-cell.js.map +1 -0
  91. package/dist/components/data-table/header/data-table-header-content.d.ts +21 -0
  92. package/dist/components/data-table/header/data-table-header-content.d.ts.map +1 -0
  93. package/dist/components/data-table/header/data-table-header-content.js +37 -0
  94. package/dist/components/data-table/header/data-table-header-content.js.map +1 -0
  95. package/dist/components/data-table/header/data-table-header-row.d.ts +15 -0
  96. package/dist/components/data-table/header/data-table-header-row.d.ts.map +1 -0
  97. package/dist/components/data-table/header/data-table-header-row.js +28 -0
  98. package/dist/components/data-table/header/data-table-header-row.js.map +1 -0
  99. package/dist/components/data-table/header/data-table-header.d.ts +46 -0
  100. package/dist/components/data-table/header/data-table-header.d.ts.map +1 -0
  101. package/dist/components/data-table/header/data-table-header.js +80 -0
  102. package/dist/components/data-table/header/data-table-header.js.map +1 -0
  103. package/dist/components/data-table/index.d.ts +2 -0
  104. package/dist/components/data-table/index.js +2 -0
  105. package/dist/components/data-table/index.parts.d.ts +32 -0
  106. package/dist/components/data-table/index.parts.d.ts.map +1 -0
  107. package/dist/components/data-table/index.parts.js +60 -0
  108. package/dist/components/data-table/index.parts.js.map +1 -0
  109. package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts +16 -0
  110. package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts.map +1 -0
  111. package/dist/components/data-table/loading/get-data-table-loading-without-rows.js +18 -0
  112. package/dist/components/data-table/loading/get-data-table-loading-without-rows.js.map +1 -0
  113. package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts +16 -0
  114. package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts.map +1 -0
  115. package/dist/components/data-table/loading/use-data-table-loading-inert.js +54 -0
  116. package/dist/components/data-table/loading/use-data-table-loading-inert.js.map +1 -0
  117. package/dist/components/data-table/loading/use-data-table-loading.d.ts +13 -0
  118. package/dist/components/data-table/loading/use-data-table-loading.d.ts.map +1 -0
  119. package/dist/components/data-table/loading/use-data-table-loading.js +40 -0
  120. package/dist/components/data-table/loading/use-data-table-loading.js.map +1 -0
  121. package/dist/components/data-table/pagination/data-table-page-button.d.ts +45 -0
  122. package/dist/components/data-table/pagination/data-table-page-button.d.ts.map +1 -0
  123. package/dist/components/data-table/pagination/data-table-page-button.js +67 -0
  124. package/dist/components/data-table/pagination/data-table-page-button.js.map +1 -0
  125. package/dist/components/data-table/pagination/data-table-page-size-select.d.ts +47 -0
  126. package/dist/components/data-table/pagination/data-table-page-size-select.d.ts.map +1 -0
  127. package/dist/components/data-table/pagination/data-table-page-size-select.js +68 -0
  128. package/dist/components/data-table/pagination/data-table-page-size-select.js.map +1 -0
  129. package/dist/components/data-table/pagination/data-table-page-status.d.ts +43 -0
  130. package/dist/components/data-table/pagination/data-table-page-status.d.ts.map +1 -0
  131. package/dist/components/data-table/pagination/data-table-page-status.js +48 -0
  132. package/dist/components/data-table/pagination/data-table-page-status.js.map +1 -0
  133. package/dist/components/data-table/pagination/data-table-pagination.d.ts +38 -0
  134. package/dist/components/data-table/pagination/data-table-pagination.d.ts.map +1 -0
  135. package/dist/components/data-table/pagination/data-table-pagination.js +87 -0
  136. package/dist/components/data-table/pagination/data-table-pagination.js.map +1 -0
  137. package/dist/components/data-table/pagination/data-table-row-range.d.ts +49 -0
  138. package/dist/components/data-table/pagination/data-table-row-range.d.ts.map +1 -0
  139. package/dist/components/data-table/pagination/data-table-row-range.js +63 -0
  140. package/dist/components/data-table/pagination/data-table-row-range.js.map +1 -0
  141. package/dist/components/data-table/pagination/data-table-selected-count.d.ts +37 -0
  142. package/dist/components/data-table/pagination/data-table-selected-count.d.ts.map +1 -0
  143. package/dist/components/data-table/pagination/data-table-selected-count.js +44 -0
  144. package/dist/components/data-table/pagination/data-table-selected-count.js.map +1 -0
  145. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts +15 -0
  146. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts.map +1 -0
  147. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js +38 -0
  148. package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js.map +1 -0
  149. package/dist/components/data-table/resize/data-table-resize-handle.d.ts +48 -0
  150. package/dist/components/data-table/resize/data-table-resize-handle.d.ts.map +1 -0
  151. package/dist/components/data-table/resize/data-table-resize-handle.js +115 -0
  152. package/dist/components/data-table/resize/data-table-resize-handle.js.map +1 -0
  153. package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts +18 -0
  154. package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts.map +1 -0
  155. package/dist/components/data-table/resize/use-data-table-resize-scroll.js +55 -0
  156. package/dist/components/data-table/resize/use-data-table-resize-scroll.js.map +1 -0
  157. package/dist/components/data-table/root/data-table-grid-classes.d.ts +10 -0
  158. package/dist/components/data-table/root/data-table-grid-classes.d.ts.map +1 -0
  159. package/dist/components/data-table/root/data-table-grid-classes.js +22 -0
  160. package/dist/components/data-table/root/data-table-grid-classes.js.map +1 -0
  161. package/dist/components/data-table/root/data-table-root.d.ts +41 -0
  162. package/dist/components/data-table/root/data-table-root.d.ts.map +1 -0
  163. package/dist/components/data-table/root/data-table-root.js +72 -0
  164. package/dist/components/data-table/root/data-table-root.js.map +1 -0
  165. package/dist/components/data-table/root/data-table-scroll-area.d.ts +21 -0
  166. package/dist/components/data-table/root/data-table-scroll-area.d.ts.map +1 -0
  167. package/dist/components/data-table/root/data-table-scroll-area.js +127 -0
  168. package/dist/components/data-table/root/data-table-scroll-area.js.map +1 -0
  169. package/dist/components/data-table/root/get-data-table-column-layout.d.ts +45 -0
  170. package/dist/components/data-table/root/get-data-table-column-layout.d.ts.map +1 -0
  171. package/dist/components/data-table/root/get-data-table-column-layout.js +55 -0
  172. package/dist/components/data-table/root/get-data-table-column-layout.js.map +1 -0
  173. package/dist/components/data-table/root/get-data-table-column-pinning.d.ts +46 -0
  174. package/dist/components/data-table/root/get-data-table-column-pinning.d.ts.map +1 -0
  175. package/dist/components/data-table/root/get-data-table-column-pinning.js +46 -0
  176. package/dist/components/data-table/root/get-data-table-column-pinning.js.map +1 -0
  177. package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts +13 -0
  178. package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts.map +1 -0
  179. package/dist/components/data-table/root/get-data-table-scroll-parent.js +20 -0
  180. package/dist/components/data-table/root/get-data-table-scroll-parent.js.map +1 -0
  181. package/dist/components/data-table/root/use-data-table-column-layout.d.ts +25 -0
  182. package/dist/components/data-table/root/use-data-table-column-layout.d.ts.map +1 -0
  183. package/dist/components/data-table/root/use-data-table-column-layout.js +106 -0
  184. package/dist/components/data-table/root/use-data-table-column-layout.js.map +1 -0
  185. package/dist/components/data-table/root/use-data-table-header-offset.d.ts +15 -0
  186. package/dist/components/data-table/root/use-data-table-header-offset.d.ts.map +1 -0
  187. package/dist/components/data-table/root/use-data-table-header-offset.js +35 -0
  188. package/dist/components/data-table/root/use-data-table-header-offset.js.map +1 -0
  189. package/dist/components/data-table/selection/data-table-row-checkbox.d.ts +33 -0
  190. package/dist/components/data-table/selection/data-table-row-checkbox.d.ts.map +1 -0
  191. package/dist/components/data-table/selection/data-table-row-checkbox.js +50 -0
  192. package/dist/components/data-table/selection/data-table-row-checkbox.js.map +1 -0
  193. package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts +31 -0
  194. package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts.map +1 -0
  195. package/dist/components/data-table/selection/data-table-select-all-checkbox.js +44 -0
  196. package/dist/components/data-table/selection/data-table-select-all-checkbox.js.map +1 -0
  197. package/dist/components/data-table/selection/selection-column-def.d.ts +54 -0
  198. package/dist/components/data-table/selection/selection-column-def.d.ts.map +1 -0
  199. package/dist/components/data-table/selection/selection-column-def.js +55 -0
  200. package/dist/components/data-table/selection/selection-column-def.js.map +1 -0
  201. package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts +26 -0
  202. package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts.map +1 -0
  203. package/dist/components/data-table/sorting/data-table-sort-indicator.js +64 -0
  204. package/dist/components/data-table/sorting/data-table-sort-indicator.js.map +1 -0
  205. package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts +31 -0
  206. package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts.map +1 -0
  207. package/dist/components/data-table/sorting/data-table-sort-trigger.js +46 -0
  208. package/dist/components/data-table/sorting/data-table-sort-trigger.js.map +1 -0
  209. package/dist/components/data-table/toolbar/data-table-density-select.d.ts +39 -0
  210. package/dist/components/data-table/toolbar/data-table-density-select.d.ts.map +1 -0
  211. package/dist/components/data-table/toolbar/data-table-density-select.js +60 -0
  212. package/dist/components/data-table/toolbar/data-table-density-select.js.map +1 -0
  213. package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts +47 -0
  214. package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts.map +1 -0
  215. package/dist/components/data-table/toolbar/data-table-sort-column-select.js +78 -0
  216. package/dist/components/data-table/toolbar/data-table-sort-column-select.js.map +1 -0
  217. package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts +40 -0
  218. package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts.map +1 -0
  219. package/dist/components/data-table/toolbar/data-table-sort-direction-select.js +66 -0
  220. package/dist/components/data-table/toolbar/data-table-sort-direction-select.js.map +1 -0
  221. package/dist/features/active-row/active-row-feature.d.ts +22 -0
  222. package/dist/features/active-row/active-row-feature.d.ts.map +1 -0
  223. package/dist/features/active-row/active-row-feature.js +55 -0
  224. package/dist/features/active-row/active-row-feature.js.map +1 -0
  225. package/dist/features/active-row/active-row-feature.types.d.ts +64 -0
  226. package/dist/features/active-row/active-row-feature.types.d.ts.map +1 -0
  227. package/dist/features/active-row/active-row-feature.types.js +0 -0
  228. package/dist/features/column-alignment/column-alignment-feature.d.ts +23 -0
  229. package/dist/features/column-alignment/column-alignment-feature.d.ts.map +1 -0
  230. package/dist/features/column-alignment/column-alignment-feature.js +34 -0
  231. package/dist/features/column-alignment/column-alignment-feature.js.map +1 -0
  232. package/dist/features/column-alignment/column-alignment-feature.types.d.ts +34 -0
  233. package/dist/features/column-alignment/column-alignment-feature.types.d.ts.map +1 -0
  234. package/dist/features/column-alignment/column-alignment-feature.types.js +0 -0
  235. package/dist/features/index.d.ts +9 -0
  236. package/dist/features/index.js +5 -0
  237. package/dist/features/loading/loading-feature.d.ts +30 -0
  238. package/dist/features/loading/loading-feature.d.ts.map +1 -0
  239. package/dist/features/loading/loading-feature.js +48 -0
  240. package/dist/features/loading/loading-feature.js.map +1 -0
  241. package/dist/features/loading/loading-feature.types.d.ts +50 -0
  242. package/dist/features/loading/loading-feature.types.d.ts.map +1 -0
  243. package/dist/features/loading/loading-feature.types.js +0 -0
  244. package/dist/features/row-density/row-density-feature.d.ts +26 -0
  245. package/dist/features/row-density/row-density-feature.d.ts.map +1 -0
  246. package/dist/features/row-density/row-density-feature.js +44 -0
  247. package/dist/features/row-density/row-density-feature.js.map +1 -0
  248. package/dist/features/row-density/row-density-feature.types.d.ts +53 -0
  249. package/dist/features/row-density/row-density-feature.types.d.ts.map +1 -0
  250. package/dist/features/row-density/row-density-feature.types.js +0 -0
  251. package/dist/types/index.d.ts +2 -0
  252. package/dist/types/index.js +0 -0
  253. package/dist/types/table-with.d.ts +96 -0
  254. package/dist/types/table-with.d.ts.map +1 -0
  255. package/dist/types/table-with.js +0 -0
  256. package/dist/utils/get-default-column-label.d.ts +17 -0
  257. package/dist/utils/get-default-column-label.d.ts.map +1 -0
  258. package/dist/utils/get-default-column-label.js +18 -0
  259. package/dist/utils/get-default-column-label.js.map +1 -0
  260. package/dist/utils/has-feature.d.ts +54 -0
  261. package/dist/utils/has-feature.d.ts.map +1 -0
  262. package/dist/utils/has-feature.js +55 -0
  263. package/dist/utils/has-feature.js.map +1 -0
  264. package/dist/utils/index.d.ts +3 -0
  265. package/dist/utils/index.js +3 -0
  266. package/package.json +80 -3
  267. package/README.md +0 -3
@@ -0,0 +1,67 @@
1
+ import { CaretDoubleLeftIcon, CaretDoubleRightIcon, CaretLeftIcon, CaretRightIcon } from "@phosphor-icons/react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useSelector } from "@tanstack/react-store";
4
+ import { IconButton } from "@lucasbernardosn/react-ui/buttons/icon-button";
5
+ //#region src/components/data-table/pagination/data-table-page-button.tsx
6
+ const PAGE_LABELS = {
7
+ first: "Primeira página",
8
+ previous: "Página anterior",
9
+ next: "Próxima página",
10
+ last: "Última página"
11
+ };
12
+ const PAGE_ICONS = {
13
+ first: /* @__PURE__ */ jsx(CaretDoubleLeftIcon, {}),
14
+ previous: /* @__PURE__ */ jsx(CaretLeftIcon, {}),
15
+ next: /* @__PURE__ */ jsx(CaretRightIcon, {}),
16
+ last: /* @__PURE__ */ jsx(CaretDoubleRightIcon, {})
17
+ };
18
+ /**
19
+ * O botão que leva a outra página: a primeira, a anterior, a próxima ou a última. Fica
20
+ * desabilitado quando não há para onde ir. Sem o total de páginas (`pageCount: -1` na paginação
21
+ * pela API), a próxima continua habilitada, e a última, não.
22
+ *
23
+ * As props do `IconButton` passam adiante, como `variant` e `size`.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <DataTable.PageButton
28
+ * table={table}
29
+ * page="next"
30
+ * />
31
+ * ```
32
+ */
33
+ const DataTablePageButton = (props) => {
34
+ const { table, page, icon, onClick, ...rest } = props;
35
+ /**
36
+ * Re-renderiza quando o botão passa a ter ou deixa de ter para onde ir. O store, e não só o
37
+ * atom da paginação: o total de páginas também muda com as linhas.
38
+ */
39
+ const isDisabled = useSelector(table.store, () => {
40
+ if (page === "first" || page === "previous") return !table.getCanPreviousPage();
41
+ return page === "next" ? !table.getCanNextPage() : !table.getCanLastPage();
42
+ });
43
+ const goToPage = () => {
44
+ if (page === "first") table.firstPage();
45
+ else if (page === "previous") table.previousPage();
46
+ else if (page === "next") table.nextPage();
47
+ else table.lastPage();
48
+ };
49
+ return /* @__PURE__ */ jsx(IconButton, {
50
+ "data-component": "DataTable.PageButton",
51
+ "data-page": page,
52
+ "aria-label": PAGE_LABELS[page],
53
+ icon: icon ?? PAGE_ICONS[page],
54
+ variant: "outline",
55
+ disabled: isDisabled,
56
+ onClick: (event) => {
57
+ onClick?.(event);
58
+ if (!event.defaultPrevented) goToPage();
59
+ },
60
+ ...rest
61
+ });
62
+ };
63
+ DataTablePageButton.displayName = "DataTable.PageButton";
64
+ //#endregion
65
+ export { DataTablePageButton };
66
+
67
+ //# sourceMappingURL=data-table-page-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-page-button.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-page-button.tsx"],"sourcesContent":["import {\n IconButton,\n type IconButtonProps,\n} from '@lucasbernardosn/react-ui/buttons/icon-button';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport {\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretLeftIcon,\n CaretRightIcon,\n} from '@phosphor-icons/react';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\n\n/** Para onde o botão leva. */\nexport type DataTablePageButtonPage = 'first' | 'previous' | 'next' | 'last';\n\nexport type DataTablePageButtonProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Omit<IconButtonProps, 'icon' | 'aria-label'>,\n {\n /** A tabela. Exige `rowPaginationFeature`. */\n table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;\n /** Para onde o botão leva: a primeira página, a anterior, a próxima ou a última. */\n page: DataTablePageButtonPage;\n /**\n * O ícone.\n * @default um caret por página: duplo nas pontas, simples na anterior e na próxima\n */\n icon?: IconButtonProps['icon'];\n /**\n * O que o botão faz.\n * @default 'Primeira página', 'Página anterior', 'Próxima página' ou 'Última página'\n */\n 'aria-label'?: string;\n }\n>;\n\nconst PAGE_LABELS: Record<DataTablePageButtonPage, string> = {\n first: 'Primeira página',\n previous: 'Página anterior',\n next: 'Próxima página',\n last: 'Última página',\n};\n\nconst PAGE_ICONS: Record<DataTablePageButtonPage, IconButtonProps['icon']> = {\n first: <CaretDoubleLeftIcon />,\n previous: <CaretLeftIcon />,\n next: <CaretRightIcon />,\n last: <CaretDoubleRightIcon />,\n};\n\n/**\n * O botão que leva a outra página: a primeira, a anterior, a próxima ou a última. Fica\n * desabilitado quando não há para onde ir. Sem o total de páginas (`pageCount: -1` na paginação\n * pela API), a próxima continua habilitada, e a última, não.\n *\n * As props do `IconButton` passam adiante, como `variant` e `size`.\n *\n * @example\n * ```tsx\n * <DataTable.PageButton\n * table={table}\n * page=\"next\"\n * />\n * ```\n */\nexport const DataTablePageButton = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTablePageButtonProps<TFeatures, TData>,\n) => {\n const { table, page, icon, onClick, ...rest } = props;\n\n /**\n * Re-renderiza quando o botão passa a ter ou deixa de ter para onde ir. O store, e não só o\n * atom da paginação: o total de páginas também muda com as linhas.\n */\n const isDisabled = useSelector(table.store, () => {\n if (page === 'first' || page === 'previous') {\n return !table.getCanPreviousPage();\n }\n\n return page === 'next' ? !table.getCanNextPage() : !table.getCanLastPage();\n });\n\n const goToPage = () => {\n if (page === 'first') {\n table.firstPage();\n } else if (page === 'previous') {\n table.previousPage();\n } else if (page === 'next') {\n table.nextPage();\n } else {\n table.lastPage();\n }\n };\n\n return (\n <IconButton\n data-component=\"DataTable.PageButton\"\n data-page={page}\n aria-label={PAGE_LABELS[page]}\n icon={icon ?? PAGE_ICONS[page]}\n variant=\"outline\"\n disabled={isDisabled}\n // O `onClick` do app roda antes, e um `preventDefault()` nele cancela a troca de página.\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) {\n goToPage();\n }\n }}\n {...rest}\n />\n );\n};\n\nDataTablePageButton.displayName = 'DataTable.PageButton';\n"],"mappings":";;;;;AAyCA,MAAM,cAAuD;CAC3D,OAAO;CACP,UAAU;CACV,MAAM;CACN,MAAM;AACR;AAEA,MAAM,aAAuE;CAC3E,OAAO,oBAAC,qBAAD,CAAsB,CAAA;CAC7B,UAAU,oBAAC,eAAD,CAAgB,CAAA;CAC1B,MAAM,oBAAC,gBAAD,CAAiB,CAAA;CACvB,MAAM,oBAAC,sBAAD,CAAuB,CAAA;AAC/B;;;;;;;;;;;;;;;;AAiBA,MAAa,uBAIX,UACG;CACH,MAAM,EAAE,OAAO,MAAM,MAAM,SAAS,GAAG,SAAS;;;;;CAMhD,MAAM,aAAa,YAAY,MAAM,aAAa;EAChD,IAAI,SAAS,WAAW,SAAS,YAC/B,OAAO,CAAC,MAAM,mBAAmB;EAGnC,OAAO,SAAS,SAAS,CAAC,MAAM,eAAe,IAAI,CAAC,MAAM,eAAe;CAC3E,CAAC;CAED,MAAM,iBAAiB;EACrB,IAAI,SAAS,SACX,MAAM,UAAU;OACX,IAAI,SAAS,YAClB,MAAM,aAAa;OACd,IAAI,SAAS,QAClB,MAAM,SAAS;OAEf,MAAM,SAAS;CAEnB;CAEA,OACE,oBAAC,YAAD;EACE,kBAAe;EACf,aAAW;EACX,cAAY,YAAY;EACxB,MAAM,QAAQ,WAAW;EACzB,SAAQ;EACR,UAAU;EAEV,UAAU,UAAU;GAClB,UAAU,KAAK;GAEf,IAAI,CAAC,MAAM,kBACT,SAAS;EAEb;EACA,GAAI;CACL,CAAA;AAEL;AAEA,oBAAoB,cAAc"}
@@ -0,0 +1,47 @@
1
+ import { TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowData, TableFeatures } from "@tanstack/react-table";
4
+ import React from "react";
5
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
6
+ import { MergeOverride } from "@lucasbernardosn/utils";
7
+ //#region src/components/data-table/pagination/data-table-page-size-select.d.ts
8
+ export type DataTablePageSizeSelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<React.ComponentProps<'div'>, {
9
+ /** A tabela. Exige `rowPaginationFeature`. */
10
+ table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;
11
+ /**
12
+ * Os tamanhos oferecidos. O tamanho atual entra na lista mesmo fora dela.
13
+ * @default [10, 25, 50, 100]
14
+ */
15
+ options?: readonly number[];
16
+ /**
17
+ * O rótulo do select.
18
+ * @default 'Linhas por página'
19
+ */
20
+ label?: React.ReactNode;
21
+ /**
22
+ * O tamanho do select.
23
+ * @default 'sm'
24
+ */
25
+ size?: Select.RootProps<number>['size'];
26
+ }>;
27
+ /**
28
+ * O select de quantas linhas cada página mostra, com o rótulo ao lado. Trocar o tamanho chama o
29
+ * `table.setPageSize`, que mantém à vista a primeira linha da página atual.
30
+ *
31
+ * Renderiza o `Select` do `ui` por dentro; as props passam para o elemento em volta do rótulo e do
32
+ * trigger.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * <DataTable.PageSizeSelect
37
+ * table={table}
38
+ * options={[20, 50, 100]}
39
+ * />
40
+ * ```
41
+ */
42
+ export declare const DataTablePageSizeSelect: {
43
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTablePageSizeSelectProps<TFeatures, TData>): React.JSX.Element;
44
+ displayName: string;
45
+ };
46
+ //#endregion
47
+ //# sourceMappingURL=data-table-page-size-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-page-size-select.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-page-size-select.tsx"],"mappings":";;;;;;;YAQY,6BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,MAAM;;EAGJ,OAAO,UAAU,WAAW;;;;;EAK5B;;;;;EAKA,QAAQ,MAAM;;;;;EAKd,OAAO,OAAO;;;;;;;;;;;;;;;;;qBAqBL;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,6BAA6B,WAAW,SAAM,MAAA,IAAA"}
@@ -0,0 +1,68 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useSelector } from "@tanstack/react-store";
3
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
4
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
5
+ //#region src/components/data-table/pagination/data-table-page-size-select.tsx
6
+ const DEFAULT_PAGE_SIZE_OPTIONS = [
7
+ 10,
8
+ 25,
9
+ 50,
10
+ 100
11
+ ];
12
+ /**
13
+ * O select de quantas linhas cada página mostra, com o rótulo ao lado. Trocar o tamanho chama o
14
+ * `table.setPageSize`, que mantém à vista a primeira linha da página atual.
15
+ *
16
+ * Renderiza o `Select` do `ui` por dentro; as props passam para o elemento em volta do rótulo e do
17
+ * trigger.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <DataTable.PageSizeSelect
22
+ * table={table}
23
+ * options={[20, 50, 100]}
24
+ * />
25
+ * ```
26
+ */
27
+ const DataTablePageSizeSelect = (props) => {
28
+ const { table, options = DEFAULT_PAGE_SIZE_OPTIONS, label = "Linhas por página", size = "sm", className, ...rest } = props;
29
+ /** Re-renderiza quando o tamanho da página muda. */
30
+ const pageSize = useSelector(table.atoms.pagination, (pagination) => pagination.pageSize);
31
+ /** O tamanho atual entra na lista: sem ele, o trigger ficaria vazio. */
32
+ const items = (options.includes(pageSize) ? options : [...options, pageSize]).toSorted((a, b) => a - b).map((option) => ({
33
+ label: option.toLocaleString("pt-BR"),
34
+ value: option
35
+ }));
36
+ return /* @__PURE__ */ jsxs(Select.Root, {
37
+ size,
38
+ value: pageSize,
39
+ items,
40
+ onValueChange: (value) => {
41
+ if (value !== null) table.setPageSize(value);
42
+ },
43
+ children: [/* @__PURE__ */ jsxs("div", {
44
+ "data-component": "DataTable.PageSizeSelect",
45
+ className: mergeTwClassNames([
46
+ "flex",
47
+ "items-center",
48
+ "gap-2"
49
+ ], className),
50
+ ...rest,
51
+ children: [/* @__PURE__ */ jsx(Select.Label, {
52
+ className: "whitespace-nowrap font-normal text-gray-11",
53
+ children: label
54
+ }), /* @__PURE__ */ jsxs(Select.Trigger, { children: [/* @__PURE__ */ jsx(Select.Value, {}), /* @__PURE__ */ jsx(Select.Icon, {})] })]
55
+ }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
56
+ alignItemWithTrigger: false,
57
+ children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: items.map((item) => /* @__PURE__ */ jsxs(Select.Item, {
58
+ value: item.value,
59
+ children: [/* @__PURE__ */ jsx(Select.ItemIndicator, {}), /* @__PURE__ */ jsx(Select.ItemText, { children: item.label })]
60
+ }, item.value)) }) })
61
+ }) })]
62
+ });
63
+ };
64
+ DataTablePageSizeSelect.displayName = "DataTable.PageSizeSelect";
65
+ //#endregion
66
+ export { DataTablePageSizeSelect };
67
+
68
+ //# sourceMappingURL=data-table-page-size-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-page-size-select.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-page-size-select.tsx"],"sourcesContent":["import { Select } from '@lucasbernardosn/react-ui/collections/select';\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 DataTablePageSizeSelectProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n React.ComponentProps<'div'>,\n {\n /** A tabela. Exige `rowPaginationFeature`. */\n table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;\n /**\n * Os tamanhos oferecidos. O tamanho atual entra na lista mesmo fora dela.\n * @default [10, 25, 50, 100]\n */\n options?: readonly number[];\n /**\n * O rótulo do select.\n * @default 'Linhas por página'\n */\n label?: React.ReactNode;\n /**\n * O tamanho do select.\n * @default 'sm'\n */\n size?: Select.RootProps<number>['size'];\n }\n>;\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\n/**\n * O select de quantas linhas cada página mostra, com o rótulo ao lado. Trocar o tamanho chama o\n * `table.setPageSize`, que mantém à vista a primeira linha da página atual.\n *\n * Renderiza o `Select` do `ui` por dentro; as props passam para o elemento em volta do rótulo e do\n * trigger.\n *\n * @example\n * ```tsx\n * <DataTable.PageSizeSelect\n * table={table}\n * options={[20, 50, 100]}\n * />\n * ```\n */\nexport const DataTablePageSizeSelect = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTablePageSizeSelectProps<TFeatures, TData>,\n) => {\n const {\n table,\n options = DEFAULT_PAGE_SIZE_OPTIONS,\n label = 'Linhas por página',\n size = 'sm',\n className,\n ...rest\n } = props;\n\n /** Re-renderiza quando o tamanho da página muda. */\n const pageSize = useSelector(\n table.atoms.pagination,\n (pagination) => pagination.pageSize,\n );\n\n /** O tamanho atual entra na lista: sem ele, o trigger ficaria vazio. */\n const items = (options.includes(pageSize) ? options : [...options, pageSize])\n .toSorted((a, b) => a - b)\n .map((option) => ({\n label: option.toLocaleString('pt-BR'),\n value: option,\n }));\n\n return (\n <Select.Root<number>\n size={size}\n value={pageSize}\n items={items}\n onValueChange={(value) => {\n if (value !== null) {\n table.setPageSize(value);\n }\n }}\n >\n <div\n data-component=\"DataTable.PageSizeSelect\"\n className={mergeTwClassNames(\n ['flex', 'items-center', 'gap-2'],\n className,\n )}\n {...rest}\n >\n <Select.Label className=\"whitespace-nowrap font-normal text-gray-11\">\n {label}\n </Select.Label>\n\n <Select.Trigger>\n <Select.Value />\n <Select.Icon />\n </Select.Trigger>\n </div>\n\n <Select.Portal>\n <Select.Positioner alignItemWithTrigger={false}>\n <Select.Popup>\n <Select.List>\n {items.map((item) => (\n <Select.Item\n key={item.value}\n value={item.value}\n >\n <Select.ItemIndicator />\n <Select.ItemText>{item.label}</Select.ItemText>\n </Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n );\n};\n\nDataTablePageSizeSelect.displayName = 'DataTable.PageSizeSelect';\n"],"mappings":";;;;;AAkCA,MAAM,4BAA4B;CAAC;CAAI;CAAI;CAAI;AAAG;;;;;;;;;;;;;;;;AAiBlD,MAAa,2BAIX,UACG;CACH,MAAM,EACJ,OACA,UAAU,2BACV,QAAQ,qBACR,OAAO,MACP,WACA,GAAG,SACD;;CAGJ,MAAM,WAAW,YACf,MAAM,MAAM,aACX,eAAe,WAAW,QAC7B;;CAGA,MAAM,SAAS,QAAQ,SAAS,QAAQ,IAAI,UAAU,CAAC,GAAG,SAAS,QAAQ,EAAA,CACxE,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC,CACzB,KAAK,YAAY;EAChB,OAAO,OAAO,eAAe,OAAO;EACpC,OAAO;CACT,EAAE;CAEJ,OACE,qBAAC,OAAO,MAAR;EACQ;EACN,OAAO;EACA;EACP,gBAAgB,UAAU;GACxB,IAAI,UAAU,MACZ,MAAM,YAAY,KAAK;EAE3B;EARF,UAAA,CAUE,qBAAC,OAAD;GACE,kBAAe;GACf,WAAW,kBACT;IAAC;IAAQ;IAAgB;GAAO,GAChC,SACF;GACA,GAAI;GANN,UAAA,CAQE,oBAAC,OAAO,OAAR;IAAc,WAAU;IACrB,UAAA;GACW,CAAA,GAEd,qBAAC,OAAO,SAAR,EAAA,UAAA,CACE,oBAAC,OAAO,OAAR,CAAe,CAAA,GACf,oBAAC,OAAO,MAAR,CAAc,CAAA,CACA,EAAA,CAAA,CACb;EAEL,CAAA,GAAA,oBAAC,OAAO,QAAR,EAAA,UACE,oBAAC,OAAO,YAAR;GAAmB,sBAAsB;GACvC,UAAA,oBAAC,OAAO,OAAR,EAAA,UACE,oBAAC,OAAO,MAAR,EAAA,UACG,MAAM,KAAK,SACV,qBAAC,OAAO,MAAR;IAEE,OAAO,KAAK;IAFd,UAAA,CAIE,oBAAC,OAAO,eAAR,CAAuB,CAAA,GACvB,oBAAC,OAAO,UAAR,EAAA,UAAkB,KAAK,MAAuB,CAAA,CACnC;GALN,GAAA,KAAK,KAKC,CACd,EACU,CAAA,EACD,CAAA;EACG,CAAA,EACN,CAAA,CACJ;;AAEjB;AAEA,wBAAwB,cAAc"}
@@ -0,0 +1,43 @@
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-page-status.d.ts
8
+ /** A página atual e o total, para o texto do `DataTable.PageStatus`. */
9
+ export type DataTablePageStatusValues = {
10
+ /** O índice da página atual, a partir de 0. */
11
+ pageIndex: number;
12
+ /**
13
+ * O total de páginas, ou `-1` sem ele: quando a API não informa (`pageCount: -1`) e, com
14
+ * `loadingFeature`, na carga sem linhas, antes de o total chegar.
15
+ */
16
+ pageCount: number;
17
+ };
18
+ export type DataTablePageStatusProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
19
+ /** A tabela. Exige `rowPaginationFeature`. */
20
+ table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;
21
+ /**
22
+ * Uma função que recebe a página e o total e devolve o texto.
23
+ * @default ({ pageIndex, pageCount }) => 'Página 2 de 10', ou 'Página 2' sem o total
24
+ */
25
+ children?: (values: DataTablePageStatusValues) => React.ReactNode;
26
+ }>;
27
+ /**
28
+ * Qual a página atual, e de quantas: "Página 2 de 10". Sem o total de páginas, só "Página 2",
29
+ * também na primeira carga, quando o total ainda não chegou.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <DataTable.PageStatus table={table}>
34
+ * {({ pageIndex, pageCount }) => `${pageIndex + 1}/${pageCount}`}
35
+ * </DataTable.PageStatus>
36
+ * ```
37
+ */
38
+ export declare const DataTablePageStatus: {
39
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTablePageStatusProps<TFeatures, TData>): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
40
+ displayName: string;
41
+ };
42
+ //#endregion
43
+ //# sourceMappingURL=data-table-page-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-page-status.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-page-status.tsx"],"mappings":";;;;;;;;YAUY;;EAEV;;;;;EAKA;;YAGU,yBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,UAAU,WAAW;;;;;EAK5B,YAAY,QAAQ,8BAA8B,MAAM;;;;;;;;;;;;;qBAe/C;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,yBAAyB,WAAW,SAAM,MAAA,+BAAA,MAAA"}
@@ -0,0 +1,48 @@
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-page-status.tsx
6
+ /**
7
+ * Qual a página atual, e de quantas: "Página 2 de 10". Sem o total de páginas, só "Página 2",
8
+ * também na primeira carga, quando o total ainda não chegou.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * <DataTable.PageStatus table={table}>
13
+ * {({ pageIndex, pageCount }) => `${pageIndex + 1}/${pageCount}`}
14
+ * </DataTable.PageStatus>
15
+ * ```
16
+ */
17
+ const DataTablePageStatus = (props) => {
18
+ const { table, render, className, children, ...rest } = props;
19
+ /**
20
+ * Re-renderiza quando a página ou o total mudam. O store, e não só o atom da paginação: o total
21
+ * também muda com as linhas.
22
+ */
23
+ const values = useSelector(table.store, () => ({
24
+ pageIndex: table.atoms.pagination.get().pageIndex,
25
+ pageCount: getDataTableLoadingWithoutRows(table) ? -1 : table.getPageCount()
26
+ }), { compare: shallow });
27
+ const page = (values.pageIndex + 1).toLocaleString("pt-BR");
28
+ const baseProps = {
29
+ "data-component": "DataTable.PageStatus",
30
+ className: mergeTwClassNames([
31
+ "text-gray-11",
32
+ "text-sm",
33
+ "tabular-nums",
34
+ "whitespace-nowrap"
35
+ ], className),
36
+ children: children === void 0 ? values.pageCount === -1 ? `Página ${page}` : `Página ${page} de ${Math.max(values.pageCount, 1).toLocaleString("pt-BR")}` : children(values)
37
+ };
38
+ return useRender({
39
+ render,
40
+ defaultTagName: "span",
41
+ props: mergeProps(baseProps, rest)
42
+ });
43
+ };
44
+ DataTablePageStatus.displayName = "DataTable.PageStatus";
45
+ //#endregion
46
+ export { DataTablePageStatus };
47
+
48
+ //# sourceMappingURL=data-table-page-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-page-status.js","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-page-status.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/** A página atual e o total, para o texto do `DataTable.PageStatus`. */\nexport type DataTablePageStatusValues = {\n /** O índice da página atual, a partir de 0. */\n pageIndex: number;\n /**\n * O total de páginas, ou `-1` sem ele: quando a API não informa (`pageCount: -1`) e, com\n * `loadingFeature`, na carga sem linhas, antes de o total chegar.\n */\n pageCount: number;\n};\n\nexport type DataTablePageStatusProps<\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 a página e o total e devolve o texto.\n * @default ({ pageIndex, pageCount }) => 'Página 2 de 10', ou 'Página 2' sem o total\n */\n children?: (values: DataTablePageStatusValues) => React.ReactNode;\n }\n>;\n\n/**\n * Qual a página atual, e de quantas: \"Página 2 de 10\". Sem o total de páginas, só \"Página 2\",\n * também na primeira carga, quando o total ainda não chegou.\n *\n * @example\n * ```tsx\n * <DataTable.PageStatus table={table}>\n * {({ pageIndex, pageCount }) => `${pageIndex + 1}/${pageCount}`}\n * </DataTable.PageStatus>\n * ```\n */\nexport const DataTablePageStatus = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTablePageStatusProps<TFeatures, TData>,\n) => {\n const { table, render, className, children, ...rest } = props;\n\n /**\n * Re-renderiza quando a página ou o total mudam. O store, e não só o atom da paginação: o total\n * também muda com as linhas.\n */\n const values = useSelector(\n table.store,\n (): DataTablePageStatusValues => ({\n pageIndex: table.atoms.pagination.get().pageIndex,\n pageCount: getDataTableLoadingWithoutRows(table)\n ? -1\n : table.getPageCount(),\n }),\n { compare: shallow },\n );\n\n const page = (values.pageIndex + 1).toLocaleString('pt-BR');\n\n const baseProps = {\n 'data-component': 'DataTable.PageStatus',\n className: mergeTwClassNames(\n ['text-gray-11', 'text-sm', 'tabular-nums', 'whitespace-nowrap'],\n className,\n ),\n children:\n children === undefined\n ? values.pageCount === -1\n ? `Página ${page}`\n : // Sem linhas, o total é 0, e a página 1 continua sendo a atual.\n `Página ${page} de ${Math.max(values.pageCount, 1).toLocaleString('pt-BR')}`\n : children(values),\n };\n\n return useRender({\n render,\n defaultTagName: 'span',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDataTablePageStatus.displayName = 'DataTable.PageStatus';\n"],"mappings":";;;;;;;;;;;;;;;;AA+CA,MAAa,uBAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,WAAW,UAAU,GAAG,SAAS;;;;;CAMxD,MAAM,SAAS,YACb,MAAM,cAC4B;EAChC,WAAW,MAAM,MAAM,WAAW,IAAI,CAAC,CAAC;EACxC,WAAW,+BAA+B,KAAK,IAC3C,KACA,MAAM,aAAa;CACzB,IACA,EAAE,SAAS,QAAQ,CACrB;CAEA,MAAM,QAAQ,OAAO,YAAY,EAAA,CAAG,eAAe,OAAO;CAE1D,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GAAC;GAAgB;GAAW;GAAgB;EAAmB,GAC/D,SACF;EACA,UACE,aAAa,KAAA,IACT,OAAO,cAAc,KACnB,UAAU,SAEV,UAAU,KAAK,MAAM,KAAK,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,eAAe,OAAO,MAC3E,SAAS,MAAM;CACvB;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,oBAAoB,cAAc"}
@@ -0,0 +1,38 @@
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 { MergeOverride } from "@lucasbernardosn/utils";
6
+ //#region src/components/data-table/pagination/data-table-pagination.d.ts
7
+ export type DataTablePaginationProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'nav'>, {
8
+ /** A tabela. Exige `rowPaginationFeature`. */
9
+ table: TableWith<TFeatures, TData, 'rowPaginationFeature'>;
10
+ }>;
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
+ export declare const DataTablePagination: {
34
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTablePaginationProps<TFeatures, TData>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
35
+ displayName: string;
36
+ };
37
+ //#endregion
38
+ //# sourceMappingURL=data-table-pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-pagination.d.ts","names":[],"sources":["../../../../src/components/data-table/pagination/data-table-pagination.tsx"],"mappings":";;;;;;YAYY,yBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,UAAU,WAAW;;;;;;;;;;;;;;;;;;;;;;;;qBA0BnB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,yBAAyB,WAAW,yBAAM,+CAAA"}
@@ -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"}