@lucasbernardosn/react-table 0.1.0 → 0.3.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/README.md +269 -0
- package/dist/components/column-menu/column-menu-check.js +2 -2
- package/dist/components/column-menu/column-menu-hide-item.d.ts +4 -4
- package/dist/components/column-menu/column-menu-hide-item.js +4 -5
- package/dist/components/column-menu/column-menu-hide-item.js.map +1 -1
- package/dist/components/column-menu/column-menu-pin-items.d.ts +5 -5
- package/dist/components/column-menu/column-menu-pin-items.js +5 -6
- package/dist/components/column-menu/column-menu-pin-items.js.map +1 -1
- package/dist/components/column-menu/column-menu-popup.d.ts +4 -3
- package/dist/components/column-menu/column-menu-popup.js +13 -12
- package/dist/components/column-menu/column-menu-popup.js.map +1 -1
- package/dist/components/column-menu/column-menu-root.js.map +1 -1
- package/dist/components/column-menu/column-menu-sort-items.d.ts +7 -6
- package/dist/components/column-menu/column-menu-sort-items.js +8 -7
- package/dist/components/column-menu/column-menu-sort-items.js.map +1 -1
- package/dist/components/column-menu/column-menu-trigger.d.ts +1 -1
- package/dist/components/column-menu/column-menu-trigger.js +3 -3
- package/dist/components/column-menu/column-menu-trigger.js.map +1 -1
- package/dist/components/columns-panel/columns-panel-item.d.ts +6 -3
- package/dist/components/columns-panel/columns-panel-item.js +49 -32
- package/dist/components/columns-panel/columns-panel-item.js.map +1 -1
- package/dist/components/columns-panel/columns-panel-root.d.ts +1 -1
- package/dist/components/columns-panel/columns-panel-root.js +4 -4
- package/dist/components/columns-panel/columns-panel-root.js.map +1 -1
- package/dist/components/data-table/body/data-table-body.d.ts +1 -1
- package/dist/components/data-table/body/data-table-body.js +7 -7
- package/dist/components/data-table/body/data-table-body.js.map +1 -1
- package/dist/components/data-table/body/data-table-cell.d.ts +1 -1
- package/dist/components/data-table/body/data-table-cell.js +1 -1
- package/dist/components/data-table/body/data-table-cell.js.map +1 -1
- package/dist/components/data-table/body/data-table-empty.d.ts +1 -1
- package/dist/components/data-table/body/data-table-empty.js +3 -3
- package/dist/components/data-table/body/data-table-empty.js.map +1 -1
- package/dist/components/data-table/body/data-table-row.d.ts +4 -4
- package/dist/components/data-table/body/data-table-row.js +15 -11
- package/dist/components/data-table/body/data-table-row.js.map +1 -1
- package/dist/components/data-table/header/data-table-header-cell.d.ts +1 -1
- package/dist/components/data-table/header/data-table-header-cell.js +2 -2
- package/dist/components/data-table/header/data-table-header-cell.js.map +1 -1
- package/dist/components/data-table/header/data-table-header-content.d.ts +1 -1
- package/dist/components/data-table/header/data-table-header-content.js +1 -1
- package/dist/components/data-table/header/data-table-header-content.js.map +1 -1
- package/dist/components/data-table/header/data-table-header-row.js +2 -2
- package/dist/components/data-table/header/data-table-header-row.js.map +1 -1
- package/dist/components/data-table/header/data-table-header.d.ts +1 -1
- package/dist/components/data-table/header/data-table-header.js +4 -4
- package/dist/components/data-table/header/data-table-header.js.map +1 -1
- package/dist/components/data-table/index.parts.d.ts +3 -2
- package/dist/components/data-table/index.parts.js +4 -2
- package/dist/components/data-table/index.parts.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-page-button.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-page-button.js +2 -2
- package/dist/components/data-table/pagination/data-table-page-button.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-page-size-select.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-page-size-select.js +2 -2
- package/dist/components/data-table/pagination/data-table-page-size-select.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-page-status.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-page-status.js +1 -1
- package/dist/components/data-table/pagination/data-table-page-status.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-pagination.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-pagination.js +1 -1
- package/dist/components/data-table/pagination/data-table-pagination.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-row-range.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-row-range.js +1 -1
- package/dist/components/data-table/pagination/data-table-row-range.js.map +1 -1
- package/dist/components/data-table/pagination/data-table-selected-count.d.ts +1 -1
- package/dist/components/data-table/pagination/data-table-selected-count.js +1 -1
- package/dist/components/data-table/pagination/data-table-selected-count.js.map +1 -1
- package/dist/components/data-table/resize/data-table-resize-handle.d.ts +1 -1
- package/dist/components/data-table/resize/data-table-resize-handle.js +4 -3
- package/dist/components/data-table/resize/data-table-resize-handle.js.map +1 -1
- package/dist/components/data-table/root/{data-table-grid-classes.d.ts → data-table-grid-class-names.d.ts} +3 -3
- package/dist/components/data-table/root/{data-table-grid-classes.js → data-table-grid-class-names.js} +4 -4
- package/dist/components/data-table/root/data-table-grid-class-names.js.map +1 -0
- package/dist/components/data-table/root/data-table-root.d.ts +1 -1
- package/dist/components/data-table/root/data-table-root.js +6 -6
- package/dist/components/data-table/root/data-table-root.js.map +1 -1
- package/dist/components/data-table/root/data-table-scroll-area.d.ts +14 -5
- package/dist/components/data-table/root/data-table-scroll-area.js +18 -8
- package/dist/components/data-table/root/data-table-scroll-area.js.map +1 -1
- package/dist/components/data-table/selection/data-table-row-checkbox.d.ts +1 -1
- package/dist/components/data-table/selection/data-table-row-checkbox.js +1 -1
- package/dist/components/data-table/selection/data-table-row-checkbox.js.map +1 -1
- package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts +1 -1
- package/dist/components/data-table/selection/data-table-select-all-checkbox.js +1 -1
- package/dist/components/data-table/selection/data-table-select-all-checkbox.js.map +1 -1
- package/dist/components/data-table/selection/data-table-selection-bar.d.ts +51 -0
- package/dist/components/data-table/selection/data-table-selection-bar.js +58 -0
- package/dist/components/data-table/selection/data-table-selection-bar.js.map +1 -0
- package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts +1 -1
- package/dist/components/data-table/sorting/data-table-sort-indicator.js +4 -4
- package/dist/components/data-table/sorting/data-table-sort-indicator.js.map +1 -1
- package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts +1 -1
- package/dist/components/data-table/sorting/data-table-sort-trigger.js +2 -2
- package/dist/components/data-table/sorting/data-table-sort-trigger.js.map +1 -1
- package/dist/components/data-table/toolbar/data-table-density-select.d.ts +2 -2
- package/dist/components/data-table/toolbar/data-table-density-select.js +3 -3
- package/dist/components/data-table/toolbar/data-table-density-select.js.map +1 -1
- package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts +3 -2
- package/dist/components/data-table/toolbar/data-table-sort-column-select.js +5 -4
- package/dist/components/data-table/toolbar/data-table-sort-column-select.js.map +1 -1
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts +1 -1
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.js +1 -1
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.js.map +1 -1
- package/dist/features/row-density/row-density-feature.d.ts +1 -1
- package/dist/features/row-density/row-density-feature.js +1 -1
- package/dist/features/row-density/row-density-feature.js.map +1 -1
- package/dist/features/row-density/row-density-feature.types.d.ts +1 -1
- package/package.json +12 -10
- package/dist/components/column-menu/column-menu-check.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-hide-item.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-labels.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-pin-items.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-popup.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-root.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-sort-items.d.ts.map +0 -1
- package/dist/components/column-menu/column-menu-trigger.d.ts.map +0 -1
- package/dist/components/column-menu/index.parts.d.ts.map +0 -1
- package/dist/components/columns-panel/columns-panel-item.d.ts.map +0 -1
- package/dist/components/columns-panel/columns-panel-root.d.ts.map +0 -1
- package/dist/components/columns-panel/get-columns-panel-column-order.d.ts.map +0 -1
- package/dist/components/columns-panel/index.parts.d.ts.map +0 -1
- package/dist/components/data-table/body/data-table-body.d.ts.map +0 -1
- package/dist/components/data-table/body/data-table-cell.d.ts.map +0 -1
- package/dist/components/data-table/body/data-table-empty.d.ts.map +0 -1
- package/dist/components/data-table/body/data-table-row-focus.d.ts.map +0 -1
- package/dist/components/data-table/body/data-table-row.d.ts.map +0 -1
- package/dist/components/data-table/body/use-data-table-row-focus-recovery.d.ts.map +0 -1
- package/dist/components/data-table/header/data-table-header-button.d.ts.map +0 -1
- package/dist/components/data-table/header/data-table-header-cell.d.ts.map +0 -1
- package/dist/components/data-table/header/data-table-header-content.d.ts.map +0 -1
- package/dist/components/data-table/header/data-table-header-row.d.ts.map +0 -1
- package/dist/components/data-table/header/data-table-header.d.ts.map +0 -1
- package/dist/components/data-table/index.parts.d.ts.map +0 -1
- package/dist/components/data-table/loading/get-data-table-loading-without-rows.d.ts.map +0 -1
- package/dist/components/data-table/loading/use-data-table-loading-inert.d.ts.map +0 -1
- package/dist/components/data-table/loading/use-data-table-loading.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-page-button.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-page-size-select.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-page-status.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-pagination.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-row-range.d.ts.map +0 -1
- package/dist/components/data-table/pagination/data-table-selected-count.d.ts.map +0 -1
- package/dist/components/data-table/pagination/use-data-table-page-scroll-reset.d.ts.map +0 -1
- package/dist/components/data-table/resize/data-table-resize-handle.d.ts.map +0 -1
- package/dist/components/data-table/resize/use-data-table-resize-scroll.d.ts.map +0 -1
- package/dist/components/data-table/root/data-table-grid-classes.d.ts.map +0 -1
- package/dist/components/data-table/root/data-table-grid-classes.js.map +0 -1
- package/dist/components/data-table/root/data-table-root.d.ts.map +0 -1
- package/dist/components/data-table/root/data-table-scroll-area.d.ts.map +0 -1
- package/dist/components/data-table/root/get-data-table-column-layout.d.ts.map +0 -1
- package/dist/components/data-table/root/get-data-table-column-pinning.d.ts.map +0 -1
- package/dist/components/data-table/root/get-data-table-scroll-parent.d.ts.map +0 -1
- package/dist/components/data-table/root/use-data-table-column-layout.d.ts.map +0 -1
- package/dist/components/data-table/root/use-data-table-header-offset.d.ts.map +0 -1
- package/dist/components/data-table/selection/data-table-row-checkbox.d.ts.map +0 -1
- package/dist/components/data-table/selection/data-table-select-all-checkbox.d.ts.map +0 -1
- package/dist/components/data-table/selection/selection-column-def.d.ts.map +0 -1
- package/dist/components/data-table/sorting/data-table-sort-indicator.d.ts.map +0 -1
- package/dist/components/data-table/sorting/data-table-sort-trigger.d.ts.map +0 -1
- package/dist/components/data-table/toolbar/data-table-density-select.d.ts.map +0 -1
- package/dist/components/data-table/toolbar/data-table-sort-column-select.d.ts.map +0 -1
- package/dist/components/data-table/toolbar/data-table-sort-direction-select.d.ts.map +0 -1
- package/dist/features/active-row/active-row-feature.d.ts.map +0 -1
- package/dist/features/active-row/active-row-feature.types.d.ts.map +0 -1
- package/dist/features/column-alignment/column-alignment-feature.d.ts.map +0 -1
- package/dist/features/column-alignment/column-alignment-feature.types.d.ts.map +0 -1
- package/dist/features/loading/loading-feature.d.ts.map +0 -1
- package/dist/features/loading/loading-feature.types.d.ts.map +0 -1
- package/dist/features/row-density/row-density-feature.d.ts.map +0 -1
- package/dist/features/row-density/row-density-feature.types.d.ts.map +0 -1
- package/dist/types/table-with.d.ts.map +0 -1
- package/dist/utils/get-default-column-label.d.ts.map +0 -1
- package/dist/utils/has-feature.d.ts.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
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 { ActionBar } from "@lucasbernardosn/react-ui/overlays/action-bar";
|
|
6
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
7
|
+
//#region src/components/data-table/selection/data-table-selection-bar.d.ts
|
|
8
|
+
export type DataTableSelectionBarProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<ActionBar.PopupProps, {
|
|
9
|
+
/** A tabela. Exige `rowSelectionFeature`. */
|
|
10
|
+
table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;
|
|
11
|
+
/**
|
|
12
|
+
* As ações da seleção. Recebe os ids das linhas marcadas, inclusive os de outras páginas e os
|
|
13
|
+
* de linhas que não estão carregadas: o app resolve o id para o registro.
|
|
14
|
+
*/
|
|
15
|
+
children?: (selectedIds: string[]) => React.ReactNode;
|
|
16
|
+
/** A posição da barra no rodapé da tela. */
|
|
17
|
+
placement?: ActionBar.RootProps['placement'];
|
|
18
|
+
/**
|
|
19
|
+
* O texto lido pelo leitor de tela no resumo, que limpa a seleção.
|
|
20
|
+
* @default 'Limpar seleção'
|
|
21
|
+
*/
|
|
22
|
+
clearLabel?: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* A barra de ações da seleção, fixa no rodapé da tela: aparece com ao menos uma linha marcada e
|
|
26
|
+
* some ao limpar. Monta o `ActionBar` do `ui` e liga à tabela o que é igual em toda lista: a
|
|
27
|
+
* abertura pela contagem, o texto do resumo e a limpeza da seleção.
|
|
28
|
+
*
|
|
29
|
+
* O resumo ("3 selecionadas") é o botão que limpa a seleção, e o Esc também a limpa. As ações são
|
|
30
|
+
* do app: entram como `children`, que recebe os ids marcados. A barra não confirma nada nem sabe
|
|
31
|
+
* o que as ações fazem.
|
|
32
|
+
*
|
|
33
|
+
* Os ids vêm do estado da seleção e valem para toda a tabela, e não só para a página à vista.
|
|
34
|
+
* Quando um filtro muda as linhas, a seleção continua com ids que sumiram da tela: quem filtra
|
|
35
|
+
* decide se a limpa (`table.resetRowSelection()`).
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <DataTable.SelectionBar table={table}>
|
|
40
|
+
* {(selectedIds) => (
|
|
41
|
+
* <Button onClick={() => removeAll(selectedIds)}>Excluir</Button>
|
|
42
|
+
* )}
|
|
43
|
+
* </DataTable.SelectionBar>
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare const DataTableSelectionBar: {
|
|
47
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSelectionBarProps<TFeatures, TData>): React.JSX.Element;
|
|
48
|
+
displayName: string;
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
//# sourceMappingURL=data-table-selection-bar.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { DataTableSelectedCount } from "../pagination/data-table-selected-count.js";
|
|
2
|
+
import { useSelector } from "@tanstack/react-store";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { ActionBar } from "@lucasbernardosn/react-ui/overlays/action-bar";
|
|
5
|
+
//#region src/components/data-table/selection/data-table-selection-bar.tsx
|
|
6
|
+
/**
|
|
7
|
+
* A barra de ações da seleção, fixa no rodapé da tela: aparece com ao menos uma linha marcada e
|
|
8
|
+
* some ao limpar. Monta o `ActionBar` do `ui` e liga à tabela o que é igual em toda lista: a
|
|
9
|
+
* abertura pela contagem, o texto do resumo e a limpeza da seleção.
|
|
10
|
+
*
|
|
11
|
+
* O resumo ("3 selecionadas") é o botão que limpa a seleção, e o Esc também a limpa. As ações são
|
|
12
|
+
* do app: entram como `children`, que recebe os ids marcados. A barra não confirma nada nem sabe
|
|
13
|
+
* o que as ações fazem.
|
|
14
|
+
*
|
|
15
|
+
* Os ids vêm do estado da seleção e valem para toda a tabela, e não só para a página à vista.
|
|
16
|
+
* Quando um filtro muda as linhas, a seleção continua com ids que sumiram da tela: quem filtra
|
|
17
|
+
* decide se a limpa (`table.resetRowSelection()`).
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <DataTable.SelectionBar table={table}>
|
|
22
|
+
* {(selectedIds) => (
|
|
23
|
+
* <Button onClick={() => removeAll(selectedIds)}>Excluir</Button>
|
|
24
|
+
* )}
|
|
25
|
+
* </DataTable.SelectionBar>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
const DataTableSelectionBar = (props) => {
|
|
29
|
+
const { table, children, placement, clearLabel = "Limpar seleção", ...rest } = props;
|
|
30
|
+
/** Os ids marcados: o estado só guarda as linhas marcadas. Re-renderiza quando muda. */
|
|
31
|
+
const selectedIds = useSelector(table.atoms.rowSelection, (rowSelection) => Object.keys(rowSelection));
|
|
32
|
+
return /* @__PURE__ */ jsx(ActionBar.Root, {
|
|
33
|
+
placement,
|
|
34
|
+
open: selectedIds.length > 0,
|
|
35
|
+
onOpenChange: (open) => {
|
|
36
|
+
if (!open) table.resetRowSelection(true);
|
|
37
|
+
},
|
|
38
|
+
children: /* @__PURE__ */ jsx(ActionBar.Portal, { children: /* @__PURE__ */ jsxs(ActionBar.Popup, {
|
|
39
|
+
"data-component": "DataTable.SelectionBar",
|
|
40
|
+
...rest,
|
|
41
|
+
children: [/* @__PURE__ */ jsxs(ActionBar.SelectionTrigger, {
|
|
42
|
+
onClick: () => table.resetRowSelection(true),
|
|
43
|
+
children: [/* @__PURE__ */ jsx(DataTableSelectedCount, {
|
|
44
|
+
table,
|
|
45
|
+
className: "text-gray-12"
|
|
46
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
47
|
+
className: "sr-only",
|
|
48
|
+
children: clearLabel
|
|
49
|
+
})]
|
|
50
|
+
}), children?.(selectedIds)]
|
|
51
|
+
}) })
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
DataTableSelectionBar.displayName = "DataTable.SelectionBar";
|
|
55
|
+
//#endregion
|
|
56
|
+
export { DataTableSelectionBar };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=data-table-selection-bar.js.map
|
|
@@ -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/ts-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"}
|
|
@@ -2,7 +2,7 @@ import { HeaderWith } from "../../../types/table-with.js";
|
|
|
2
2
|
import "../../../types/index.js";
|
|
3
3
|
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
4
|
import { useRender } from "@base-ui/react";
|
|
5
|
-
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
6
6
|
//#region src/components/data-table/sorting/data-table-sort-indicator.d.ts
|
|
7
7
|
export type DataTableSortIndicatorProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
|
|
8
8
|
/** O header da coluna. Exige `rowSortingFeature`. */
|
|
@@ -1,9 +1,9 @@
|
|
|
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
1
|
import { mergeProps, useRender } from "@base-ui/react";
|
|
5
|
-
import { useSelector } from "@tanstack/react-store";
|
|
6
2
|
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
3
|
+
import { useSelector } from "@tanstack/react-store";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { CaretDownIcon, CaretUpDownIcon, CaretUpIcon } from "@phosphor-icons/react";
|
|
6
|
+
import { Icon } from "@lucasbernardosn/react-ui/display/icon";
|
|
7
7
|
//#region src/components/data-table/sorting/data-table-sort-indicator.tsx
|
|
8
8
|
/**
|
|
9
9
|
* O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna
|
|
@@ -1 +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"}
|
|
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/ts-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"}
|
|
@@ -2,7 +2,7 @@ import { HeaderWith } from "../../../types/table-with.js";
|
|
|
2
2
|
import "../../../types/index.js";
|
|
3
3
|
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
4
|
import { useRender } from "@base-ui/react";
|
|
5
|
-
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
6
6
|
//#region src/components/data-table/sorting/data-table-sort-trigger.d.ts
|
|
7
7
|
export type DataTableSortTriggerProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'button'>, {
|
|
8
8
|
/** O header da coluna. Exige `rowSortingFeature`. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DataTableHeaderButton } from "../header/data-table-header-button.js";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
2
|
import { mergeProps } from "@base-ui/react";
|
|
4
|
-
import { useSelector } from "@tanstack/react-store";
|
|
5
3
|
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
4
|
+
import { useSelector } from "@tanstack/react-store";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region src/components/data-table/sorting/data-table-sort-trigger.tsx
|
|
7
7
|
/**
|
|
8
8
|
* O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo
|
|
@@ -1 +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"}
|
|
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/ts-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"}
|
|
@@ -4,14 +4,14 @@ import { RowDensity } from "../../../features/row-density/row-density-feature.ty
|
|
|
4
4
|
import "../../../features/index.js";
|
|
5
5
|
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
6
6
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
7
|
-
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
7
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
8
8
|
//#region src/components/data-table/toolbar/data-table-density-select.d.ts
|
|
9
9
|
export type DataTableDensitySelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
|
|
10
10
|
/** A tabela. Exige `rowDensityFeature`. */
|
|
11
11
|
table: TableWith<TFeatures, TData, 'rowDensityFeature'>;
|
|
12
12
|
/**
|
|
13
13
|
* O nome de cada densidade.
|
|
14
|
-
* @default { compact: 'Compacta', standard: 'Padrão',
|
|
14
|
+
* @default { compact: 'Compacta', standard: 'Padrão', airy: 'Arejada' }
|
|
15
15
|
*/
|
|
16
16
|
labels?: Partial<Record<RowDensity, string>>;
|
|
17
17
|
/**
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
1
|
import { useSelector } from "@tanstack/react-store";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
4
4
|
//#region src/components/data-table/toolbar/data-table-density-select.tsx
|
|
5
5
|
const DEFAULT_LABELS = {
|
|
6
6
|
compact: "Compacta",
|
|
7
7
|
standard: "Padrão",
|
|
8
|
-
|
|
8
|
+
airy: "Arejada"
|
|
9
9
|
};
|
|
10
10
|
const DENSITIES = [
|
|
11
11
|
"compact",
|
|
12
12
|
"standard",
|
|
13
|
-
"
|
|
13
|
+
"airy"
|
|
14
14
|
];
|
|
15
15
|
/**
|
|
16
16
|
* O select da densidade das linhas, para a barra de ferramentas. Sem rótulo visível: o nome para
|
|
@@ -1 +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',
|
|
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/ts-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"}
|
|
@@ -2,7 +2,7 @@ import { TableWith } from "../../../types/table-with.js";
|
|
|
2
2
|
import "../../../types/index.js";
|
|
3
3
|
import { Column, RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
4
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
5
|
-
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
6
6
|
//#region src/components/data-table/toolbar/data-table-sort-column-select.d.ts
|
|
7
7
|
export type DataTableSortColumnSelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
|
|
8
8
|
/** A tabela. Exige `rowSortingFeature`. */
|
|
@@ -26,7 +26,8 @@ export type DataTableSortColumnSelectProps<TFeatures extends TableFeatures, TDat
|
|
|
26
26
|
/**
|
|
27
27
|
* O select da coluna da ordenação, para onde o cabeçalho não serve de controle, como no celular.
|
|
28
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.
|
|
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
|
|
30
31
|
* ordenação inteira por ela, na direção atual, ou na primeira da coluna sem ordenação antes. Com
|
|
31
32
|
* a ordenação por várias colunas, mostra a primeira.
|
|
32
33
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getDefaultColumnLabel } from "../../../utils/get-default-column-label.js";
|
|
2
2
|
import { hasColumnFeature, hasTableFeature } from "../../../utils/has-feature.js";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
3
|
import { useSelector } from "@tanstack/react-store";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
6
6
|
//#region src/components/data-table/toolbar/data-table-sort-column-select.tsx
|
|
7
7
|
/** O valor da opção que tira a ordenação. Um id de coluna nunca é vazio. */
|
|
@@ -9,7 +9,8 @@ const NO_SORTING = "";
|
|
|
9
9
|
/**
|
|
10
10
|
* O select da coluna da ordenação, para onde o cabeçalho não serve de controle, como no celular.
|
|
11
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.
|
|
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
|
|
13
14
|
* ordenação inteira por ela, na direção atual, ou na primeira da coluna sem ordenação antes. Com
|
|
14
15
|
* a ordenação por várias colunas, mostra a primeira.
|
|
15
16
|
*
|
|
@@ -32,10 +33,10 @@ const DataTableSortColumnSelect = (props) => {
|
|
|
32
33
|
* usuário mas ordenada pelo código. Sem ela, o trigger mostraria o id.
|
|
33
34
|
*/
|
|
34
35
|
const sortedColumn = sortedColumnId === NO_SORTING || sortableColumns.some((column) => column.id === sortedColumnId) ? void 0 : table.getColumn(sortedColumnId);
|
|
35
|
-
const items = [{
|
|
36
|
+
const items = [...table.options.enableSortingRemoval !== false ? [{
|
|
36
37
|
label: noSortingLabel,
|
|
37
38
|
value: NO_SORTING
|
|
38
|
-
}, ...[...sortableColumns, ...sortedColumn ? [sortedColumn] : []].map((column) => ({
|
|
39
|
+
}] : [], ...[...sortableColumns, ...sortedColumn ? [sortedColumn] : []].map((column) => ({
|
|
39
40
|
label: getLabel(column),
|
|
40
41
|
value: column.id
|
|
41
42
|
}))];
|
|
@@ -1 +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. 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 items = [\n { 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
|
|
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/ts-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"}
|
|
@@ -2,7 +2,7 @@ import { TableWith } from "../../../types/table-with.js";
|
|
|
2
2
|
import "../../../types/index.js";
|
|
3
3
|
import { RowData, SortDirection, TableFeatures } from "@tanstack/react-table";
|
|
4
4
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
5
|
-
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/ts-utils";
|
|
6
6
|
//#region src/components/data-table/toolbar/data-table-sort-direction-select.d.ts
|
|
7
7
|
export type DataTableSortDirectionSelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
|
|
8
8
|
/** A tabela. Exige `rowSortingFeature`. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
1
|
import { useSelector } from "@tanstack/react-store";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
4
4
|
//#region src/components/data-table/toolbar/data-table-sort-direction-select.tsx
|
|
5
5
|
const DEFAULT_LABELS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-sort-direction-select.js","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-sort-direction-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 {\n RowData,\n SortDirection,\n TableFeatures,\n} from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\n\nexport type DataTableSortDirectionSelectProps<\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 cada direção.\n * @default { asc: 'Crescente', desc: 'Decrescente' }\n */\n labels?: Partial<Record<SortDirection, string>>;\n /**\n * O tamanho do select.\n * @default 'sm'\n */\n size?: Select.RootProps<SortDirection>['size'];\n }\n>;\n\nconst DEFAULT_LABELS: Record<SortDirection, string> = {\n asc: 'Crescente',\n desc: 'Decrescente',\n};\n\nconst DIRECTIONS: SortDirection[] = ['asc', 'desc'];\n\n/**\n * O select da direção da ordenação, para ir junto com o `DataTable.SortColumnSelect`. Troca a\n * direção da primeira coluna da ordenação; sem ordenação, fica desabilitado.\n *\n * Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.\n *\n * @example\n * ```tsx\n * <DataTable.SortDirectionSelect\n * table={table}\n * labels={{ asc: 'A–Z', desc: 'Z–A' }}\n * />\n * ```\n */\nexport const DataTableSortDirectionSelect = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortDirectionSelectProps<TFeatures, TData>,\n) => {\n const { table, labels, size = 'sm', disabled, ...rest } = props;\n\n /**\n * A direção da primeira coluna da ordenação, ou `null` sem ordenação. Re-renderiza quando\n * muda.\n */\n const direction = useSelector(\n table.atoms.sorting,\n (sorting): SortDirection | null =>\n sorting[0] ? (sorting[0].desc ? 'desc' : 'asc') : null,\n );\n\n const items = DIRECTIONS.map((value) => ({\n label: labels?.[value] ?? DEFAULT_LABELS[value],\n value,\n }));\n\n /** Sem ordenação, o trigger mostra a crescente, desabilitado, para não ficar vazio. */\n const placeholder = labels?.asc ?? DEFAULT_LABELS.asc;\n\n return (\n <Select.Root<SortDirection>\n size={size}\n value={direction}\n items={items}\n disabled={disabled || direction === null}\n onValueChange={(value) => {\n if (value !== null) {\n table.setSorting(([first, ...others]) =>\n first ? [{ ...first, desc: value === 'desc' }, ...others] : [],\n );\n }\n }}\n >\n <Select.Trigger\n data-component=\"DataTable.SortDirectionSelect\"\n aria-label=\"Direção da ordenação\"\n {...rest}\n >\n <Select.Value placeholder={placeholder} />\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\nDataTableSortDirectionSelect.displayName = 'DataTable.SortDirectionSelect';\n"],"mappings":";;;;AA+BA,MAAM,iBAAgD;CACpD,KAAK;CACL,MAAM;AACR;AAEA,MAAM,aAA8B,CAAC,OAAO,MAAM;;;;;;;;;;;;;;;AAgBlD,MAAa,gCAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,OAAO,MAAM,UAAU,GAAG,SAAS;;;;;CAM1D,MAAM,YAAY,YAChB,MAAM,MAAM,UACX,YACC,QAAQ,KAAM,QAAQ,EAAE,CAAC,OAAO,SAAS,QAAS,IACtD;CAEA,MAAM,QAAQ,WAAW,KAAK,WAAW;EACvC,OAAO,SAAS,UAAU,eAAe;EACzC;CACF,EAAE;;CAGF,MAAM,cAAc,QAAQ,OAAO,eAAe;CAElD,OACE,qBAAC,OAAO,MAAR;EACQ;EACN,OAAO;EACA;EACP,UAAU,YAAY,cAAc;EACpC,gBAAgB,UAAU;GACxB,IAAI,UAAU,MACZ,MAAM,YAAY,CAAC,OAAO,GAAG,YAC3B,QAAQ,CAAC;IAAE,GAAG;IAAO,MAAM,UAAU;GAAO,GAAG,GAAG,MAAM,IAAI,CAAC,CAC/D;EAEJ;EAXF,UAAA,CAaE,qBAAC,OAAO,SAAR;GACE,kBAAe;GACf,cAAW;GACX,GAAI;GAHN,UAAA,CAKE,oBAAC,OAAO,OAAR,EAA2B,YAAc,CAAA,GACzC,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,6BAA6B,cAAc"}
|
|
1
|
+
{"version":3,"file":"data-table-sort-direction-select.js","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-sort-direction-select.tsx"],"sourcesContent":["import { Select } from '@lucasbernardosn/react-ui/collections/select';\nimport type { MergeOverride } from '@lucasbernardosn/ts-utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type {\n RowData,\n SortDirection,\n TableFeatures,\n} from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\n\nexport type DataTableSortDirectionSelectProps<\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 cada direção.\n * @default { asc: 'Crescente', desc: 'Decrescente' }\n */\n labels?: Partial<Record<SortDirection, string>>;\n /**\n * O tamanho do select.\n * @default 'sm'\n */\n size?: Select.RootProps<SortDirection>['size'];\n }\n>;\n\nconst DEFAULT_LABELS: Record<SortDirection, string> = {\n asc: 'Crescente',\n desc: 'Decrescente',\n};\n\nconst DIRECTIONS: SortDirection[] = ['asc', 'desc'];\n\n/**\n * O select da direção da ordenação, para ir junto com o `DataTable.SortColumnSelect`. Troca a\n * direção da primeira coluna da ordenação; sem ordenação, fica desabilitado.\n *\n * Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.\n *\n * @example\n * ```tsx\n * <DataTable.SortDirectionSelect\n * table={table}\n * labels={{ asc: 'A–Z', desc: 'Z–A' }}\n * />\n * ```\n */\nexport const DataTableSortDirectionSelect = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortDirectionSelectProps<TFeatures, TData>,\n) => {\n const { table, labels, size = 'sm', disabled, ...rest } = props;\n\n /**\n * A direção da primeira coluna da ordenação, ou `null` sem ordenação. Re-renderiza quando\n * muda.\n */\n const direction = useSelector(\n table.atoms.sorting,\n (sorting): SortDirection | null =>\n sorting[0] ? (sorting[0].desc ? 'desc' : 'asc') : null,\n );\n\n const items = DIRECTIONS.map((value) => ({\n label: labels?.[value] ?? DEFAULT_LABELS[value],\n value,\n }));\n\n /** Sem ordenação, o trigger mostra a crescente, desabilitado, para não ficar vazio. */\n const placeholder = labels?.asc ?? DEFAULT_LABELS.asc;\n\n return (\n <Select.Root<SortDirection>\n size={size}\n value={direction}\n items={items}\n disabled={disabled || direction === null}\n onValueChange={(value) => {\n if (value !== null) {\n table.setSorting(([first, ...others]) =>\n first ? [{ ...first, desc: value === 'desc' }, ...others] : [],\n );\n }\n }}\n >\n <Select.Trigger\n data-component=\"DataTable.SortDirectionSelect\"\n aria-label=\"Direção da ordenação\"\n {...rest}\n >\n <Select.Value placeholder={placeholder} />\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\nDataTableSortDirectionSelect.displayName = 'DataTable.SortDirectionSelect';\n"],"mappings":";;;;AA+BA,MAAM,iBAAgD;CACpD,KAAK;CACL,MAAM;AACR;AAEA,MAAM,aAA8B,CAAC,OAAO,MAAM;;;;;;;;;;;;;;;AAgBlD,MAAa,gCAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,OAAO,MAAM,UAAU,GAAG,SAAS;;;;;CAM1D,MAAM,YAAY,YAChB,MAAM,MAAM,UACX,YACC,QAAQ,KAAM,QAAQ,EAAE,CAAC,OAAO,SAAS,QAAS,IACtD;CAEA,MAAM,QAAQ,WAAW,KAAK,WAAW;EACvC,OAAO,SAAS,UAAU,eAAe;EACzC;CACF,EAAE;;CAGF,MAAM,cAAc,QAAQ,OAAO,eAAe;CAElD,OACE,qBAAC,OAAO,MAAR;EACQ;EACN,OAAO;EACA;EACP,UAAU,YAAY,cAAc;EACpC,gBAAgB,UAAU;GACxB,IAAI,UAAU,MACZ,MAAM,YAAY,CAAC,OAAO,GAAG,YAC3B,QAAQ,CAAC;IAAE,GAAG;IAAO,MAAM,UAAU;GAAO,GAAG,GAAG,MAAM,IAAI,CAAC,CAC/D;EAEJ;EAXF,UAAA,CAaE,qBAAC,OAAO,SAAR;GACE,kBAAe;GACf,cAAW;GACX,GAAI;GAHN,UAAA,CAKE,oBAAC,OAAO,OAAR,EAA2B,YAAc,CAAA,GACzC,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,6BAA6B,cAAc"}
|
|
@@ -18,7 +18,7 @@ import { TableFeature } from "@tanstack/react-table";
|
|
|
18
18
|
* initialState: { rowDensity: 'compact' },
|
|
19
19
|
* });
|
|
20
20
|
*
|
|
21
|
-
* table.setRowDensity('
|
|
21
|
+
* table.setRowDensity('airy');
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export declare const rowDensityFeature: TableFeature;
|
|
@@ -22,7 +22,7 @@ const getInitialRowDensity = (initialState) => initialState.rowDensity ?? DEFAUL
|
|
|
22
22
|
* initialState: { rowDensity: 'compact' },
|
|
23
23
|
* });
|
|
24
24
|
*
|
|
25
|
-
* table.setRowDensity('
|
|
25
|
+
* table.setRowDensity('airy');
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
const rowDensityFeature = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-density-feature.js","names":[],"sources":["../../../src/features/row-density/row-density-feature.ts"],"sourcesContent":["import {\n assignTableAPIs,\n makeStateUpdater,\n setStateSlice,\n type TableFeature,\n type TableState_All,\n type Updater,\n} from '@tanstack/react-table';\nimport type { RowDensity } from './row-density-feature.types';\n\n/** A densidade sem `initialState`. */\nconst DEFAULT_ROW_DENSITY: RowDensity = 'standard';\n\n/** A densidade de um estado inicial, ou a padrão quando ele não traz. */\nconst getInitialRowDensity = (initialState: Partial<TableState_All>) =>\n initialState.rowDensity ?? DEFAULT_ROW_DENSITY;\n\n/**\n * Feature do TanStack Table para a densidade das linhas. Registre com essa chave:\n * `tableFeatures({ rowDensityFeature })`.\n *\n * Só guarda o estado: o `DataTable.Root` o lê e marca o grid com `data-density`, de onde as\n * células tiram altura e espaçamento.\n *\n * @example\n * ```ts\n * const features = tableFeatures({ columnSizingFeature, rowDensityFeature });\n *\n * const table = useTable({\n * features,\n * columns,\n * data,\n * initialState: { rowDensity: 'compact' },\n * });\n *\n * table.setRowDensity('
|
|
1
|
+
{"version":3,"file":"row-density-feature.js","names":[],"sources":["../../../src/features/row-density/row-density-feature.ts"],"sourcesContent":["import {\n assignTableAPIs,\n makeStateUpdater,\n setStateSlice,\n type TableFeature,\n type TableState_All,\n type Updater,\n} from '@tanstack/react-table';\nimport type { RowDensity } from './row-density-feature.types';\n\n/** A densidade sem `initialState`. */\nconst DEFAULT_ROW_DENSITY: RowDensity = 'standard';\n\n/** A densidade de um estado inicial, ou a padrão quando ele não traz. */\nconst getInitialRowDensity = (initialState: Partial<TableState_All>) =>\n initialState.rowDensity ?? DEFAULT_ROW_DENSITY;\n\n/**\n * Feature do TanStack Table para a densidade das linhas. Registre com essa chave:\n * `tableFeatures({ rowDensityFeature })`.\n *\n * Só guarda o estado: o `DataTable.Root` o lê e marca o grid com `data-density`, de onde as\n * células tiram altura e espaçamento.\n *\n * @example\n * ```ts\n * const features = tableFeatures({ columnSizingFeature, rowDensityFeature });\n *\n * const table = useTable({\n * features,\n * columns,\n * data,\n * initialState: { rowDensity: 'compact' },\n * });\n *\n * table.setRowDensity('airy');\n * ```\n */\nexport const rowDensityFeature: TableFeature = {\n getInitialState: (initialState) => ({\n rowDensity: DEFAULT_ROW_DENSITY,\n ...initialState,\n }),\n\n getDefaultTableOptions: (table) => ({\n onRowDensityChange: makeStateUpdater('rowDensity', table),\n }),\n\n constructTableAPIs: (table) => {\n assignTableAPIs('rowDensityFeature', table, {\n table_setRowDensity: {\n fn: (updater: Updater<RowDensity>) =>\n setStateSlice(table, 'rowDensity', updater),\n },\n table_resetRowDensity: {\n fn: (defaultState?: boolean) =>\n setStateSlice(\n table,\n 'rowDensity',\n defaultState\n ? DEFAULT_ROW_DENSITY\n : getInitialRowDensity(table.initialState),\n ),\n },\n });\n },\n};\n"],"mappings":";;;AAWA,MAAM,sBAAkC;;AAGxC,MAAM,wBAAwB,iBAC5B,aAAa,cAAc;;;;;;;;;;;;;;;;;;;;;;AAuB7B,MAAa,oBAAkC;CAC7C,kBAAkB,kBAAkB;EAClC,YAAY;EACZ,GAAG;CACL;CAEA,yBAAyB,WAAW,EAClC,oBAAoB,iBAAiB,cAAc,KAAK,EAC1D;CAEA,qBAAqB,UAAU;EAC7B,gBAAgB,qBAAqB,OAAO;GAC1C,qBAAqB,EACnB,KAAK,YACH,cAAc,OAAO,cAAc,OAAO,EAC9C;GACA,uBAAuB,EACrB,KAAK,iBACH,cACE,OACA,cACA,eACI,sBACA,qBAAqB,MAAM,YAAY,CAC7C,EACJ;EACF,CAAC;CACH;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OnChangeFn, RowData, TableFeature, TableFeatures, Updater } from "@tanstack/react-table";
|
|
2
2
|
//#region src/features/row-density/row-density-feature.types.d.ts
|
|
3
3
|
/** A densidade das linhas: altura e espaçamento de células e headers. */
|
|
4
|
-
export type RowDensity = 'compact' | 'standard' | '
|
|
4
|
+
export type RowDensity = 'compact' | 'standard' | 'airy';
|
|
5
5
|
/** O estado da feature. */
|
|
6
6
|
export type TableState_RowDensity = {
|
|
7
7
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lucasbernardosn/react-table",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Composable data table parts on TanStack Table v9, styled with @lucasbernardosn/react-ui.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"@dnd-kit/dom": "0.5.0",
|
|
28
28
|
"@dnd-kit/helpers": "0.5.0",
|
|
29
29
|
"@dnd-kit/react": "0.5.0",
|
|
30
|
-
"@lucasbernardosn/utils": "^0.
|
|
30
|
+
"@lucasbernardosn/ts-utils": "^0.3.0",
|
|
31
31
|
"@phosphor-icons/react": "2.1.10",
|
|
32
32
|
"@tanstack/react-store": "0.11.2"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@biomejs/biome": "2.
|
|
36
|
-
"@lucasbernardosn/react-ui": "0.
|
|
37
|
-
"@lucasbernardosn/react-utils": "0.
|
|
38
|
-
"@lucasbernardosn/
|
|
35
|
+
"@biomejs/biome": "2.6.3",
|
|
36
|
+
"@lucasbernardosn/react-ui": "0.3.0",
|
|
37
|
+
"@lucasbernardosn/react-utils": "0.3.0",
|
|
38
|
+
"@lucasbernardosn/ts-config": "0.2.0",
|
|
39
39
|
"@tanstack/react-table": "9.2.4",
|
|
40
40
|
"@testing-library/jest-dom": "7.0.1",
|
|
41
41
|
"@testing-library/react": "16.3.3",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"@types/react-dom": "19.3.0",
|
|
46
46
|
"@vitejs/plugin-react": "6.1.1",
|
|
47
47
|
"jsdom": "30.1.1",
|
|
48
|
+
"publint": "0.3.25",
|
|
48
49
|
"react": "19.3.0",
|
|
49
50
|
"react-dom": "19.3.0",
|
|
50
51
|
"tsdown": "0.23.0",
|
|
@@ -52,8 +53,8 @@
|
|
|
52
53
|
"vitest": "5.0.3"
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
|
55
|
-
"@lucasbernardosn/react-ui": "^0.
|
|
56
|
-
"@lucasbernardosn/react-utils": "^0.
|
|
56
|
+
"@lucasbernardosn/react-ui": "^0.3.0",
|
|
57
|
+
"@lucasbernardosn/react-utils": "^0.3.0",
|
|
57
58
|
"@tanstack/react-table": "^9.2.4",
|
|
58
59
|
"react": "^19.0.0",
|
|
59
60
|
"react-dom": "^19.0.0"
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
"repository": {
|
|
70
71
|
"type": "git",
|
|
71
72
|
"url": "git+https://github.com/LucasBernardoSN/react-monorepo.git",
|
|
72
|
-
"directory": "packages/react
|
|
73
|
+
"directory": "packages/react-table"
|
|
73
74
|
},
|
|
74
75
|
"scripts": {
|
|
75
76
|
"build": "tsdown",
|
|
@@ -78,6 +79,7 @@
|
|
|
78
79
|
"format": "biome format --write",
|
|
79
80
|
"check": "biome check --write",
|
|
80
81
|
"test": "vitest",
|
|
81
|
-
"test:run": "vitest run"
|
|
82
|
+
"test:run": "vitest run",
|
|
83
|
+
"typecheck": "tsc --noEmit"
|
|
82
84
|
}
|
|
83
85
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-check.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-check.tsx"],"mappings":";;;;;qBAOa,uCAAe,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-hide-item.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-hide-item.tsx"],"mappings":";;;;;;;YAYY,wBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KAAK;;EAGH,QAAQ,WAAW,WAAW;;EAE9B,SAAS,QAAQ;;;;;;qBAQR;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,wBAAwB,WAAW,yBAAM,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-labels.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-labels.ts"],"mappings":";;YACY;;EAEV;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;qBAGW,4BAA4B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-pin-items.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-pin-items.tsx"],"mappings":";;;;;;;YAaY,wBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KAAK;;EAGH,QAAQ,WAAW,WAAW;;EAE9B,SAAS,QAAQ;;;;;;;;qBAUR;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,wBAAwB,WAAW,yBAAM,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-popup.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-popup.tsx"],"mappings":";;;;;YAWY,qBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KAAK;;EAGH,QAAQ,OAAO,WAAW;;EAE1B,SAAS,QAAQ;;EAEjB,kBAAkB,KAAK;;;;;;;;;;;;;;;;;;;;;;qBAwBd;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,qBAAqB,WAAW,yBAAM,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-root.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-root.tsx"],"mappings":";;YAGY,oBAAoB,qBAAqB,KAAK,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2BvD;GAAkB,mCAAO,OAC7B,oBAAoB,2BAAQ,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-sort-items.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-sort-items.tsx"],"mappings":";;;;;;;;YAcY,yBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KAAK;;EAGH,QAAQ,WAAW,WAAW;;EAE9B,SAAS,QAAQ;;;;;;;;;;;qBAaR;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,yBAAyB,WAAW,SAAM,MAAA,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"column-menu-trigger.d.ts","names":[],"sources":["../../../src/components/column-menu/column-menu-trigger.tsx"],"mappings":";;;;YASY,uBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KAAK;;EAGH,QAAQ,OAAO,WAAW;;;;;;;;;;;qBAajB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,uBAAuB,WAAW,yBAAM,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../src/components/column-menu/index.parts.ts"],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"columns-panel-item.d.ts","names":[],"sources":["../../../src/components/columns-panel/columns-panel-item.tsx"],"mappings":";;;;;;YAaY,sBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WAAW,WAAW;;EAE9B;;;;;EAKA;;;;;;;;;;qBAYS;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,sBAAsB,WAAW,yBAAM,+CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"columns-panel-root.d.ts","names":[],"sources":["../../../src/components/columns-panel/columns-panel-root.tsx"],"mappings":";;;;;;;YAgBY,sBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,UACL,WACA;;;;;;EAQF,WACI,MAAM,cACJ,QAAQ,OAAO,WAAW,QAAQ,kBAAkB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA+DvD;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,sBAAsB,WAAW,SAAM,MAAA,IAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-columns-panel-column-order.d.ts","names":[],"sources":["../../../src/components/columns-panel/get-columns-panel-column-order.ts"],"mappings":";;;;;;;;;;;;;qBAca,6BACX,8BACA,8BACA,mBACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../src/components/columns-panel/index.parts.ts"],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-body.d.ts","names":[],"sources":["../../../../src/components/data-table/body/data-table-body.tsx"],"mappings":";;;;;YAgBY,mBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,MAAM,WAAW;;;;;;EAMxB,WACI,MAAM,cACJ,KAAK,IAAI,WAAW,WAAW,MAAM;;;;;EAK3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCS;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,mBAAmB,WAAW,SAAM,MAAA,+BAAA,MAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-cell.d.ts","names":[],"sources":["../../../../src/components/data-table/body/data-table-cell.tsx"],"mappings":";;;;YAeY,mBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,MAAM,KAAK,WAAW;;;;;;;;;;;;;;qBAgBb;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,mBAAmB,WAAW,yBAAM,+CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-empty.d.ts","names":[],"sources":["../../../../src/components/data-table/body/data-table-empty.tsx"],"mappings":";;;;YASY,oBACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,OAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;qBA4Bf;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,oBAAoB,WAAW,yBAAM,+CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-row-focus.d.ts","names":[],"sources":["../../../../src/components/data-table/body/data-table-row-focus.ts"],"mappings":";;;;;;;;;;qBAqBa,0BAA2B,SAAS,YAAO;;;;;;;;;;;;qBAmC3C,2BACX,YAAY,aACZ,OAAO,KACL,qFAED;;;;;;;qBA2CU,oBAAqB,YAAY"}
|