@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.
- package/LICENSE +21 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/column-menu/column-menu-check.d.ts +8 -0
- package/dist/components/column-menu/column-menu-check.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-check.js +17 -0
- package/dist/components/column-menu/column-menu-check.js.map +1 -0
- package/dist/components/column-menu/column-menu-hide-item.d.ts +23 -0
- package/dist/components/column-menu/column-menu-hide-item.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-hide-item.js +28 -0
- package/dist/components/column-menu/column-menu-hide-item.js.map +1 -0
- package/dist/components/column-menu/column-menu-labels.d.ts +21 -0
- package/dist/components/column-menu/column-menu-labels.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-labels.js +14 -0
- package/dist/components/column-menu/column-menu-labels.js.map +1 -0
- package/dist/components/column-menu/column-menu-pin-items.d.ts +25 -0
- package/dist/components/column-menu/column-menu-pin-items.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-pin-items.js +65 -0
- package/dist/components/column-menu/column-menu-pin-items.js.map +1 -0
- package/dist/components/column-menu/column-menu-popup.d.ts +39 -0
- package/dist/components/column-menu/column-menu-popup.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-popup.js +66 -0
- package/dist/components/column-menu/column-menu-popup.js.map +1 -0
- package/dist/components/column-menu/column-menu-root.d.ts +34 -0
- package/dist/components/column-menu/column-menu-root.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-root.js +36 -0
- package/dist/components/column-menu/column-menu-root.js.map +1 -0
- package/dist/components/column-menu/column-menu-sort-items.d.ts +29 -0
- package/dist/components/column-menu/column-menu-sort-items.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-sort-items.js +61 -0
- package/dist/components/column-menu/column-menu-sort-items.js.map +1 -0
- package/dist/components/column-menu/column-menu-trigger.d.ts +23 -0
- package/dist/components/column-menu/column-menu-trigger.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu-trigger.js +38 -0
- package/dist/components/column-menu/column-menu-trigger.js.map +1 -0
- package/dist/components/column-menu/index.d.ts +2 -0
- package/dist/components/column-menu/index.js +2 -0
- package/dist/components/column-menu/index.parts.d.ts +13 -0
- package/dist/components/column-menu/index.parts.d.ts.map +1 -0
- package/dist/components/column-menu/index.parts.js +20 -0
- package/dist/components/column-menu/index.parts.js.map +1 -0
- package/dist/components/columns-panel/columns-panel-item.d.ts +31 -0
- package/dist/components/columns-panel/columns-panel-item.d.ts.map +1 -0
- package/dist/components/columns-panel/columns-panel-item.js +92 -0
- package/dist/components/columns-panel/columns-panel-item.js.map +1 -0
- package/dist/components/columns-panel/columns-panel-root.d.ts +51 -0
- package/dist/components/columns-panel/columns-panel-root.d.ts.map +1 -0
- package/dist/components/columns-panel/columns-panel-root.js +134 -0
- package/dist/components/columns-panel/columns-panel-root.js.map +1 -0
- package/dist/components/columns-panel/get-columns-panel-column-order.d.ts +16 -0
- package/dist/components/columns-panel/get-columns-panel-column-order.d.ts.map +1 -0
- package/dist/components/columns-panel/get-columns-panel-column-order.js +24 -0
- package/dist/components/columns-panel/get-columns-panel-column-order.js.map +1 -0
- package/dist/components/columns-panel/index.d.ts +2 -0
- package/dist/components/columns-panel/index.js +2 -0
- package/dist/components/columns-panel/index.parts.d.ts +8 -0
- package/dist/components/columns-panel/index.parts.d.ts.map +1 -0
- package/dist/components/columns-panel/index.parts.js +12 -0
- package/dist/components/columns-panel/index.parts.js.map +1 -0
- package/dist/components/data-table/body/data-table-body.d.ts +58 -0
- package/dist/components/data-table/body/data-table-body.d.ts.map +1 -0
- package/dist/components/data-table/body/data-table-body.js +99 -0
- package/dist/components/data-table/body/data-table-body.js.map +1 -0
- package/dist/components/data-table/body/data-table-cell.d.ts +26 -0
- package/dist/components/data-table/body/data-table-cell.d.ts.map +1 -0
- package/dist/components/data-table/body/data-table-cell.js +80 -0
- package/dist/components/data-table/body/data-table-cell.js.map +1 -0
- package/dist/components/data-table/body/data-table-empty.d.ts +38 -0
- package/dist/components/data-table/body/data-table-empty.d.ts.map +1 -0
- package/dist/components/data-table/body/data-table-empty.js +71 -0
- package/dist/components/data-table/body/data-table-empty.js.map +1 -0
- package/dist/components/data-table/body/data-table-row-focus.d.ts +32 -0
- package/dist/components/data-table/body/data-table-row-focus.d.ts.map +1 -0
- package/dist/components/data-table/body/data-table-row-focus.js +58 -0
- package/dist/components/data-table/body/data-table-row-focus.js.map +1 -0
- package/dist/components/data-table/body/data-table-row.d.ts +67 -0
- package/dist/components/data-table/body/data-table-row.d.ts.map +1 -0
- package/dist/components/data-table/body/data-table-row.js +150 -0
- package/dist/components/data-table/body/data-table-row.js.map +1 -0
- package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts +19 -0
- package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts.map +1 -0
- package/dist/components/data-table/body/use-data-table-row-focus-recovery.js +64 -0
- package/dist/components/data-table/body/use-data-table-row-focus-recovery.js.map +1 -0
- package/dist/components/data-table/header/data-table-header-button.d.ts +25 -0
- package/dist/components/data-table/header/data-table-header-button.d.ts.map +1 -0
- package/dist/components/data-table/header/data-table-header-button.js +57 -0
- package/dist/components/data-table/header/data-table-header-button.js.map +1 -0
- package/dist/components/data-table/header/data-table-header-cell.d.ts +34 -0
- package/dist/components/data-table/header/data-table-header-cell.d.ts.map +1 -0
- package/dist/components/data-table/header/data-table-header-cell.js +97 -0
- package/dist/components/data-table/header/data-table-header-cell.js.map +1 -0
- package/dist/components/data-table/header/data-table-header-content.d.ts +21 -0
- package/dist/components/data-table/header/data-table-header-content.d.ts.map +1 -0
- package/dist/components/data-table/header/data-table-header-content.js +37 -0
- package/dist/components/data-table/header/data-table-header-content.js.map +1 -0
- package/dist/components/data-table/header/data-table-header-row.d.ts +15 -0
- package/dist/components/data-table/header/data-table-header-row.d.ts.map +1 -0
- package/dist/components/data-table/header/data-table-header-row.js +28 -0
- package/dist/components/data-table/header/data-table-header-row.js.map +1 -0
- package/dist/components/data-table/header/data-table-header.d.ts +46 -0
- package/dist/components/data-table/header/data-table-header.d.ts.map +1 -0
- package/dist/components/data-table/header/data-table-header.js +80 -0
- package/dist/components/data-table/header/data-table-header.js.map +1 -0
- package/dist/components/data-table/index.d.ts +2 -0
- package/dist/components/data-table/index.js +2 -0
- package/dist/components/data-table/index.parts.d.ts +32 -0
- package/dist/components/data-table/index.parts.d.ts.map +1 -0
- package/dist/components/data-table/index.parts.js +60 -0
- package/dist/components/data-table/index.parts.js.map +1 -0
- package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts +16 -0
- package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts.map +1 -0
- package/dist/components/data-table/loading/get-data-table-loading-without-rows.js +18 -0
- package/dist/components/data-table/loading/get-data-table-loading-without-rows.js.map +1 -0
- package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts +16 -0
- package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts.map +1 -0
- package/dist/components/data-table/loading/use-data-table-loading-inert.js +54 -0
- package/dist/components/data-table/loading/use-data-table-loading-inert.js.map +1 -0
- package/dist/components/data-table/loading/use-data-table-loading.d.ts +13 -0
- package/dist/components/data-table/loading/use-data-table-loading.d.ts.map +1 -0
- package/dist/components/data-table/loading/use-data-table-loading.js +40 -0
- package/dist/components/data-table/loading/use-data-table-loading.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-button.d.ts +45 -0
- package/dist/components/data-table/pagination/data-table-page-button.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-button.js +67 -0
- package/dist/components/data-table/pagination/data-table-page-button.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-size-select.d.ts +47 -0
- package/dist/components/data-table/pagination/data-table-page-size-select.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-size-select.js +68 -0
- package/dist/components/data-table/pagination/data-table-page-size-select.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-status.d.ts +43 -0
- package/dist/components/data-table/pagination/data-table-page-status.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-page-status.js +48 -0
- package/dist/components/data-table/pagination/data-table-page-status.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-pagination.d.ts +38 -0
- package/dist/components/data-table/pagination/data-table-pagination.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-pagination.js +87 -0
- package/dist/components/data-table/pagination/data-table-pagination.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-row-range.d.ts +49 -0
- package/dist/components/data-table/pagination/data-table-row-range.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-row-range.js +63 -0
- package/dist/components/data-table/pagination/data-table-row-range.js.map +1 -0
- package/dist/components/data-table/pagination/data-table-selected-count.d.ts +37 -0
- package/dist/components/data-table/pagination/data-table-selected-count.d.ts.map +1 -0
- package/dist/components/data-table/pagination/data-table-selected-count.js +44 -0
- package/dist/components/data-table/pagination/data-table-selected-count.js.map +1 -0
- package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts +15 -0
- package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts.map +1 -0
- package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js +38 -0
- package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.js.map +1 -0
- package/dist/components/data-table/resize/data-table-resize-handle.d.ts +48 -0
- package/dist/components/data-table/resize/data-table-resize-handle.d.ts.map +1 -0
- package/dist/components/data-table/resize/data-table-resize-handle.js +115 -0
- package/dist/components/data-table/resize/data-table-resize-handle.js.map +1 -0
- package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts +18 -0
- package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts.map +1 -0
- package/dist/components/data-table/resize/use-data-table-resize-scroll.js +55 -0
- package/dist/components/data-table/resize/use-data-table-resize-scroll.js.map +1 -0
- package/dist/components/data-table/root/data-table-grid-classes.d.ts +10 -0
- package/dist/components/data-table/root/data-table-grid-classes.d.ts.map +1 -0
- package/dist/components/data-table/root/data-table-grid-classes.js +22 -0
- package/dist/components/data-table/root/data-table-grid-classes.js.map +1 -0
- package/dist/components/data-table/root/data-table-root.d.ts +41 -0
- package/dist/components/data-table/root/data-table-root.d.ts.map +1 -0
- package/dist/components/data-table/root/data-table-root.js +72 -0
- package/dist/components/data-table/root/data-table-root.js.map +1 -0
- package/dist/components/data-table/root/data-table-scroll-area.d.ts +21 -0
- package/dist/components/data-table/root/data-table-scroll-area.d.ts.map +1 -0
- package/dist/components/data-table/root/data-table-scroll-area.js +127 -0
- package/dist/components/data-table/root/data-table-scroll-area.js.map +1 -0
- package/dist/components/data-table/root/get-data-table-column-layout.d.ts +45 -0
- package/dist/components/data-table/root/get-data-table-column-layout.d.ts.map +1 -0
- package/dist/components/data-table/root/get-data-table-column-layout.js +55 -0
- package/dist/components/data-table/root/get-data-table-column-layout.js.map +1 -0
- package/dist/components/data-table/root/get-data-table-column-pinning.d.ts +46 -0
- package/dist/components/data-table/root/get-data-table-column-pinning.d.ts.map +1 -0
- package/dist/components/data-table/root/get-data-table-column-pinning.js +46 -0
- package/dist/components/data-table/root/get-data-table-column-pinning.js.map +1 -0
- package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts +13 -0
- package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts.map +1 -0
- package/dist/components/data-table/root/get-data-table-scroll-parent.js +20 -0
- package/dist/components/data-table/root/get-data-table-scroll-parent.js.map +1 -0
- package/dist/components/data-table/root/use-data-table-column-layout.d.ts +25 -0
- package/dist/components/data-table/root/use-data-table-column-layout.d.ts.map +1 -0
- package/dist/components/data-table/root/use-data-table-column-layout.js +106 -0
- package/dist/components/data-table/root/use-data-table-column-layout.js.map +1 -0
- package/dist/components/data-table/root/use-data-table-header-offset.d.ts +15 -0
- package/dist/components/data-table/root/use-data-table-header-offset.d.ts.map +1 -0
- package/dist/components/data-table/root/use-data-table-header-offset.js +35 -0
- package/dist/components/data-table/root/use-data-table-header-offset.js.map +1 -0
- package/dist/components/data-table/selection/data-table-row-checkbox.d.ts +33 -0
- package/dist/components/data-table/selection/data-table-row-checkbox.d.ts.map +1 -0
- package/dist/components/data-table/selection/data-table-row-checkbox.js +50 -0
- package/dist/components/data-table/selection/data-table-row-checkbox.js.map +1 -0
- package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts +31 -0
- package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts.map +1 -0
- package/dist/components/data-table/selection/data-table-select-all-checkbox.js +44 -0
- package/dist/components/data-table/selection/data-table-select-all-checkbox.js.map +1 -0
- package/dist/components/data-table/selection/selection-column-def.d.ts +54 -0
- package/dist/components/data-table/selection/selection-column-def.d.ts.map +1 -0
- package/dist/components/data-table/selection/selection-column-def.js +55 -0
- package/dist/components/data-table/selection/selection-column-def.js.map +1 -0
- package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts +26 -0
- package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts.map +1 -0
- package/dist/components/data-table/sorting/data-table-sort-indicator.js +64 -0
- package/dist/components/data-table/sorting/data-table-sort-indicator.js.map +1 -0
- package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts +31 -0
- package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts.map +1 -0
- package/dist/components/data-table/sorting/data-table-sort-trigger.js +46 -0
- package/dist/components/data-table/sorting/data-table-sort-trigger.js.map +1 -0
- package/dist/components/data-table/toolbar/data-table-density-select.d.ts +39 -0
- package/dist/components/data-table/toolbar/data-table-density-select.d.ts.map +1 -0
- package/dist/components/data-table/toolbar/data-table-density-select.js +60 -0
- package/dist/components/data-table/toolbar/data-table-density-select.js.map +1 -0
- package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts +47 -0
- package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts.map +1 -0
- package/dist/components/data-table/toolbar/data-table-sort-column-select.js +78 -0
- package/dist/components/data-table/toolbar/data-table-sort-column-select.js.map +1 -0
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts +40 -0
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts.map +1 -0
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.js +66 -0
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.js.map +1 -0
- package/dist/features/active-row/active-row-feature.d.ts +22 -0
- package/dist/features/active-row/active-row-feature.d.ts.map +1 -0
- package/dist/features/active-row/active-row-feature.js +55 -0
- package/dist/features/active-row/active-row-feature.js.map +1 -0
- package/dist/features/active-row/active-row-feature.types.d.ts +64 -0
- package/dist/features/active-row/active-row-feature.types.d.ts.map +1 -0
- package/dist/features/active-row/active-row-feature.types.js +0 -0
- package/dist/features/column-alignment/column-alignment-feature.d.ts +23 -0
- package/dist/features/column-alignment/column-alignment-feature.d.ts.map +1 -0
- package/dist/features/column-alignment/column-alignment-feature.js +34 -0
- package/dist/features/column-alignment/column-alignment-feature.js.map +1 -0
- package/dist/features/column-alignment/column-alignment-feature.types.d.ts +34 -0
- package/dist/features/column-alignment/column-alignment-feature.types.d.ts.map +1 -0
- package/dist/features/column-alignment/column-alignment-feature.types.js +0 -0
- package/dist/features/index.d.ts +9 -0
- package/dist/features/index.js +5 -0
- package/dist/features/loading/loading-feature.d.ts +30 -0
- package/dist/features/loading/loading-feature.d.ts.map +1 -0
- package/dist/features/loading/loading-feature.js +48 -0
- package/dist/features/loading/loading-feature.js.map +1 -0
- package/dist/features/loading/loading-feature.types.d.ts +50 -0
- package/dist/features/loading/loading-feature.types.d.ts.map +1 -0
- package/dist/features/loading/loading-feature.types.js +0 -0
- package/dist/features/row-density/row-density-feature.d.ts +26 -0
- package/dist/features/row-density/row-density-feature.d.ts.map +1 -0
- package/dist/features/row-density/row-density-feature.js +44 -0
- package/dist/features/row-density/row-density-feature.js.map +1 -0
- package/dist/features/row-density/row-density-feature.types.d.ts +53 -0
- package/dist/features/row-density/row-density-feature.types.d.ts.map +1 -0
- package/dist/features/row-density/row-density-feature.types.js +0 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +0 -0
- package/dist/types/table-with.d.ts +96 -0
- package/dist/types/table-with.d.ts.map +1 -0
- package/dist/types/table-with.js +0 -0
- package/dist/utils/get-default-column-label.d.ts +17 -0
- package/dist/utils/get-default-column-label.d.ts.map +1 -0
- package/dist/utils/get-default-column-label.js +18 -0
- package/dist/utils/get-default-column-label.js.map +1 -0
- package/dist/utils/has-feature.d.ts +54 -0
- package/dist/utils/has-feature.d.ts.map +1 -0
- package/dist/utils/has-feature.js +55 -0
- package/dist/utils/has-feature.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/package.json +80 -3
- 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"}
|