@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 @@
1
+ {"version":3,"file":"data-table-selection-bar.js","names":[],"sources":["../../../../src/components/data-table/selection/data-table-selection-bar.tsx"],"sourcesContent":["import { ActionBar } from '@lucasbernardosn/react-ui/overlays/action-bar';\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';\nimport { DataTableSelectedCount } from '../pagination/data-table-selected-count';\n\nexport type DataTableSelectionBarProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n ActionBar.PopupProps,\n {\n /** A tabela. Exige `rowSelectionFeature`. */\n table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;\n /**\n * As ações da seleção. Recebe os ids das linhas marcadas, inclusive os de outras páginas e os\n * de linhas que não estão carregadas: o app resolve o id para o registro.\n */\n children?: (selectedIds: string[]) => React.ReactNode;\n /** A posição da barra no rodapé da tela. */\n placement?: ActionBar.RootProps['placement'];\n /**\n * O texto lido pelo leitor de tela no resumo, que limpa a seleção.\n * @default 'Limpar seleção'\n */\n clearLabel?: string;\n }\n>;\n\n/**\n * A barra de ações da seleção, fixa no rodapé da tela: aparece com ao menos uma linha marcada e\n * some ao limpar. Monta o `ActionBar` do `ui` e liga à tabela o que é igual em toda lista: a\n * abertura pela contagem, o texto do resumo e a limpeza da seleção.\n *\n * O resumo (\"3 selecionadas\") é o botão que limpa a seleção, e o Esc também a limpa. As ações são\n * do app: entram como `children`, que recebe os ids marcados. A barra não confirma nada nem sabe\n * o que as ações fazem.\n *\n * Os ids vêm do estado da seleção e valem para toda a tabela, e não só para a página à vista.\n * Quando um filtro muda as linhas, a seleção continua com ids que sumiram da tela: quem filtra\n * decide se a limpa (`table.resetRowSelection()`).\n *\n * @example\n * ```tsx\n * <DataTable.SelectionBar table={table}>\n * {(selectedIds) => (\n * <Button onClick={() => removeAll(selectedIds)}>Excluir</Button>\n * )}\n * </DataTable.SelectionBar>\n * ```\n */\nexport const DataTableSelectionBar = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSelectionBarProps<TFeatures, TData>,\n) => {\n const {\n table,\n children,\n placement,\n clearLabel = 'Limpar seleção',\n ...rest\n } = props;\n\n /** Os ids marcados: o estado só guarda as linhas marcadas. Re-renderiza quando muda. */\n const selectedIds = useSelector(table.atoms.rowSelection, (rowSelection) =>\n Object.keys(rowSelection),\n );\n\n return (\n <ActionBar.Root\n placement={placement}\n open={selectedIds.length > 0}\n onOpenChange={(open) => {\n if (!open) {\n table.resetRowSelection(true);\n }\n }}\n >\n <ActionBar.Portal>\n <ActionBar.Popup\n data-component=\"DataTable.SelectionBar\"\n {...rest}\n >\n <ActionBar.SelectionTrigger\n onClick={() => table.resetRowSelection(true)}\n >\n <DataTableSelectedCount\n table={table}\n className=\"text-gray-12\"\n />\n <span className=\"sr-only\">{clearLabel}</span>\n </ActionBar.SelectionTrigger>\n\n {children?.(selectedIds)}\n </ActionBar.Popup>\n </ActionBar.Portal>\n </ActionBar.Root>\n );\n};\n\nDataTableSelectionBar.displayName = 'DataTable.SelectionBar';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,MAAa,yBAIX,UACG;CACH,MAAM,EACJ,OACA,UACA,WACA,aAAa,kBACb,GAAG,SACD;;CAGJ,MAAM,cAAc,YAAY,MAAM,MAAM,eAAe,iBACzD,OAAO,KAAK,YAAY,CAC1B;CAEA,OACE,oBAAC,UAAU,MAAX;EACa;EACX,MAAM,YAAY,SAAS;EAC3B,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,MAAM,kBAAkB,IAAI;EAEhC;EAEA,UAAA,oBAAC,UAAU,QAAX,EAAA,UACE,qBAAC,UAAU,OAAX;GACE,kBAAe;GACf,GAAI;GAFN,UAAA,CAIE,qBAAC,UAAU,kBAAX;IACE,eAAe,MAAM,kBAAkB,IAAI;IAD7C,UAAA,CAGE,oBAAC,wBAAD;KACS;KACP,WAAU;IACX,CAAA,GACD,oBAAC,QAAD;KAAM,WAAU;KAAW,UAAA;IAAiB,CAAA,CAClB;GAE3B,CAAA,GAAA,WAAW,WAAW,CACR;EACD,CAAA,EAAA,CAAA;CACJ,CAAA;AAEpB;AAEA,sBAAsB,cAAc"}
@@ -0,0 +1,54 @@
1
+ import { RowWith, TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowData, TableFeatures } from "@tanstack/react-table";
4
+ //#region src/components/data-table/selection/selection-column-def.d.ts
5
+ /** As opções da coluna de seleção. */
6
+ export type SelectionColumnDefOptions = {
7
+ /**
8
+ * O id da coluna.
9
+ * @default 'select'
10
+ */
11
+ id?: string;
12
+ /**
13
+ * O que o checkbox do header marca e mede. Ver `DataTable.SelectAllCheckbox`.
14
+ * @default 'page' com `rowPaginationFeature`, 'all' sem
15
+ */
16
+ scope?: 'page' | 'all';
17
+ };
18
+ /**
19
+ * A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o
20
+ * `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem
21
+ * esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes
22
+ * ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do
23
+ * registro (ver `DataTable.RowCheckbox`).
24
+ *
25
+ * Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e
26
+ * não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem
27
+ * `rowSelectionFeature` é recusada pelo header e pela célula daqui.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const columns = columnHelper.columns([
32
+ * columnHelper.display(DataTable.selectionColumnDef()),
33
+ * columnHelper.accessor('name', { header: 'Nome' }),
34
+ * ]);
35
+ * ```
36
+ */
37
+ export declare const selectionColumnDef: (options?: SelectionColumnDefOptions) => {
38
+ id: string;
39
+ size: number;
40
+ minSize: number;
41
+ maxSize: number;
42
+ align: "center";
43
+ enableResizing: boolean;
44
+ enableSorting: boolean;
45
+ enableHiding: boolean;
46
+ header: <TFeatures extends TableFeatures, TData extends RowData>(context: {
47
+ table: TableWith<TFeatures, TData, "rowSelectionFeature">;
48
+ }) => import("react").JSX.Element;
49
+ cell: <TFeatures extends TableFeatures, TData extends RowData>(context: {
50
+ row: RowWith<TFeatures, TData, "rowSelectionFeature">;
51
+ }) => import("react").JSX.Element;
52
+ };
53
+ //#endregion
54
+ //# sourceMappingURL=selection-column-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-column-def.d.ts","names":[],"sources":["../../../../src/components/data-table/selection/selection-column-def.tsx"],"mappings":";;;;;YAOY;;;;;EAKV;;;;;EAKA;;;;;;;;;;;;;;;;;;;;;qBAkCW,qBAAsB,UAAS;;;;;;;;;EAY/B,SAAA,kBAAkB,eAAe,cAAc,SAAO;IAC7D,OAAO,UAAU,WAAW;wBAC7B,IAAA;EAMM,OAAA,kBAAkB,eAAe,cAAc,SAAO;IAC3D,KAAK,QAAQ,WAAW;wBACzB,IAAA"}
@@ -0,0 +1,55 @@
1
+ import { DataTableRowCheckbox } from "./data-table-row-checkbox.js";
2
+ import { DataTableSelectAllCheckbox } from "./data-table-select-all-checkbox.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/components/data-table/selection/selection-column-def.tsx
5
+ /**
6
+ * A largura da coluna: o checkbox de 16px mais o padding da densidade mais folgada (12px de cada
7
+ * lado) e a borda. Menos que isso, a célula, que trunca, cortaria o checkbox nessa densidade.
8
+ */
9
+ const SELECTION_COLUMN_SIZE = 44;
10
+ /**
11
+ * O checkbox no centro da célula e do header. Numa constante tipada: o literal direto no objeto
12
+ * devolvido viraria `string`, que o `align` da definição recusa.
13
+ */
14
+ const SELECTION_COLUMN_ALIGN = "center";
15
+ /**
16
+ * A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o
17
+ * `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem
18
+ * esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes
19
+ * ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do
20
+ * registro (ver `DataTable.RowCheckbox`).
21
+ *
22
+ * Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e
23
+ * não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem
24
+ * `rowSelectionFeature` é recusada pelo header e pela célula daqui.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const columns = columnHelper.columns([
29
+ * columnHelper.display(DataTable.selectionColumnDef()),
30
+ * columnHelper.accessor('name', { header: 'Nome' }),
31
+ * ]);
32
+ * ```
33
+ */
34
+ const selectionColumnDef = (options = {}) => {
35
+ const { id = "select", scope } = options;
36
+ return {
37
+ id,
38
+ size: SELECTION_COLUMN_SIZE,
39
+ minSize: SELECTION_COLUMN_SIZE,
40
+ maxSize: SELECTION_COLUMN_SIZE,
41
+ align: SELECTION_COLUMN_ALIGN,
42
+ enableResizing: false,
43
+ enableSorting: false,
44
+ enableHiding: false,
45
+ header: (context) => /* @__PURE__ */ jsx(DataTableSelectAllCheckbox, {
46
+ table: context.table,
47
+ scope
48
+ }),
49
+ cell: (context) => /* @__PURE__ */ jsx(DataTableRowCheckbox, { row: context.row })
50
+ };
51
+ };
52
+ //#endregion
53
+ export { selectionColumnDef };
54
+
55
+ //# sourceMappingURL=selection-column-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-column-def.js","names":[],"sources":["../../../../src/components/data-table/selection/selection-column-def.tsx"],"sourcesContent":["import type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { ColumnAlign } from '../../../features';\nimport type { RowWith, TableWith } from '../../../types';\nimport { DataTableRowCheckbox } from './data-table-row-checkbox';\nimport { DataTableSelectAllCheckbox } from './data-table-select-all-checkbox';\n\n/** As opções da coluna de seleção. */\nexport type SelectionColumnDefOptions = {\n /**\n * O id da coluna.\n * @default 'select'\n */\n id?: string;\n /**\n * O que o checkbox do header marca e mede. Ver `DataTable.SelectAllCheckbox`.\n * @default 'page' com `rowPaginationFeature`, 'all' sem\n */\n scope?: 'page' | 'all';\n};\n\n/**\n * A largura da coluna: o checkbox de 16px mais o padding da densidade mais folgada (12px de cada\n * lado) e a borda. Menos que isso, a célula, que trunca, cortaria o checkbox nessa densidade.\n */\nconst SELECTION_COLUMN_SIZE = 44;\n\n/**\n * O checkbox no centro da célula e do header. Numa constante tipada: o literal direto no objeto\n * devolvido viraria `string`, que o `align` da definição recusa.\n */\nconst SELECTION_COLUMN_ALIGN: ColumnAlign = 'center';\n\n/**\n * A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o\n * `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem\n * esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes\n * ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do\n * registro (ver `DataTable.RowCheckbox`).\n *\n * Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e\n * não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem\n * `rowSelectionFeature` é recusada pelo header e pela célula daqui.\n *\n * @example\n * ```ts\n * const columns = columnHelper.columns([\n * columnHelper.display(DataTable.selectionColumnDef()),\n * columnHelper.accessor('name', { header: 'Nome' }),\n * ]);\n * ```\n */\nexport const selectionColumnDef = (options: SelectionColumnDefOptions = {}) => {\n const { id = 'select', scope } = options;\n\n return {\n id,\n size: SELECTION_COLUMN_SIZE,\n minSize: SELECTION_COLUMN_SIZE,\n maxSize: SELECTION_COLUMN_SIZE,\n align: SELECTION_COLUMN_ALIGN,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n header: <TFeatures extends TableFeatures, TData extends RowData>(context: {\n table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;\n }) => (\n <DataTableSelectAllCheckbox\n table={context.table}\n scope={scope}\n />\n ),\n cell: <TFeatures extends TableFeatures, TData extends RowData>(context: {\n row: RowWith<TFeatures, TData, 'rowSelectionFeature'>;\n }) => <DataTableRowCheckbox row={context.row} />,\n };\n};\n"],"mappings":";;;;;;;;AAwBA,MAAM,wBAAwB;;;;;AAM9B,MAAM,yBAAsC;;;;;;;;;;;;;;;;;;;;AAqB5C,MAAa,sBAAsB,UAAqC,CAAC,MAAM;CAC7E,MAAM,EAAE,KAAK,UAAU,UAAU;CAEjC,OAAO;EACL;EACA,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,gBAAgB;EAChB,eAAe;EACf,cAAc;EACd,SAAiE,YAG/D,oBAAC,4BAAD;GACE,OAAO,QAAQ;GACR;EACR,CAAA;EAEH,OAA+D,YAEzD,oBAAC,sBAAD,EAAsB,KAAK,QAAQ,IAAM,CAAA;CACjD;AACF"}
@@ -0,0 +1,26 @@
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 { MergeOverride } from "@lucasbernardosn/utils";
6
+ //#region src/components/data-table/sorting/data-table-sort-indicator.d.ts
7
+ export type DataTableSortIndicatorProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
8
+ /** O header da coluna. Exige `rowSortingFeature`. */
9
+ header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;
10
+ }>;
11
+ /**
12
+ * O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna
13
+ * fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com
14
+ * `children`, eles substituem o ícone; a direção fica em `data-sorted`.
15
+ *
16
+ * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.
17
+ *
18
+ * É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do
19
+ * `DataTable.HeaderCell`.
20
+ */
21
+ export declare const DataTableSortIndicator: {
22
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSortIndicatorProps<TFeatures, TData>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null;
23
+ displayName: string;
24
+ };
25
+ //#endregion
26
+ //# sourceMappingURL=data-table-sort-indicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-indicator.d.ts","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-indicator.tsx"],"mappings":";;;;;;YAaY,4BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WAAW,WAAW;;;;;;;;;;;;qBAcrB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,4BAA4B,WAAW,yBAAM,+CAAA"}
@@ -0,0 +1,64 @@
1
+ import { Icon } from "@lucasbernardosn/react-ui/display/icon";
2
+ import { CaretDownIcon, CaretUpDownIcon, CaretUpIcon } from "@phosphor-icons/react";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { mergeProps, useRender } from "@base-ui/react";
5
+ import { useSelector } from "@tanstack/react-store";
6
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
7
+ //#region src/components/data-table/sorting/data-table-sort-indicator.tsx
8
+ /**
9
+ * O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna
10
+ * fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com
11
+ * `children`, eles substituem o ícone; a direção fica em `data-sorted`.
12
+ *
13
+ * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.
14
+ *
15
+ * É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do
16
+ * `DataTable.HeaderCell`.
17
+ */
18
+ const DataTableSortIndicator = (props) => {
19
+ const { header, render, className, children, ...rest } = props;
20
+ const { table } = header.column;
21
+ /**
22
+ * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor.
23
+ */
24
+ const sorted = useSelector(table.atoms.sorting, () => header.column.getIsSorted());
25
+ /**
26
+ * A posição na ordenação, de 1 em diante, só com mais de uma coluna ordenada: com uma só, o
27
+ * número não diz nada. Re-renderiza quando a posição desta coluna muda.
28
+ */
29
+ const position = useSelector(table.atoms.sorting, (sorting) => {
30
+ const index = header.column.getSortIndex();
31
+ return index >= 0 && sorting.length > 1 ? index + 1 : void 0;
32
+ });
33
+ const icon = sorted === "asc" ? /* @__PURE__ */ jsx(CaretUpIcon, {}) : sorted === "desc" ? /* @__PURE__ */ jsx(CaretDownIcon, {}) : /* @__PURE__ */ jsx(CaretUpDownIcon, {});
34
+ const baseProps = {
35
+ "data-component": "DataTable.SortIndicator",
36
+ "data-sorted": sorted || void 0,
37
+ "aria-hidden": true,
38
+ className: mergeTwClassNames([
39
+ "inline-flex",
40
+ "shrink-0",
41
+ "items-center",
42
+ "gap-0.5",
43
+ "text-gray-8",
44
+ "data-sorted:text-gray-12",
45
+ "text-2xs",
46
+ "tabular-nums"
47
+ ], className),
48
+ children: children === void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Icon, {
49
+ render: icon,
50
+ className: "size-3.5"
51
+ }), position] }) : children
52
+ };
53
+ const element = useRender({
54
+ render,
55
+ defaultTagName: "span",
56
+ props: mergeProps(baseProps, rest)
57
+ });
58
+ return header.column.getCanSort() ? element : null;
59
+ };
60
+ DataTableSortIndicator.displayName = "DataTable.SortIndicator";
61
+ //#endregion
62
+ export { DataTableSortIndicator };
63
+
64
+ //# sourceMappingURL=data-table-sort-indicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-indicator.js","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-indicator.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { Icon } from '@lucasbernardosn/react-ui/display/icon';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport {\n CaretDownIcon,\n CaretUpDownIcon,\n CaretUpIcon,\n} from '@phosphor-icons/react';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { HeaderWith } from '../../../types';\n\nexport type DataTableSortIndicatorProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'span'>,\n {\n /** O header da coluna. Exige `rowSortingFeature`. */\n header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;\n }\n>;\n\n/**\n * O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna\n * fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com\n * `children`, eles substituem o ícone; a direção fica em `data-sorted`.\n *\n * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.\n *\n * É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do\n * `DataTable.HeaderCell`.\n */\nexport const DataTableSortIndicator = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortIndicatorProps<TFeatures, TData>,\n) => {\n const { header, render, className, children, ...rest } = props;\n\n const { table } = header.column;\n\n /**\n * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor.\n */\n const sorted = useSelector(table.atoms.sorting, () =>\n header.column.getIsSorted(),\n );\n\n /**\n * A posição na ordenação, de 1 em diante, só com mais de uma coluna ordenada: com uma só, o\n * número não diz nada. Re-renderiza quando a posição desta coluna muda.\n */\n const position = useSelector(table.atoms.sorting, (sorting) => {\n const index = header.column.getSortIndex();\n\n return index >= 0 && sorting.length > 1 ? index + 1 : undefined;\n });\n\n const icon =\n sorted === 'asc' ? (\n <CaretUpIcon />\n ) : sorted === 'desc' ? (\n <CaretDownIcon />\n ) : (\n <CaretUpDownIcon />\n );\n\n const baseProps = {\n 'data-component': 'DataTable.SortIndicator',\n 'data-sorted': sorted || undefined,\n 'aria-hidden': true,\n className: mergeTwClassNames(\n [\n 'inline-flex',\n 'shrink-0',\n 'items-center',\n 'gap-0.5',\n\n 'text-gray-8',\n 'data-sorted:text-gray-12',\n\n 'text-2xs',\n 'tabular-nums',\n ],\n className,\n ),\n children:\n children === undefined ? (\n <>\n <Icon\n render={icon}\n className=\"size-3.5\"\n />\n {position}\n </>\n ) : (\n children\n ),\n };\n\n const element = useRender({\n render,\n defaultTagName: 'span',\n props: mergeProps(baseProps, rest),\n });\n\n return header.column.getCanSort() ? element : null;\n};\n\nDataTableSortIndicator.displayName = 'DataTable.SortIndicator';\n"],"mappings":";;;;;;;;;;;;;;;;;AAkCA,MAAa,0BAIX,UACG;CACH,MAAM,EAAE,QAAQ,QAAQ,WAAW,UAAU,GAAG,SAAS;CAEzD,MAAM,EAAE,UAAU,OAAO;;;;CAKzB,MAAM,SAAS,YAAY,MAAM,MAAM,eACrC,OAAO,OAAO,YAAY,CAC5B;;;;;CAMA,MAAM,WAAW,YAAY,MAAM,MAAM,UAAU,YAAY;EAC7D,MAAM,QAAQ,OAAO,OAAO,aAAa;EAEzC,OAAO,SAAS,KAAK,QAAQ,SAAS,IAAI,QAAQ,IAAI,KAAA;CACxD,CAAC;CAED,MAAM,OACJ,WAAW,QACT,oBAAC,aAAD,CAAc,CAAA,IACZ,WAAW,SACb,oBAAC,eAAD,CAAgB,CAAA,IAEhB,oBAAC,iBAAD,CAAkB,CAAA;CAGtB,MAAM,YAAY;EAChB,kBAAkB;EAClB,eAAe,UAAU,KAAA;EACzB,eAAe;EACf,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;EACF,GACA,SACF;EACA,UACE,aAAa,KAAA,IACX,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD;GACE,QAAQ;GACR,WAAU;EACX,CAAA,GACA,QACD,EAAA,CAAA,IAEF;CAEN;CAEA,MAAM,UAAU,UAAU;EACxB;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;CAED,OAAO,OAAO,OAAO,WAAW,IAAI,UAAU;AAChD;AAEA,uBAAuB,cAAc"}
@@ -0,0 +1,31 @@
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 { MergeOverride } from "@lucasbernardosn/utils";
6
+ //#region src/components/data-table/sorting/data-table-sort-trigger.d.ts
7
+ export type DataTableSortTriggerProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'button'>, {
8
+ /** O header da coluna. Exige `rowSortingFeature`. */
9
+ header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;
10
+ }>;
11
+ /**
12
+ * O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo
13
+ * configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação
14
+ * local (`sortedRowModel`) e à da API (`manualSorting`).
15
+ *
16
+ * É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam
17
+ * com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o
18
+ * `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa
19
+ * coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto
20
+ * encosta na mesma borda dos valores.
21
+ *
22
+ * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,
23
+ * marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da
24
+ * coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.
25
+ */
26
+ export declare const DataTableSortTrigger: {
27
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSortTriggerProps<TFeatures, TData>): import("react").JSX.Element;
28
+ displayName: string;
29
+ };
30
+ //#endregion
31
+ //# sourceMappingURL=data-table-sort-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-trigger.d.ts","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-trigger.tsx"],"mappings":";;;;;;YAQY,0BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WAAW,WAAW;;;;;;;;;;;;;;;;;qBAmBrB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,0BAA0B,WAAW,yBAAM,IAAA"}
@@ -0,0 +1,46 @@
1
+ import { DataTableHeaderButton } from "../header/data-table-header-button.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { mergeProps } from "@base-ui/react";
4
+ import { useSelector } from "@tanstack/react-store";
5
+ import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
6
+ //#region src/components/data-table/sorting/data-table-sort-trigger.tsx
7
+ /**
8
+ * O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo
9
+ * configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação
10
+ * local (`sortedRowModel`) e à da API (`manualSorting`).
11
+ *
12
+ * É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam
13
+ * com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o
14
+ * `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa
15
+ * coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto
16
+ * encosta na mesma borda dos valores.
17
+ *
18
+ * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,
19
+ * marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da
20
+ * coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.
21
+ */
22
+ const DataTableSortTrigger = (props) => {
23
+ const { header, render, className, ...rest } = props;
24
+ /**
25
+ * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor:
26
+ * redimensionar ou selecionar não chega aqui.
27
+ */
28
+ const sorted = useSelector(header.column.table.atoms.sorting, () => header.column.getIsSorted());
29
+ const canSort = header.column.getCanSort();
30
+ const baseProps = {
31
+ "data-component": "DataTable.SortTrigger",
32
+ "data-sorted": sorted || void 0,
33
+ "data-disabled": canSort ? void 0 : "",
34
+ onClick: canSort ? header.column.getToggleSortingHandler() : void 0,
35
+ className: mergeTwClassNames(["in-data-[align=end]:flex-row-reverse", "data-sorted:text-gray-12"], className)
36
+ };
37
+ return /* @__PURE__ */ jsx(DataTableHeaderButton, {
38
+ ...mergeProps(baseProps, rest),
39
+ render: render ?? (canSort ? void 0 : /* @__PURE__ */ jsx("span", {}))
40
+ });
41
+ };
42
+ DataTableSortTrigger.displayName = "DataTable.SortTrigger";
43
+ //#endregion
44
+ export { DataTableSortTrigger };
45
+
46
+ //# sourceMappingURL=data-table-sort-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-trigger.js","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-trigger.tsx"],"sourcesContent":["import { mergeProps, type 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 { HeaderWith } from '../../../types';\nimport { DataTableHeaderButton } from '../header/data-table-header-button';\n\nexport type DataTableSortTriggerProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'button'>,\n {\n /** O header da coluna. Exige `rowSortingFeature`. */\n header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;\n }\n>;\n\n/**\n * O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo\n * configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação\n * local (`sortedRowModel`) e à da API (`manualSorting`).\n *\n * É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam\n * com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o\n * `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa\n * coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto\n * encosta na mesma borda dos valores.\n *\n * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,\n * marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da\n * coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.\n */\nexport const DataTableSortTrigger = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortTriggerProps<TFeatures, TData>,\n) => {\n const { header, render, className, ...rest } = props;\n\n /**\n * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor:\n * redimensionar ou selecionar não chega aqui.\n */\n const sorted = useSelector(header.column.table.atoms.sorting, () =>\n header.column.getIsSorted(),\n );\n\n const canSort = header.column.getCanSort();\n\n const baseProps = {\n 'data-component': 'DataTable.SortTrigger',\n 'data-sorted': sorted || undefined,\n 'data-disabled': canSort ? undefined : '',\n onClick: canSort ? header.column.getToggleSortingHandler() : undefined,\n className: mergeTwClassNames(\n [\n // Invertida, a linha começa pelo fim: o texto fica na borda, e o indicador antes dele.\n 'in-data-[align=end]:flex-row-reverse',\n\n 'data-sorted:text-gray-12',\n ],\n className,\n ),\n };\n\n return (\n <DataTableHeaderButton\n {...mergeProps(baseProps, rest)}\n render={render ?? (canSort ? undefined : <span />)}\n />\n );\n};\n\nDataTableSortTrigger.displayName = 'DataTable.SortTrigger';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,wBAIX,UACG;CACH,MAAM,EAAE,QAAQ,QAAQ,WAAW,GAAG,SAAS;;;;;CAM/C,MAAM,SAAS,YAAY,OAAO,OAAO,MAAM,MAAM,eACnD,OAAO,OAAO,YAAY,CAC5B;CAEA,MAAM,UAAU,OAAO,OAAO,WAAW;CAEzC,MAAM,YAAY;EAChB,kBAAkB;EAClB,eAAe,UAAU,KAAA;EACzB,iBAAiB,UAAU,KAAA,IAAY;EACvC,SAAS,UAAU,OAAO,OAAO,wBAAwB,IAAI,KAAA;EAC7D,WAAW,kBACT,CAEE,wCAEA,0BACF,GACA,SACF;CACF;CAEA,OACE,oBAAC,uBAAD;EACE,GAAI,WAAW,WAAW,IAAI;EAC9B,QAAQ,WAAW,UAAU,KAAA,IAAY,oBAAC,QAAD,CAAO,CAAA;CACjD,CAAA;AAEL;AAEA,qBAAqB,cAAc"}
@@ -0,0 +1,39 @@
1
+ import { TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { RowDensity } from "../../../features/row-density/row-density-feature.types.js";
4
+ import "../../../features/index.js";
5
+ import { RowData, TableFeatures } from "@tanstack/react-table";
6
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
7
+ import { MergeOverride } from "@lucasbernardosn/utils";
8
+ //#region src/components/data-table/toolbar/data-table-density-select.d.ts
9
+ export type DataTableDensitySelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
10
+ /** A tabela. Exige `rowDensityFeature`. */
11
+ table: TableWith<TFeatures, TData, 'rowDensityFeature'>;
12
+ /**
13
+ * O nome de cada densidade.
14
+ * @default { compact: 'Compacta', standard: 'Padrão', airy: 'Arejada' }
15
+ */
16
+ labels?: Partial<Record<RowDensity, string>>;
17
+ /**
18
+ * O tamanho do select.
19
+ * @default 'sm'
20
+ */
21
+ size?: Select.RootProps<RowDensity>['size'];
22
+ }>;
23
+ /**
24
+ * O select da densidade das linhas, para a barra de ferramentas. Sem rótulo visível: o nome para
25
+ * o leitor de tela é "Densidade", trocável pelo `aria-label`.
26
+ *
27
+ * Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <DataTable.DensitySelect table={table} />
32
+ * ```
33
+ */
34
+ export declare const DataTableDensitySelect: {
35
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableDensitySelectProps<TFeatures, TData>): import("react").JSX.Element;
36
+ displayName: string;
37
+ };
38
+ //#endregion
39
+ //# sourceMappingURL=data-table-density-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-density-select.d.ts","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-density-select.tsx"],"mappings":";;;;;;;;YAOY,4BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,OAAO;;EAGL,OAAO,UAAU,WAAW;;;;;EAK5B,SAAS,QAAQ,OAAO;;;;;EAKxB,OAAO,OAAO,UAAU;;;;;;;;;;;;;qBAuBf;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,4BAA4B,WAAW,yBAAM,IAAA"}
@@ -0,0 +1,60 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useSelector } from "@tanstack/react-store";
3
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
4
+ //#region src/components/data-table/toolbar/data-table-density-select.tsx
5
+ const DEFAULT_LABELS = {
6
+ compact: "Compacta",
7
+ standard: "Padrão",
8
+ airy: "Arejada"
9
+ };
10
+ const DENSITIES = [
11
+ "compact",
12
+ "standard",
13
+ "airy"
14
+ ];
15
+ /**
16
+ * O select da densidade das linhas, para a barra de ferramentas. Sem rótulo visível: o nome para
17
+ * o leitor de tela é "Densidade", trocável pelo `aria-label`.
18
+ *
19
+ * Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <DataTable.DensitySelect table={table} />
24
+ * ```
25
+ */
26
+ const DataTableDensitySelect = (props) => {
27
+ const { table, labels, size = "sm", disabled, ...rest } = props;
28
+ /** Re-renderiza quando a densidade muda. */
29
+ const density = useSelector(table.atoms.rowDensity);
30
+ const items = DENSITIES.map((value) => ({
31
+ label: labels?.[value] ?? DEFAULT_LABELS[value],
32
+ value
33
+ }));
34
+ return /* @__PURE__ */ jsxs(Select.Root, {
35
+ size,
36
+ value: density,
37
+ items,
38
+ disabled,
39
+ onValueChange: (value) => {
40
+ if (value !== null) table.setRowDensity(value);
41
+ },
42
+ children: [/* @__PURE__ */ jsxs(Select.Trigger, {
43
+ "data-component": "DataTable.DensitySelect",
44
+ "aria-label": "Densidade",
45
+ ...rest,
46
+ children: [/* @__PURE__ */ jsx(Select.Value, {}), /* @__PURE__ */ jsx(Select.Icon, {})]
47
+ }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
48
+ alignItemWithTrigger: false,
49
+ children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: items.map((item) => /* @__PURE__ */ jsxs(Select.Item, {
50
+ value: item.value,
51
+ children: [/* @__PURE__ */ jsx(Select.ItemIndicator, {}), /* @__PURE__ */ jsx(Select.ItemText, { children: item.label })]
52
+ }, item.value)) }) })
53
+ }) })]
54
+ });
55
+ };
56
+ DataTableDensitySelect.displayName = "DataTable.DensitySelect";
57
+ //#endregion
58
+ export { DataTableDensitySelect };
59
+
60
+ //# sourceMappingURL=data-table-density-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-density-select.js","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-density-select.tsx"],"sourcesContent":["import { Select } from '@lucasbernardosn/react-ui/collections/select';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { RowDensity } from '../../../features';\nimport type { TableWith } from '../../../types';\n\nexport type DataTableDensitySelectProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Select.TriggerProps,\n {\n /** A tabela. Exige `rowDensityFeature`. */\n table: TableWith<TFeatures, TData, 'rowDensityFeature'>;\n /**\n * O nome de cada densidade.\n * @default { compact: 'Compacta', standard: 'Padrão', airy: 'Arejada' }\n */\n labels?: Partial<Record<RowDensity, string>>;\n /**\n * O tamanho do select.\n * @default 'sm'\n */\n size?: Select.RootProps<RowDensity>['size'];\n }\n>;\n\nconst DEFAULT_LABELS: Record<RowDensity, string> = {\n compact: 'Compacta',\n standard: 'Padrão',\n airy: 'Arejada',\n};\n\nconst DENSITIES: RowDensity[] = ['compact', 'standard', 'airy'];\n\n/**\n * O select da densidade das linhas, para a barra de ferramentas. Sem rótulo visível: o nome para\n * o leitor de tela é \"Densidade\", trocável pelo `aria-label`.\n *\n * Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.\n *\n * @example\n * ```tsx\n * <DataTable.DensitySelect table={table} />\n * ```\n */\nexport const DataTableDensitySelect = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableDensitySelectProps<TFeatures, TData>,\n) => {\n const { table, labels, size = 'sm', disabled, ...rest } = props;\n\n /** Re-renderiza quando a densidade muda. */\n const density = useSelector(table.atoms.rowDensity);\n\n const items = DENSITIES.map((value) => ({\n label: labels?.[value] ?? DEFAULT_LABELS[value],\n value,\n }));\n\n return (\n <Select.Root<RowDensity>\n size={size}\n value={density}\n items={items}\n disabled={disabled}\n onValueChange={(value) => {\n if (value !== null) {\n table.setRowDensity(value);\n }\n }}\n >\n <Select.Trigger\n data-component=\"DataTable.DensitySelect\"\n aria-label=\"Densidade\"\n {...rest}\n >\n <Select.Value />\n <Select.Icon />\n </Select.Trigger>\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\nDataTableDensitySelect.displayName = 'DataTable.DensitySelect';\n"],"mappings":";;;;AA4BA,MAAM,iBAA6C;CACjD,SAAS;CACT,UAAU;CACV,MAAM;AACR;AAEA,MAAM,YAA0B;CAAC;CAAW;CAAY;AAAM;;;;;;;;;;;;AAa9D,MAAa,0BAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,OAAO,MAAM,UAAU,GAAG,SAAS;;CAG1D,MAAM,UAAU,YAAY,MAAM,MAAM,UAAU;CAElD,MAAM,QAAQ,UAAU,KAAK,WAAW;EACtC,OAAO,SAAS,UAAU,eAAe;EACzC;CACF,EAAE;CAEF,OACE,qBAAC,OAAO,MAAR;EACQ;EACN,OAAO;EACA;EACG;EACV,gBAAgB,UAAU;GACxB,IAAI,UAAU,MACZ,MAAM,cAAc,KAAK;EAE7B;EATF,UAAA,CAWE,qBAAC,OAAO,SAAR;GACE,kBAAe;GACf,cAAW;GACX,GAAI;GAHN,UAAA,CAKE,oBAAC,OAAO,OAAR,CAAe,CAAA,GACf,oBAAC,OAAO,MAAR,CAAc,CAAA,CACA;EAEhB,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,uBAAuB,cAAc"}
@@ -0,0 +1,48 @@
1
+ import { TableWith } from "../../../types/table-with.js";
2
+ import "../../../types/index.js";
3
+ import { Column, RowData, TableFeatures } from "@tanstack/react-table";
4
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
5
+ import { MergeOverride } from "@lucasbernardosn/utils";
6
+ //#region src/components/data-table/toolbar/data-table-sort-column-select.d.ts
7
+ export type DataTableSortColumnSelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
8
+ /** A tabela. Exige `rowSortingFeature`. */
9
+ table: TableWith<TFeatures, TData, 'rowSortingFeature'>;
10
+ /**
11
+ * O nome de uma coluna.
12
+ * @default getDefaultColumnLabel: o `header` quando é texto, e o id quando não é
13
+ */
14
+ getLabel?: (column: Column<TFeatures, TData>) => string;
15
+ /**
16
+ * O nome da opção que tira a ordenação.
17
+ * @default 'Sem ordenação'
18
+ */
19
+ noSortingLabel?: string;
20
+ /**
21
+ * O tamanho do select.
22
+ * @default 'sm'
23
+ */
24
+ size?: Select.RootProps<string>['size'];
25
+ }>;
26
+ /**
27
+ * O select da coluna da ordenação, para onde o cabeçalho não serve de controle, como no celular.
28
+ * Lista as colunas visíveis que ordenam, e "Sem ordenação" no topo; a coluna da ordenação atual
29
+ * entra no fim mesmo escondida. Com `enableSortingRemoval: false` na tabela, que deixa a lista
30
+ * sempre ordenada, o "Sem ordenação" não aparece. Escolher uma coluna troca a
31
+ * ordenação inteira por ela, na direção atual, ou na primeira da coluna sem ordenação antes. Com
32
+ * a ordenação por várias colunas, mostra a primeira.
33
+ *
34
+ * Vai junto com o `DataTable.SortDirectionSelect`. Quando aparecem é do app, pela `className`
35
+ * (ex.: `sm:hidden`). Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <DataTable.SortColumnSelect table={table} className="sm:hidden" />
40
+ * <DataTable.SortDirectionSelect table={table} className="sm:hidden" />
41
+ * ```
42
+ */
43
+ export declare const DataTableSortColumnSelect: {
44
+ <TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSortColumnSelectProps<TFeatures, TData>): import("react").JSX.Element;
45
+ displayName: string;
46
+ };
47
+ //#endregion
48
+ //# sourceMappingURL=data-table-sort-column-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-column-select.d.ts","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-sort-column-select.tsx"],"mappings":";;;;;;YAWY,+BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,OAAO;;EAGL,OAAO,UAAU,WAAW;;;;;EAK5B,YAAY,QAAQ,OAAO,WAAW;;;;;EAKtC;;;;;EAKA,OAAO,OAAO;;;;;;;;;;;;;;;;;;;qBAwBL;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,+BAA+B,WAAW,yBAAM,IAAA"}
@@ -0,0 +1,79 @@
1
+ import { getDefaultColumnLabel } from "../../../utils/get-default-column-label.js";
2
+ import { hasColumnFeature, hasTableFeature } from "../../../utils/has-feature.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { useSelector } from "@tanstack/react-store";
5
+ import { Select } from "@lucasbernardosn/react-ui/collections/select";
6
+ //#region src/components/data-table/toolbar/data-table-sort-column-select.tsx
7
+ /** O valor da opção que tira a ordenação. Um id de coluna nunca é vazio. */
8
+ const NO_SORTING = "";
9
+ /**
10
+ * O select da coluna da ordenação, para onde o cabeçalho não serve de controle, como no celular.
11
+ * Lista as colunas visíveis que ordenam, e "Sem ordenação" no topo; a coluna da ordenação atual
12
+ * entra no fim mesmo escondida. Com `enableSortingRemoval: false` na tabela, que deixa a lista
13
+ * sempre ordenada, o "Sem ordenação" não aparece. Escolher uma coluna troca a
14
+ * ordenação inteira por ela, na direção atual, ou na primeira da coluna sem ordenação antes. Com
15
+ * a ordenação por várias colunas, mostra a primeira.
16
+ *
17
+ * Vai junto com o `DataTable.SortDirectionSelect`. Quando aparecem é do app, pela `className`
18
+ * (ex.: `sm:hidden`). Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <DataTable.SortColumnSelect table={table} className="sm:hidden" />
23
+ * <DataTable.SortDirectionSelect table={table} className="sm:hidden" />
24
+ * ```
25
+ */
26
+ const DataTableSortColumnSelect = (props) => {
27
+ const { table, getLabel = getDefaultColumnLabel, noSortingLabel = "Sem ordenação", size = "sm", disabled, ...rest } = props;
28
+ /** Re-renderiza quando a primeira coluna da ordenação muda. */
29
+ const sortedColumnId = useSelector(table.atoms.sorting, (sorting) => sorting[0]?.id ?? NO_SORTING);
30
+ const sortableColumns = useSelector(table.store, () => hasTableFeature(table, "columnVisibilityFeature") ? table.getVisibleLeafColumns() : table.getAllLeafColumns()).filter((column) => hasColumnFeature(column, "rowSortingFeature") && column.getCanSort());
31
+ /**
32
+ * A coluna da ordenação entra no fim mesmo fora da lista: escondida, ou sem a ordenação pelo
33
+ * usuário mas ordenada pelo código. Sem ela, o trigger mostraria o id.
34
+ */
35
+ const sortedColumn = sortedColumnId === NO_SORTING || sortableColumns.some((column) => column.id === sortedColumnId) ? void 0 : table.getColumn(sortedColumnId);
36
+ const items = [...table.options.enableSortingRemoval !== false ? [{
37
+ label: noSortingLabel,
38
+ value: NO_SORTING
39
+ }] : [], ...[...sortableColumns, ...sortedColumn ? [sortedColumn] : []].map((column) => ({
40
+ label: getLabel(column),
41
+ value: column.id
42
+ }))];
43
+ const handleValueChange = (columnId) => {
44
+ if (columnId === null || columnId === NO_SORTING) {
45
+ table.resetSorting(true);
46
+ return;
47
+ }
48
+ const column = table.getColumn(columnId);
49
+ if (!(column && hasColumnFeature(column, "rowSortingFeature"))) return;
50
+ table.setSorting((sorting) => [{
51
+ id: columnId,
52
+ desc: sorting[0]?.desc ?? column.getFirstSortDir() === "desc"
53
+ }]);
54
+ };
55
+ return /* @__PURE__ */ jsxs(Select.Root, {
56
+ size,
57
+ value: sortedColumnId,
58
+ items,
59
+ disabled,
60
+ onValueChange: handleValueChange,
61
+ children: [/* @__PURE__ */ jsxs(Select.Trigger, {
62
+ "data-component": "DataTable.SortColumnSelect",
63
+ "aria-label": "Ordenar por",
64
+ ...rest,
65
+ children: [/* @__PURE__ */ jsx(Select.Value, {}), /* @__PURE__ */ jsx(Select.Icon, {})]
66
+ }), /* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
67
+ alignItemWithTrigger: false,
68
+ children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: items.map((item) => /* @__PURE__ */ jsxs(Select.Item, {
69
+ value: item.value,
70
+ children: [/* @__PURE__ */ jsx(Select.ItemIndicator, {}), /* @__PURE__ */ jsx(Select.ItemText, { children: item.label })]
71
+ }, item.value)) }) })
72
+ }) })]
73
+ });
74
+ };
75
+ DataTableSortColumnSelect.displayName = "DataTable.SortColumnSelect";
76
+ //#endregion
77
+ export { DataTableSortColumnSelect };
78
+
79
+ //# sourceMappingURL=data-table-sort-column-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-column-select.js","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-sort-column-select.tsx"],"sourcesContent":["import { Select } from '@lucasbernardosn/react-ui/collections/select';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { Column, RowData, TableFeatures } from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\nimport {\n getDefaultColumnLabel,\n hasColumnFeature,\n hasTableFeature,\n} from '../../../utils';\n\nexport type DataTableSortColumnSelectProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Select.TriggerProps,\n {\n /** A tabela. Exige `rowSortingFeature`. */\n table: TableWith<TFeatures, TData, 'rowSortingFeature'>;\n /**\n * O nome de uma coluna.\n * @default getDefaultColumnLabel: o `header` quando é texto, e o id quando não é\n */\n getLabel?: (column: Column<TFeatures, TData>) => string;\n /**\n * O nome da opção que tira a ordenação.\n * @default 'Sem ordenação'\n */\n noSortingLabel?: string;\n /**\n * O tamanho do select.\n * @default 'sm'\n */\n size?: Select.RootProps<string>['size'];\n }\n>;\n\n/** O valor da opção que tira a ordenação. Um id de coluna nunca é vazio. */\nconst NO_SORTING = '';\n\n/**\n * O select da coluna da ordenação, para onde o cabeçalho não serve de controle, como no celular.\n * Lista as colunas visíveis que ordenam, e \"Sem ordenação\" no topo; a coluna da ordenação atual\n * entra no fim mesmo escondida. Com `enableSortingRemoval: false` na tabela, que deixa a lista\n * sempre ordenada, o \"Sem ordenação\" não aparece. Escolher uma coluna troca a\n * ordenação inteira por ela, na direção atual, ou na primeira da coluna sem ordenação antes. Com\n * a ordenação por várias colunas, mostra a primeira.\n *\n * Vai junto com o `DataTable.SortDirectionSelect`. Quando aparecem é do app, pela `className`\n * (ex.: `sm:hidden`). Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.\n *\n * @example\n * ```tsx\n * <DataTable.SortColumnSelect table={table} className=\"sm:hidden\" />\n * <DataTable.SortDirectionSelect table={table} className=\"sm:hidden\" />\n * ```\n */\nexport const DataTableSortColumnSelect = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortColumnSelectProps<TFeatures, TData>,\n) => {\n const {\n table,\n getLabel = getDefaultColumnLabel,\n noSortingLabel = 'Sem ordenação',\n size = 'sm',\n disabled,\n ...rest\n } = props;\n\n /** Re-renderiza quando a primeira coluna da ordenação muda. */\n const sortedColumnId = useSelector(\n table.atoms.sorting,\n (sorting) => sorting[0]?.id ?? NO_SORTING,\n );\n\n /**\n * As colunas, que o TanStack memoiza: re-renderiza quando a ordem ou a visibilidade mudam. A\n * visibilidade é opcional, então assina o store.\n */\n const columns = useSelector(table.store, () =>\n hasTableFeature(table, 'columnVisibilityFeature')\n ? table.getVisibleLeafColumns()\n : table.getAllLeafColumns(),\n );\n\n const sortableColumns = columns.filter(\n (column) =>\n hasColumnFeature(column, 'rowSortingFeature') && column.getCanSort(),\n );\n\n /**\n * A coluna da ordenação entra no fim mesmo fora da lista: escondida, ou sem a ordenação pelo\n * usuário mas ordenada pelo código. Sem ela, o trigger mostraria o id.\n */\n const sortedColumn =\n sortedColumnId === NO_SORTING ||\n sortableColumns.some((column) => column.id === sortedColumnId)\n ? undefined\n : table.getColumn(sortedColumnId);\n\n const canRemoveSorting = table.options.enableSortingRemoval !== false;\n\n const items = [\n ...(canRemoveSorting ? [{ label: noSortingLabel, value: NO_SORTING }] : []),\n ...[...sortableColumns, ...(sortedColumn ? [sortedColumn] : [])].map(\n (column) => ({ label: getLabel(column), value: column.id }),\n ),\n ];\n\n const handleValueChange = (columnId: string | null) => {\n if (columnId === null || columnId === NO_SORTING) {\n table.resetSorting(true);\n\n return;\n }\n\n const column = table.getColumn(columnId);\n\n if (!(column && hasColumnFeature(column, 'rowSortingFeature'))) {\n return;\n }\n\n table.setSorting((sorting) => [\n {\n id: columnId,\n desc: sorting[0]?.desc ?? column.getFirstSortDir() === 'desc',\n },\n ]);\n };\n\n return (\n <Select.Root<string>\n size={size}\n value={sortedColumnId}\n items={items}\n disabled={disabled}\n onValueChange={handleValueChange}\n >\n <Select.Trigger\n data-component=\"DataTable.SortColumnSelect\"\n aria-label=\"Ordenar por\"\n {...rest}\n >\n <Select.Value />\n <Select.Icon />\n </Select.Trigger>\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\nDataTableSortColumnSelect.displayName = 'DataTable.SortColumnSelect';\n"],"mappings":";;;;;;;AAsCA,MAAM,aAAa;;;;;;;;;;;;;;;;;;AAmBnB,MAAa,6BAIX,UACG;CACH,MAAM,EACJ,OACA,WAAW,uBACX,iBAAiB,iBACjB,OAAO,MACP,UACA,GAAG,SACD;;CAGJ,MAAM,iBAAiB,YACrB,MAAM,MAAM,UACX,YAAY,QAAQ,EAAE,EAAE,MAAM,UACjC;CAYA,MAAM,kBANU,YAAY,MAAM,aAChC,gBAAgB,OAAO,yBAAyB,IAC5C,MAAM,sBAAsB,IAC5B,MAAM,kBAAkB,CAGA,CAAC,CAAC,QAC7B,WACC,iBAAiB,QAAQ,mBAAmB,KAAK,OAAO,WAAW,CACvE;;;;;CAMA,MAAM,eACJ,mBAAmB,cACnB,gBAAgB,MAAM,WAAW,OAAO,OAAO,cAAc,IACzD,KAAA,IACA,MAAM,UAAU,cAAc;CAIpC,MAAM,QAAQ,CACZ,GAHuB,MAAM,QAAQ,yBAAyB,QAGvC,CAAC;EAAE,OAAO;EAAgB,OAAO;CAAW,CAAC,IAAI,CAAC,GACzE,GAAG,CAAC,GAAG,iBAAiB,GAAI,eAAe,CAAC,YAAY,IAAI,CAAC,CAAE,CAAC,CAAC,KAC9D,YAAY;EAAE,OAAO,SAAS,MAAM;EAAG,OAAO,OAAO;CAAG,EAC3D,CACF;CAEA,MAAM,qBAAqB,aAA4B;EACrD,IAAI,aAAa,QAAQ,aAAa,YAAY;GAChD,MAAM,aAAa,IAAI;GAEvB;EACF;EAEA,MAAM,SAAS,MAAM,UAAU,QAAQ;EAEvC,IAAI,EAAE,UAAU,iBAAiB,QAAQ,mBAAmB,IAC1D;EAGF,MAAM,YAAY,YAAY,CAC5B;GACE,IAAI;GACJ,MAAM,QAAQ,EAAE,EAAE,QAAQ,OAAO,gBAAgB,MAAM;EACzD,CACF,CAAC;CACH;CAEA,OACE,qBAAC,OAAO,MAAR;EACQ;EACN,OAAO;EACA;EACG;EACV,eAAe;EALjB,UAAA,CAOE,qBAAC,OAAO,SAAR;GACE,kBAAe;GACf,cAAW;GACX,GAAI;GAHN,UAAA,CAKE,oBAAC,OAAO,OAAR,CAAe,CAAA,GACf,oBAAC,OAAO,MAAR,CAAc,CAAA,CACA;EAEhB,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,0BAA0B,cAAc"}