@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,23 @@
|
|
|
1
|
+
import { Header, RowData, TableFeatures } from "@tanstack/react-table";
|
|
2
|
+
import { Menu } from "@lucasbernardosn/react-ui/overlays/menu";
|
|
3
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
4
|
+
//#region src/components/column-menu/column-menu-trigger.d.ts
|
|
5
|
+
export type ColumnMenuTriggerProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Menu.TriggerProps, {
|
|
6
|
+
/** O header da coluna. */
|
|
7
|
+
header: Header<TFeatures, TData>;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* O botão que abre o menu da coluna: o `DataTable.HeaderButton`, do tamanho da célula do header,
|
|
11
|
+
* com o `Menu.Trigger`. Os filhos são o que ele mostra, em geral o `DataTable.HeaderContent` e o
|
|
12
|
+
* `DataTable.SortIndicator`.
|
|
13
|
+
*
|
|
14
|
+
* Com `rowSortingFeature`, marca a direção em `data-sorted` e, numa coluna `align: 'end'`,
|
|
15
|
+
* inverte a ordem dos filhos, como o `DataTable.SortTrigger`. Enquanto o menu está aberto, o
|
|
16
|
+
* fundo fica no do hover.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ColumnMenuTrigger: {
|
|
19
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: ColumnMenuTriggerProps<TFeatures, TData>): import("react").JSX.Element;
|
|
20
|
+
displayName: string;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
//# sourceMappingURL=column-menu-trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { hasHeaderFeature } from "../../utils/has-feature.js";
|
|
2
|
+
import { DataTableHeaderButton } from "../data-table/header/data-table-header-button.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { mergeProps } from "@base-ui/react";
|
|
5
|
+
import { Menu } from "@lucasbernardosn/react-ui/overlays/menu";
|
|
6
|
+
import { useSelector } from "@tanstack/react-store";
|
|
7
|
+
import { mergeStateClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
8
|
+
//#region src/components/column-menu/column-menu-trigger.tsx
|
|
9
|
+
/**
|
|
10
|
+
* O botão que abre o menu da coluna: o `DataTable.HeaderButton`, do tamanho da célula do header,
|
|
11
|
+
* com o `Menu.Trigger`. Os filhos são o que ele mostra, em geral o `DataTable.HeaderContent` e o
|
|
12
|
+
* `DataTable.SortIndicator`.
|
|
13
|
+
*
|
|
14
|
+
* Com `rowSortingFeature`, marca a direção em `data-sorted` e, numa coluna `align: 'end'`,
|
|
15
|
+
* inverte a ordem dos filhos, como o `DataTable.SortTrigger`. Enquanto o menu está aberto, o
|
|
16
|
+
* fundo fica no do hover.
|
|
17
|
+
*/
|
|
18
|
+
const ColumnMenuTrigger = (props) => {
|
|
19
|
+
const { header, className, ...rest } = props;
|
|
20
|
+
const baseProps = {
|
|
21
|
+
"data-component": "ColumnMenu.Trigger",
|
|
22
|
+
"data-sorted": useSelector(header.column.table.store, () => hasHeaderFeature(header, "rowSortingFeature") ? header.column.getIsSorted() : false) || void 0,
|
|
23
|
+
className: mergeStateClassNames([
|
|
24
|
+
"in-data-[align=end]:flex-row-reverse",
|
|
25
|
+
"data-sorted:text-gray-12",
|
|
26
|
+
"data-popup-open:bg-gray-3"
|
|
27
|
+
], className)
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ jsx(Menu.Trigger, {
|
|
30
|
+
render: /* @__PURE__ */ jsx(DataTableHeaderButton, {}),
|
|
31
|
+
...mergeProps(baseProps, rest)
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
ColumnMenuTrigger.displayName = "ColumnMenu.Trigger";
|
|
35
|
+
//#endregion
|
|
36
|
+
export { ColumnMenuTrigger };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=column-menu-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-menu-trigger.js","names":[],"sources":["../../../src/components/column-menu/column-menu-trigger.tsx"],"sourcesContent":["import { mergeProps } from '@base-ui/react';\nimport { Menu } from '@lucasbernardosn/react-ui/overlays/menu';\nimport { mergeStateClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { Header, RowData, TableFeatures } from '@tanstack/react-table';\nimport { hasHeaderFeature } from '../../utils';\nimport { DataTableHeaderButton } from '../data-table/header/data-table-header-button';\n\nexport type ColumnMenuTriggerProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Menu.TriggerProps,\n {\n /** O header da coluna. */\n header: Header<TFeatures, TData>;\n }\n>;\n\n/**\n * O botão que abre o menu da coluna: o `DataTable.HeaderButton`, do tamanho da célula do header,\n * com o `Menu.Trigger`. Os filhos são o que ele mostra, em geral o `DataTable.HeaderContent` e o\n * `DataTable.SortIndicator`.\n *\n * Com `rowSortingFeature`, marca a direção em `data-sorted` e, numa coluna `align: 'end'`,\n * inverte a ordem dos filhos, como o `DataTable.SortTrigger`. Enquanto o menu está aberto, o\n * fundo fica no do hover.\n */\nexport const ColumnMenuTrigger = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: ColumnMenuTriggerProps<TFeatures, TData>,\n) => {\n const { header, className, ...rest } = props;\n\n /**\n * Re-renderiza quando a direção desta coluna muda. A ordenação é opcional, então assina o\n * store.\n */\n const sorted = useSelector(header.column.table.store, () =>\n hasHeaderFeature(header, 'rowSortingFeature')\n ? header.column.getIsSorted()\n : false,\n );\n\n const baseProps = {\n 'data-component': 'ColumnMenu.Trigger',\n 'data-sorted': sorted || undefined,\n className: mergeStateClassNames(\n [\n // Os mesmos do `DataTable.SortTrigger`, onde estão explicados.\n 'in-data-[align=end]:flex-row-reverse',\n 'data-sorted:text-gray-12',\n\n 'data-popup-open:bg-gray-3',\n ],\n className,\n ),\n };\n\n return (\n <Menu.Trigger\n render={<DataTableHeaderButton />}\n {...mergeProps(baseProps, rest)}\n />\n );\n};\n\nColumnMenuTrigger.displayName = 'ColumnMenu.Trigger';\n"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,MAAa,qBAIX,UACG;CACH,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAYvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,eARa,YAAY,OAAO,OAAO,MAAM,aAC7C,iBAAiB,QAAQ,mBAAmB,IACxC,OAAO,OAAO,YAAY,IAC1B,KAKgB,KAAK,KAAA;EACzB,WAAW,qBACT;GAEE;GACA;GAEA;EACF,GACA,SACF;CACF;CAEA,OACE,oBAAC,KAAK,SAAN;EACE,QAAQ,oBAAC,uBAAD,CAAwB,CAAA;EAChC,GAAI,WAAW,WAAW,IAAI;CAC/B,CAAA;AAEL;AAEA,kBAAkB,cAAc"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ColumnMenuLabels } from "./column-menu-labels.js";
|
|
2
|
+
import { ColumnMenuHideItem, ColumnMenuHideItemProps } from "./column-menu-hide-item.js";
|
|
3
|
+
import { ColumnMenuPinItems, ColumnMenuPinItemsProps } from "./column-menu-pin-items.js";
|
|
4
|
+
import { ColumnMenuPopup, ColumnMenuPopupProps } from "./column-menu-popup.js";
|
|
5
|
+
import { ColumnMenuRoot, ColumnMenuRootProps } from "./column-menu-root.js";
|
|
6
|
+
import { ColumnMenuSortItems, ColumnMenuSortItemsProps } from "./column-menu-sort-items.js";
|
|
7
|
+
import { ColumnMenuTrigger, ColumnMenuTriggerProps } from "./column-menu-trigger.js";
|
|
8
|
+
declare namespace index_parts_d_exports {
|
|
9
|
+
export { ColumnMenuHideItem as HideItem, ColumnMenuHideItemProps as HideItemProps, ColumnMenuLabels as Labels, ColumnMenuPinItems as PinItems, ColumnMenuPinItemsProps as PinItemsProps, ColumnMenuPopup as Popup, ColumnMenuPopupProps as PopupProps, ColumnMenuRoot as Root, ColumnMenuRootProps as RootProps, ColumnMenuSortItems as SortItems, ColumnMenuSortItemsProps as SortItemsProps, ColumnMenuTrigger as Trigger, ColumnMenuTriggerProps as TriggerProps };
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ColumnMenuHideItem as HideItem, type ColumnMenuHideItemProps as HideItemProps, type ColumnMenuLabels as Labels, ColumnMenuPinItems as PinItems, type ColumnMenuPinItemsProps as PinItemsProps, ColumnMenuPopup as Popup, type ColumnMenuPopupProps as PopupProps, ColumnMenuRoot as Root, type ColumnMenuRootProps as RootProps, ColumnMenuSortItems as SortItems, type ColumnMenuSortItemsProps as SortItemsProps, ColumnMenuTrigger as Trigger, type ColumnMenuTriggerProps as TriggerProps, index_parts_d_exports };
|
|
13
|
+
//# sourceMappingURL=index.parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../src/components/column-menu/index.parts.ts"],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { ColumnMenuHideItem } from "./column-menu-hide-item.js";
|
|
3
|
+
import { ColumnMenuPinItems } from "./column-menu-pin-items.js";
|
|
4
|
+
import { ColumnMenuSortItems } from "./column-menu-sort-items.js";
|
|
5
|
+
import { ColumnMenuPopup } from "./column-menu-popup.js";
|
|
6
|
+
import { ColumnMenuRoot } from "./column-menu-root.js";
|
|
7
|
+
import { ColumnMenuTrigger } from "./column-menu-trigger.js";
|
|
8
|
+
//#region src/components/column-menu/index.parts.ts
|
|
9
|
+
var index_parts_exports = /* @__PURE__ */ __exportAll({
|
|
10
|
+
HideItem: () => ColumnMenuHideItem,
|
|
11
|
+
PinItems: () => ColumnMenuPinItems,
|
|
12
|
+
Popup: () => ColumnMenuPopup,
|
|
13
|
+
Root: () => ColumnMenuRoot,
|
|
14
|
+
SortItems: () => ColumnMenuSortItems,
|
|
15
|
+
Trigger: () => ColumnMenuTrigger
|
|
16
|
+
});
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ColumnMenuHideItem as HideItem, ColumnMenuPinItems as PinItems, ColumnMenuPopup as Popup, ColumnMenuRoot as Root, ColumnMenuSortItems as SortItems, ColumnMenuTrigger as Trigger, index_parts_exports };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=index.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.js","names":[],"sources":["../../../src/components/column-menu/index.parts.ts"],"sourcesContent":["export { ColumnMenuHideItem as HideItem } from './column-menu-hide-item';\nexport { ColumnMenuPinItems as PinItems } from './column-menu-pin-items';\nexport { ColumnMenuPopup as Popup } from './column-menu-popup';\nexport { ColumnMenuRoot as Root } from './column-menu-root';\nexport { ColumnMenuSortItems as SortItems } from './column-menu-sort-items';\nexport { ColumnMenuTrigger as Trigger } from './column-menu-trigger';\n\n/* types */\n\nexport type { ColumnMenuHideItemProps as HideItemProps } from './column-menu-hide-item';\nexport type { ColumnMenuLabels as Labels } from './column-menu-labels';\nexport type { ColumnMenuPinItemsProps as PinItemsProps } from './column-menu-pin-items';\nexport type { ColumnMenuPopupProps as PopupProps } from './column-menu-popup';\nexport type { ColumnMenuRootProps as RootProps } from './column-menu-root';\nexport type { ColumnMenuSortItemsProps as SortItemsProps } from './column-menu-sort-items';\nexport type { ColumnMenuTriggerProps as TriggerProps } from './column-menu-trigger';\n"],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ColumnWith } 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/columns-panel/columns-panel-item.d.ts
|
|
7
|
+
export type ColumnsPanelItemProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'li'>, {
|
|
8
|
+
/** A coluna. Exige `columnVisibilityFeature`. */
|
|
9
|
+
column: ColumnWith<TFeatures, TData, 'columnVisibilityFeature'>;
|
|
10
|
+
/** A posição da coluna no grupo dela (fixadas no início, centro ou fixadas no fim). */
|
|
11
|
+
index: number;
|
|
12
|
+
/**
|
|
13
|
+
* O nome da coluna.
|
|
14
|
+
* @default getDefaultColumnLabel(column): o `header` quando é texto, e o id quando não é
|
|
15
|
+
*/
|
|
16
|
+
label?: string;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Uma coluna no `ColumnsPanel.Root`: o checkbox de visibilidade, o nome e, à direita, a alça de
|
|
20
|
+
* arrastar. Só a alça pega o arrasto; o resto fica livre para o clique no checkbox. Uma coluna com
|
|
21
|
+
* `enableHiding: false` fica com o checkbox desabilitado.
|
|
22
|
+
*
|
|
23
|
+
* Com `columnPinningFeature`, a coluna fixada troca a alça por um alfinete e não se arrasta: o
|
|
24
|
+
* `columnOrder` só ordena as colunas do centro, e as fixadas ficam nas pontas.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ColumnsPanelItem: {
|
|
27
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: ColumnsPanelItemProps<TFeatures, TData>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
//# sourceMappingURL=columns-panel-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { getDefaultColumnLabel } from "../../utils/get-default-column-label.js";
|
|
2
|
+
import { hasColumnFeature } from "../../utils/has-feature.js";
|
|
3
|
+
import { Icon } from "@lucasbernardosn/react-ui/display/icon";
|
|
4
|
+
import { ListIcon, PushPinIcon } from "@phosphor-icons/react";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { mergeProps, useRender } from "@base-ui/react";
|
|
7
|
+
import { useSelector } from "@tanstack/react-store";
|
|
8
|
+
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
9
|
+
import { useSortable } from "@dnd-kit/react/sortable";
|
|
10
|
+
import { IconButton } from "@lucasbernardosn/react-ui/buttons/icon-button";
|
|
11
|
+
import { Checkbox } from "@lucasbernardosn/react-ui/fields/checkbox";
|
|
12
|
+
//#region src/components/columns-panel/columns-panel-item.tsx
|
|
13
|
+
/**
|
|
14
|
+
* Uma coluna no `ColumnsPanel.Root`: o checkbox de visibilidade, o nome e, à direita, a alça de
|
|
15
|
+
* arrastar. Só a alça pega o arrasto; o resto fica livre para o clique no checkbox. Uma coluna com
|
|
16
|
+
* `enableHiding: false` fica com o checkbox desabilitado.
|
|
17
|
+
*
|
|
18
|
+
* Com `columnPinningFeature`, a coluna fixada troca a alça por um alfinete e não se arrasta: o
|
|
19
|
+
* `columnOrder` só ordena as colunas do centro, e as fixadas ficam nas pontas.
|
|
20
|
+
*/
|
|
21
|
+
const ColumnsPanelItem = (props) => {
|
|
22
|
+
const { column, index, label, render, className, ref, ...rest } = props;
|
|
23
|
+
/** Re-renderiza quando esta coluna aparece ou some. */
|
|
24
|
+
const isVisible = useSelector(column.table.atoms.columnVisibility, () => column.getIsVisible());
|
|
25
|
+
/**
|
|
26
|
+
* Re-renderiza quando esta coluna é fixada ou solta. O pinning é opcional, então assina o
|
|
27
|
+
* store.
|
|
28
|
+
*/
|
|
29
|
+
const pinned = useSelector(column.table.store, () => hasColumnFeature(column, "columnPinningFeature") ? column.getIsPinned() : false);
|
|
30
|
+
const columnLabel = label ?? getDefaultColumnLabel(column);
|
|
31
|
+
/** O grupo separa as regiões: o arrasto não leva uma coluna do centro para as fixadas. */
|
|
32
|
+
const sortable = useSortable({
|
|
33
|
+
id: column.id,
|
|
34
|
+
index,
|
|
35
|
+
group: pinned || "center",
|
|
36
|
+
disabled: pinned !== false
|
|
37
|
+
});
|
|
38
|
+
const baseProps = {
|
|
39
|
+
"data-component": "ColumnsPanel.Item",
|
|
40
|
+
"data-dragging": sortable.isDragging ? "" : void 0,
|
|
41
|
+
"data-pinned": pinned || void 0,
|
|
42
|
+
className: mergeTwClassNames([
|
|
43
|
+
"flex",
|
|
44
|
+
"h-8",
|
|
45
|
+
"items-center",
|
|
46
|
+
"gap-2",
|
|
47
|
+
"rounded-md",
|
|
48
|
+
"corner-squircle",
|
|
49
|
+
"ps-2",
|
|
50
|
+
"pe-1",
|
|
51
|
+
"text-sm",
|
|
52
|
+
"data-dragging:bg-gray-3",
|
|
53
|
+
"data-dragging:shadow-md"
|
|
54
|
+
], className),
|
|
55
|
+
children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("label", {
|
|
56
|
+
className: "flex min-w-0 flex-1 items-center gap-2 select-none",
|
|
57
|
+
children: [/* @__PURE__ */ jsx(Checkbox.Root, {
|
|
58
|
+
checked: isVisible,
|
|
59
|
+
disabled: !column.getCanHide(),
|
|
60
|
+
onCheckedChange: (checked) => column.toggleVisibility(checked),
|
|
61
|
+
children: /* @__PURE__ */ jsx(Checkbox.Indicator, {})
|
|
62
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
63
|
+
className: isVisible ? "truncate" : "truncate text-gray-11",
|
|
64
|
+
children: columnLabel
|
|
65
|
+
})]
|
|
66
|
+
}), pinned === false ? /* @__PURE__ */ jsx(IconButton, {
|
|
67
|
+
ref: sortable.handleRef,
|
|
68
|
+
variant: "ghost",
|
|
69
|
+
size: "2xs",
|
|
70
|
+
icon: /* @__PURE__ */ jsx(ListIcon, {}),
|
|
71
|
+
"aria-label": `Mover a coluna ${columnLabel}`,
|
|
72
|
+
className: "cursor-grab touch-none text-gray-11 active:cursor-grabbing"
|
|
73
|
+
}) : /* @__PURE__ */ jsxs("span", {
|
|
74
|
+
className: "inline-flex size-6 shrink-0 items-center justify-center text-gray-11",
|
|
75
|
+
children: [/* @__PURE__ */ jsx(Icon, { render: /* @__PURE__ */ jsx(PushPinIcon, {}) }), /* @__PURE__ */ jsx("span", {
|
|
76
|
+
className: "sr-only",
|
|
77
|
+
children: "Fixada"
|
|
78
|
+
})]
|
|
79
|
+
})] })
|
|
80
|
+
};
|
|
81
|
+
return useRender({
|
|
82
|
+
render,
|
|
83
|
+
ref: [sortable.ref, ref ?? null],
|
|
84
|
+
defaultTagName: "li",
|
|
85
|
+
props: mergeProps(baseProps, rest)
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
ColumnsPanelItem.displayName = "ColumnsPanel.Item";
|
|
89
|
+
//#endregion
|
|
90
|
+
export { ColumnsPanelItem };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=columns-panel-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns-panel-item.js","names":[],"sources":["../../../src/components/columns-panel/columns-panel-item.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { useSortable } from '@dnd-kit/react/sortable';\nimport { IconButton } from '@lucasbernardosn/react-ui/buttons/icon-button';\nimport { Icon } from '@lucasbernardosn/react-ui/display/icon';\nimport { Checkbox } from '@lucasbernardosn/react-ui/fields/checkbox';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { ListIcon, PushPinIcon } from '@phosphor-icons/react';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { ColumnWith } from '../../types';\nimport { getDefaultColumnLabel, hasColumnFeature } from '../../utils';\n\nexport type ColumnsPanelItemProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'li'>,\n {\n /** A coluna. Exige `columnVisibilityFeature`. */\n column: ColumnWith<TFeatures, TData, 'columnVisibilityFeature'>;\n /** A posição da coluna no grupo dela (fixadas no início, centro ou fixadas no fim). */\n index: number;\n /**\n * O nome da coluna.\n * @default getDefaultColumnLabel(column): o `header` quando é texto, e o id quando não é\n */\n label?: string;\n }\n>;\n\n/**\n * Uma coluna no `ColumnsPanel.Root`: o checkbox de visibilidade, o nome e, à direita, a alça de\n * arrastar. Só a alça pega o arrasto; o resto fica livre para o clique no checkbox. Uma coluna com\n * `enableHiding: false` fica com o checkbox desabilitado.\n *\n * Com `columnPinningFeature`, a coluna fixada troca a alça por um alfinete e não se arrasta: o\n * `columnOrder` só ordena as colunas do centro, e as fixadas ficam nas pontas.\n */\nexport const ColumnsPanelItem = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: ColumnsPanelItemProps<TFeatures, TData>,\n) => {\n const { column, index, label, render, className, ref, ...rest } = props;\n\n /** Re-renderiza quando esta coluna aparece ou some. */\n const isVisible = useSelector(column.table.atoms.columnVisibility, () =>\n column.getIsVisible(),\n );\n\n /**\n * Re-renderiza quando esta coluna é fixada ou solta. O pinning é opcional, então assina o\n * store.\n */\n const pinned = useSelector(column.table.store, () =>\n hasColumnFeature(column, 'columnPinningFeature')\n ? column.getIsPinned()\n : false,\n );\n\n const columnLabel = label ?? getDefaultColumnLabel(column);\n\n /** O grupo separa as regiões: o arrasto não leva uma coluna do centro para as fixadas. */\n const sortable = useSortable({\n id: column.id,\n index,\n group: pinned || 'center',\n disabled: pinned !== false,\n });\n\n const baseProps = {\n 'data-component': 'ColumnsPanel.Item',\n 'data-dragging': sortable.isDragging ? '' : undefined,\n 'data-pinned': pinned || undefined,\n className: mergeTwClassNames(\n [\n 'flex',\n 'h-8',\n 'items-center',\n 'gap-2',\n\n 'rounded-md',\n 'corner-squircle',\n 'ps-2',\n 'pe-1',\n\n 'text-sm',\n\n // Em arrasto, destacada sobre as outras.\n 'data-dragging:bg-gray-3',\n 'data-dragging:shadow-md',\n ],\n className,\n ),\n children: (\n <>\n <label className=\"flex min-w-0 flex-1 items-center gap-2 select-none\">\n <Checkbox.Root\n checked={isVisible}\n disabled={!column.getCanHide()}\n onCheckedChange={(checked) => column.toggleVisibility(checked)}\n >\n <Checkbox.Indicator />\n </Checkbox.Root>\n\n <span className={isVisible ? 'truncate' : 'truncate text-gray-11'}>\n {columnLabel}\n </span>\n </label>\n\n {pinned === false ? (\n <IconButton\n ref={sortable.handleRef}\n variant=\"ghost\"\n size=\"2xs\"\n icon={<ListIcon />}\n aria-label={`Mover a coluna ${columnLabel}`}\n // `touch-none`: no toque, o gesto arrasta em vez de rolar.\n className=\"cursor-grab touch-none text-gray-11 active:cursor-grabbing\"\n />\n ) : (\n // Do tamanho da alça, no mesmo lugar dela nos três grupos.\n <span className=\"inline-flex size-6 shrink-0 items-center justify-center text-gray-11\">\n <Icon render={<PushPinIcon />} />\n <span className=\"sr-only\">Fixada</span>\n </span>\n )}\n </>\n ),\n };\n\n return useRender({\n render,\n ref: [sortable.ref, ref ?? null],\n defaultTagName: 'li',\n props: mergeProps(baseProps, rest),\n });\n};\n\nColumnsPanelItem.displayName = 'ColumnsPanel.Item';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuCA,MAAa,oBAIX,UACG;CACH,MAAM,EAAE,QAAQ,OAAO,OAAO,QAAQ,WAAW,KAAK,GAAG,SAAS;;CAGlE,MAAM,YAAY,YAAY,OAAO,MAAM,MAAM,wBAC/C,OAAO,aAAa,CACtB;;;;;CAMA,MAAM,SAAS,YAAY,OAAO,MAAM,aACtC,iBAAiB,QAAQ,sBAAsB,IAC3C,OAAO,YAAY,IACnB,KACN;CAEA,MAAM,cAAc,SAAS,sBAAsB,MAAM;;CAGzD,MAAM,WAAW,YAAY;EAC3B,IAAI,OAAO;EACX;EACA,OAAO,UAAU;EACjB,UAAU,WAAW;CACvB,CAAC;CAED,MAAM,YAAY;EAChB,kBAAkB;EAClB,iBAAiB,SAAS,aAAa,KAAK,KAAA;EAC5C,eAAe,UAAU,KAAA;EACzB,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GAEA;GAGA;GACA;EACF,GACA,SACF;EACA,UACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACE,oBAAC,SAAS,MAAV;IACE,SAAS;IACT,UAAU,CAAC,OAAO,WAAW;IAC7B,kBAAkB,YAAY,OAAO,iBAAiB,OAAO;IAE7D,UAAA,oBAAC,SAAS,WAAV,CAAqB,CAAA;GACR,CAAA,GAEf,oBAAC,QAAD;IAAM,WAAW,YAAY,aAAa;IACvC,UAAA;GACG,CAAA,CACD;EAEN,CAAA,GAAA,WAAW,QACV,oBAAC,YAAD;GACE,KAAK,SAAS;GACd,SAAQ;GACR,MAAK;GACL,MAAM,oBAAC,UAAD,CAAW,CAAA;GACjB,cAAY,kBAAkB;GAE9B,WAAU;EACX,CAAA,IAGD,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,oBAAC,MAAD,EAAM,QAAQ,oBAAC,aAAD,CAAc,CAAA,EAAI,CAAA,GAChC,oBAAC,QAAD;IAAM,WAAU;IAAU,UAAA;GAAY,CAAA,CAClC;EAER,CAAA,CAAA,EAAA,CAAA;CAEN;CAEA,OAAO,UAAU;EACf;EACA,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI;EAC/B,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,iBAAiB,cAAc"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TableWith } from "../../types/table-with.js";
|
|
2
|
+
import "../../types/index.js";
|
|
3
|
+
import { Column, 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/columns-panel/columns-panel-root.d.ts
|
|
8
|
+
export type ColumnsPanelRootProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'div'>, {
|
|
9
|
+
/** A tabela. Exige `columnOrderingFeature` e `columnVisibilityFeature`. */
|
|
10
|
+
table: TableWith<TFeatures, TData, 'columnOrderingFeature' | 'columnVisibilityFeature'>;
|
|
11
|
+
/**
|
|
12
|
+
* Uma função que recebe cada coluna e a posição dela no grupo e devolve o item. Repasse a
|
|
13
|
+
* posição ao `ColumnsPanel.Item`, que a usa no arrasto. Com nós comuns, quem usa faz o laço.
|
|
14
|
+
* @default (column, index) => <ColumnsPanel.Item column={column} index={index} />
|
|
15
|
+
*/
|
|
16
|
+
children?: React.ReactNode | ((column: Column<TFeatures, TData>, index: number) => React.ReactNode);
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* A lista das colunas da tabela: marca quais aparecem e arrasta para mudar a ordem. Para um
|
|
20
|
+
* popover ou uma gaveta; a posição, o gatilho e o "restaurar" (`table.resetColumnOrder()`,
|
|
21
|
+
* `table.resetColumnVisibility()`) são do app.
|
|
22
|
+
*
|
|
23
|
+
* Lista as colunas de dados. As de exibição (sem `accessorFn`, como a de seleção e a de ações)
|
|
24
|
+
* ficam fora e no lugar: reordenar só troca as outras entre si. Com `columnPinningFeature`, a
|
|
25
|
+
* tela vira até três listas (fixadas no início, centro e fixadas no fim), e só a do centro se
|
|
26
|
+
* arrasta.
|
|
27
|
+
*
|
|
28
|
+
* O arrasto é pela alça, com o ponteiro ou o teclado (Espaço pega, setas movem, Espaço solta, Esc
|
|
29
|
+
* cancela), e fica preso à lista do centro: não passa por cima das fixadas. O `Root` assina a
|
|
30
|
+
* ordem e o pinning, e cada `ColumnsPanel.Item`, a visibilidade da coluna dele: funciona com o
|
|
31
|
+
* dono da tabela em `() => null`.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <ColumnsPanel.Root table={table}>
|
|
36
|
+
* {(column, index) => (
|
|
37
|
+
* <ColumnsPanel.Item
|
|
38
|
+
* column={column}
|
|
39
|
+
* index={index}
|
|
40
|
+
* label={labels[column.id]}
|
|
41
|
+
* />
|
|
42
|
+
* )}
|
|
43
|
+
* </ColumnsPanel.Root>
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare const ColumnsPanelRoot: {
|
|
47
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: ColumnsPanelRootProps<TFeatures, TData>): React.JSX.Element;
|
|
48
|
+
displayName: string;
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
//# sourceMappingURL=columns-panel-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { hasColumnFeature, hasTableFeature } from "../../utils/has-feature.js";
|
|
2
|
+
import { ColumnsPanelItem } from "./columns-panel-item.js";
|
|
3
|
+
import { getColumnsPanelColumnOrder } from "./get-columns-panel-column-order.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { mergeProps, useRender } from "@base-ui/react";
|
|
6
|
+
import { shallow, useSelector } from "@tanstack/react-store";
|
|
7
|
+
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
8
|
+
import { Fragment as Fragment$1, useMemo, useRef } from "react";
|
|
9
|
+
import { isSortable } from "@dnd-kit/react/sortable";
|
|
10
|
+
import { RestrictToVerticalAxis } from "@dnd-kit/abstract/modifiers";
|
|
11
|
+
import { RestrictToElement } from "@dnd-kit/dom/modifiers";
|
|
12
|
+
import { DragDropProvider } from "@dnd-kit/react";
|
|
13
|
+
//#region src/components/columns-panel/columns-panel-root.tsx
|
|
14
|
+
/** O nome de cada lista, na ordem das regiões: fixadas no início, centro e fixadas no fim. */
|
|
15
|
+
const GROUP_LABELS = [
|
|
16
|
+
"Colunas fixadas no início",
|
|
17
|
+
"Colunas",
|
|
18
|
+
"Colunas fixadas no fim"
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* A linha entre as listas, só visual (o alfinete já diz quais são fixadas), fica nas das fixadas,
|
|
22
|
+
* do lado do centro, com o respiro. A lista do centro termina no primeiro e no último item: o
|
|
23
|
+
* arrasto fica preso a ela, e com o respiro dentro dela, o item arrastado cobriria a linha.
|
|
24
|
+
*/
|
|
25
|
+
const GROUP_CLASS_NAMES = [
|
|
26
|
+
"mb-1 border-gray-6 border-b pb-1",
|
|
27
|
+
void 0,
|
|
28
|
+
"mt-1 border-gray-6 border-t pt-1"
|
|
29
|
+
];
|
|
30
|
+
/** As pontas sem fixadas: a mesma referência, para a tupla não mudar à toa. */
|
|
31
|
+
const NO_COLUMNS = [];
|
|
32
|
+
/** Se a coluna é de dados, e não de exibição (sem `accessorFn`, como a de seleção). */
|
|
33
|
+
const isDataColumn = (column) => column.accessorFn !== void 0;
|
|
34
|
+
/**
|
|
35
|
+
* A lista das colunas da tabela: marca quais aparecem e arrasta para mudar a ordem. Para um
|
|
36
|
+
* popover ou uma gaveta; a posição, o gatilho e o "restaurar" (`table.resetColumnOrder()`,
|
|
37
|
+
* `table.resetColumnVisibility()`) são do app.
|
|
38
|
+
*
|
|
39
|
+
* Lista as colunas de dados. As de exibição (sem `accessorFn`, como a de seleção e a de ações)
|
|
40
|
+
* ficam fora e no lugar: reordenar só troca as outras entre si. Com `columnPinningFeature`, a
|
|
41
|
+
* tela vira até três listas (fixadas no início, centro e fixadas no fim), e só a do centro se
|
|
42
|
+
* arrasta.
|
|
43
|
+
*
|
|
44
|
+
* O arrasto é pela alça, com o ponteiro ou o teclado (Espaço pega, setas movem, Espaço solta, Esc
|
|
45
|
+
* cancela), e fica preso à lista do centro: não passa por cima das fixadas. O `Root` assina a
|
|
46
|
+
* ordem e o pinning, e cada `ColumnsPanel.Item`, a visibilidade da coluna dele: funciona com o
|
|
47
|
+
* dono da tabela em `() => null`.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```tsx
|
|
51
|
+
* <ColumnsPanel.Root table={table}>
|
|
52
|
+
* {(column, index) => (
|
|
53
|
+
* <ColumnsPanel.Item
|
|
54
|
+
* column={column}
|
|
55
|
+
* index={index}
|
|
56
|
+
* label={labels[column.id]}
|
|
57
|
+
* />
|
|
58
|
+
* )}
|
|
59
|
+
* </ColumnsPanel.Root>
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
const ColumnsPanelRoot = (props) => {
|
|
63
|
+
const { table, render, className, children, ref, ...rest } = props;
|
|
64
|
+
/** A lista do centro, a única que se arrasta: o arrasto fica preso a ela. */
|
|
65
|
+
const centerListRef = useRef(null);
|
|
66
|
+
const groups = useSelector(table.store, () => hasTableFeature(table, "columnPinningFeature") ? [
|
|
67
|
+
table.getStartLeafColumns(),
|
|
68
|
+
table.getCenterLeafColumns(),
|
|
69
|
+
table.getEndLeafColumns()
|
|
70
|
+
] : [
|
|
71
|
+
NO_COLUMNS,
|
|
72
|
+
table.getAllLeafColumns(),
|
|
73
|
+
NO_COLUMNS
|
|
74
|
+
], { compare: shallow }).map((columns) => columns.filter(isDataColumn));
|
|
75
|
+
/** Preso à lista do centro, e só na vertical: fora dela não há destino. */
|
|
76
|
+
const modifiers = useMemo(() => [RestrictToVerticalAxis, RestrictToElement.configure({ element: () => centerListRef.current })], []);
|
|
77
|
+
const handleDragEnd = (event) => {
|
|
78
|
+
if (event.canceled) {
|
|
79
|
+
/** O Esc que cancela o arrasto pelo teclado não segue adiante: fecharia o popover em volta. */
|
|
80
|
+
if (event.nativeEvent instanceof KeyboardEvent && event.nativeEvent.key === "Escape") event.nativeEvent.stopPropagation();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const { source } = event.operation;
|
|
84
|
+
/**
|
|
85
|
+
* A posição final vem do item arrastado, e não do destino: durante o arrasto, a lista já se
|
|
86
|
+
* reordena com o destino mais próximo, e soltar em cima de uma fixada, que não aceita nada,
|
|
87
|
+
* chega sem destino. Sem isso, a lista ficaria na ordem nova e a tabela, na antiga.
|
|
88
|
+
*/
|
|
89
|
+
if (!isSortable(source) || source.initialIndex === source.index) return;
|
|
90
|
+
table.setColumnOrder(getColumnsPanelColumnOrder(table.getAllLeafColumns().map((column) => column.id), (groups[1] ?? []).map((column) => column.id), source.initialIndex, source.index));
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Com render-prop ou sem `children`, o laço é daqui, uma lista por grupo com colunas; com nós
|
|
94
|
+
* comuns, de quem usa.
|
|
95
|
+
*/
|
|
96
|
+
const content = typeof children === "function" || children === void 0 ? groups.map((columns, groupIndex) => columns.length > 0 && /* @__PURE__ */ jsx("ul", {
|
|
97
|
+
ref: groupIndex === 1 ? centerListRef : void 0,
|
|
98
|
+
"aria-label": GROUP_LABELS[groupIndex],
|
|
99
|
+
className: mergeTwClassNames([
|
|
100
|
+
"flex",
|
|
101
|
+
"flex-col",
|
|
102
|
+
"gap-0.5",
|
|
103
|
+
GROUP_CLASS_NAMES[groupIndex]
|
|
104
|
+
]),
|
|
105
|
+
children: columns.map((column, index) => /* @__PURE__ */ jsx(Fragment$1, { children: children === void 0 ? hasColumnFeature(column, "columnVisibilityFeature") && /* @__PURE__ */ jsx(ColumnsPanelItem, {
|
|
106
|
+
column,
|
|
107
|
+
index
|
|
108
|
+
}) : children(column, index) }, column.id))
|
|
109
|
+
}, groupIndex)) : children;
|
|
110
|
+
const element = useRender({
|
|
111
|
+
render,
|
|
112
|
+
ref,
|
|
113
|
+
defaultTagName: "div",
|
|
114
|
+
props: mergeProps({
|
|
115
|
+
"data-component": "ColumnsPanel.Root",
|
|
116
|
+
className: mergeTwClassNames([
|
|
117
|
+
"flex",
|
|
118
|
+
"w-56",
|
|
119
|
+
"flex-col"
|
|
120
|
+
], className),
|
|
121
|
+
children: content
|
|
122
|
+
}, rest)
|
|
123
|
+
});
|
|
124
|
+
return /* @__PURE__ */ jsx(DragDropProvider, {
|
|
125
|
+
modifiers,
|
|
126
|
+
onDragEnd: handleDragEnd,
|
|
127
|
+
children: element
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
ColumnsPanelRoot.displayName = "ColumnsPanel.Root";
|
|
131
|
+
//#endregion
|
|
132
|
+
export { ColumnsPanelRoot };
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=columns-panel-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns-panel-root.js","names":["Fragment"],"sources":["../../../src/components/columns-panel/columns-panel-root.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { RestrictToVerticalAxis } from '@dnd-kit/abstract/modifiers';\nimport { RestrictToElement } from '@dnd-kit/dom/modifiers';\nimport { DragDropProvider } from '@dnd-kit/react';\nimport { isSortable } from '@dnd-kit/react/sortable';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { shallow, useSelector } from '@tanstack/react-store';\nimport type { Column, RowData, TableFeatures } from '@tanstack/react-table';\nimport type React from 'react';\nimport { Fragment, useMemo, useRef } from 'react';\nimport type { TableWith } from '../../types';\nimport { hasColumnFeature, hasTableFeature } from '../../utils';\nimport { ColumnsPanelItem } from './columns-panel-item';\nimport { getColumnsPanelColumnOrder } from './get-columns-panel-column-order';\n\nexport type ColumnsPanelRootProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'div'>,\n {\n /** A tabela. Exige `columnOrderingFeature` e `columnVisibilityFeature`. */\n table: TableWith<\n TFeatures,\n TData,\n 'columnOrderingFeature' | 'columnVisibilityFeature'\n >;\n /**\n * Uma função que recebe cada coluna e a posição dela no grupo e devolve o item. Repasse a\n * posição ao `ColumnsPanel.Item`, que a usa no arrasto. Com nós comuns, quem usa faz o laço.\n * @default (column, index) => <ColumnsPanel.Item column={column} index={index} />\n */\n children?:\n | React.ReactNode\n | ((column: Column<TFeatures, TData>, index: number) => React.ReactNode);\n }\n>;\n\n/** Evento de fim de arrasto, como o `DragDropProvider` o entrega. */\ntype DragEndEvent = Parameters<\n NonNullable<React.ComponentProps<typeof DragDropProvider>['onDragEnd']>\n>[0];\n\n/** O nome de cada lista, na ordem das regiões: fixadas no início, centro e fixadas no fim. */\nconst GROUP_LABELS = [\n 'Colunas fixadas no início',\n 'Colunas',\n 'Colunas fixadas no fim',\n];\n\n/**\n * A linha entre as listas, só visual (o alfinete já diz quais são fixadas), fica nas das fixadas,\n * do lado do centro, com o respiro. A lista do centro termina no primeiro e no último item: o\n * arrasto fica preso a ela, e com o respiro dentro dela, o item arrastado cobriria a linha.\n */\nconst GROUP_CLASS_NAMES = [\n 'mb-1 border-gray-6 border-b pb-1',\n undefined,\n 'mt-1 border-gray-6 border-t pt-1',\n];\n\n/** As pontas sem fixadas: a mesma referência, para a tupla não mudar à toa. */\nconst NO_COLUMNS: never[] = [];\n\n/** Se a coluna é de dados, e não de exibição (sem `accessorFn`, como a de seleção). */\nconst isDataColumn = <TFeatures extends TableFeatures, TData extends RowData>(\n column: Column<TFeatures, TData>,\n) => column.accessorFn !== undefined;\n\n/**\n * A lista das colunas da tabela: marca quais aparecem e arrasta para mudar a ordem. Para um\n * popover ou uma gaveta; a posição, o gatilho e o \"restaurar\" (`table.resetColumnOrder()`,\n * `table.resetColumnVisibility()`) são do app.\n *\n * Lista as colunas de dados. As de exibição (sem `accessorFn`, como a de seleção e a de ações)\n * ficam fora e no lugar: reordenar só troca as outras entre si. Com `columnPinningFeature`, a\n * tela vira até três listas (fixadas no início, centro e fixadas no fim), e só a do centro se\n * arrasta.\n *\n * O arrasto é pela alça, com o ponteiro ou o teclado (Espaço pega, setas movem, Espaço solta, Esc\n * cancela), e fica preso à lista do centro: não passa por cima das fixadas. O `Root` assina a\n * ordem e o pinning, e cada `ColumnsPanel.Item`, a visibilidade da coluna dele: funciona com o\n * dono da tabela em `() => null`.\n *\n * @example\n * ```tsx\n * <ColumnsPanel.Root table={table}>\n * {(column, index) => (\n * <ColumnsPanel.Item\n * column={column}\n * index={index}\n * label={labels[column.id]}\n * />\n * )}\n * </ColumnsPanel.Root>\n * ```\n */\nexport const ColumnsPanelRoot = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: ColumnsPanelRootProps<TFeatures, TData>,\n) => {\n const { table, render, className, children, ref, ...rest } = props;\n\n /** A lista do centro, a única que se arrasta: o arrasto fica preso a ela. */\n const centerListRef = useRef<HTMLUListElement>(null);\n\n /**\n * As colunas das três regiões, que o TanStack memoiza, numa tupla: o `shallow` compara item a\n * item, e só re-renderiza quando a ordem ou o pinning mudam. Já na ordem final: o\n * `columnOrder` vale dentro de cada região.\n */\n const regions = useSelector(\n table.store,\n () =>\n hasTableFeature(table, 'columnPinningFeature')\n ? [\n table.getStartLeafColumns(),\n table.getCenterLeafColumns(),\n table.getEndLeafColumns(),\n ]\n : [NO_COLUMNS, table.getAllLeafColumns(), NO_COLUMNS],\n { compare: shallow },\n );\n\n const groups = regions.map((columns) => columns.filter(isDataColumn));\n\n /** Preso à lista do centro, e só na vertical: fora dela não há destino. */\n const modifiers = useMemo(\n () => [\n RestrictToVerticalAxis,\n RestrictToElement.configure({ element: () => centerListRef.current }),\n ],\n [],\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n if (event.canceled) {\n /** O Esc que cancela o arrasto pelo teclado não segue adiante: fecharia o popover em volta. */\n if (\n event.nativeEvent instanceof KeyboardEvent &&\n event.nativeEvent.key === 'Escape'\n ) {\n event.nativeEvent.stopPropagation();\n }\n\n return;\n }\n\n const { source } = event.operation;\n\n /**\n * A posição final vem do item arrastado, e não do destino: durante o arrasto, a lista já se\n * reordena com o destino mais próximo, e soltar em cima de uma fixada, que não aceita nada,\n * chega sem destino. Sem isso, a lista ficaria na ordem nova e a tabela, na antiga.\n */\n if (!isSortable(source) || source.initialIndex === source.index) {\n return;\n }\n\n table.setColumnOrder(\n getColumnsPanelColumnOrder(\n table.getAllLeafColumns().map((column) => column.id),\n (groups[1] ?? []).map((column) => column.id),\n source.initialIndex,\n source.index,\n ),\n );\n };\n\n /**\n * Com render-prop ou sem `children`, o laço é daqui, uma lista por grupo com colunas; com nós\n * comuns, de quem usa.\n */\n const content =\n typeof children === 'function' || children === undefined\n ? groups.map(\n (columns, groupIndex) =>\n columns.length > 0 && (\n <ul\n key={groupIndex}\n ref={groupIndex === 1 ? centerListRef : undefined}\n aria-label={GROUP_LABELS[groupIndex]}\n className={mergeTwClassNames([\n 'flex',\n 'flex-col',\n 'gap-0.5',\n GROUP_CLASS_NAMES[groupIndex],\n ])}\n >\n {columns.map((column, index) => (\n <Fragment key={column.id}>\n {children === undefined\n ? hasColumnFeature(column, 'columnVisibilityFeature') && (\n <ColumnsPanelItem\n column={column}\n index={index}\n />\n )\n : children(column, index)}\n </Fragment>\n ))}\n </ul>\n ),\n )\n : children;\n\n const element = useRender({\n render,\n ref,\n defaultTagName: 'div',\n props: mergeProps(\n {\n 'data-component': 'ColumnsPanel.Root',\n className: mergeTwClassNames(['flex', 'w-56', 'flex-col'], className),\n children: content,\n },\n rest,\n ),\n });\n\n return (\n <DragDropProvider\n modifiers={modifiers}\n onDragEnd={handleDragEnd}\n >\n {element}\n </DragDropProvider>\n );\n};\n\nColumnsPanelRoot.displayName = 'ColumnsPanel.Root';\n"],"mappings":";;;;;;;;;;;;;;AA6CA,MAAM,eAAe;CACnB;CACA;CACA;AACF;;;;;;AAOA,MAAM,oBAAoB;CACxB;CACA,KAAA;CACA;AACF;;AAGA,MAAM,aAAsB,CAAC;;AAG7B,MAAM,gBACJ,WACG,OAAO,eAAe,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B3B,MAAa,oBAIX,UACG;CACH,MAAM,EAAE,OAAO,QAAQ,WAAW,UAAU,KAAK,GAAG,SAAS;;CAG7D,MAAM,gBAAgB,OAAyB,IAAI;CAoBnD,MAAM,SAbU,YACd,MAAM,aAEJ,gBAAgB,OAAO,sBAAsB,IACzC;EACE,MAAM,oBAAoB;EAC1B,MAAM,qBAAqB;EAC3B,MAAM,kBAAkB;CAC1B,IACA;EAAC;EAAY,MAAM,kBAAkB;EAAG;CAAU,GACxD,EAAE,SAAS,QAAQ,CAGA,CAAC,CAAC,KAAK,YAAY,QAAQ,OAAO,YAAY,CAAC;;CAGpE,MAAM,YAAY,cACV,CACJ,wBACA,kBAAkB,UAAU,EAAE,eAAe,cAAc,QAAQ,CAAC,CACtE,GACA,CAAC,CACH;CAEA,MAAM,iBAAiB,UAAwB;EAC7C,IAAI,MAAM,UAAU;;GAElB,IACE,MAAM,uBAAuB,iBAC7B,MAAM,YAAY,QAAQ,UAE1B,MAAM,YAAY,gBAAgB;GAGpC;EACF;EAEA,MAAM,EAAE,WAAW,MAAM;;;;;;EAOzB,IAAI,CAAC,WAAW,MAAM,KAAK,OAAO,iBAAiB,OAAO,OACxD;EAGF,MAAM,eACJ,2BACE,MAAM,kBAAkB,CAAC,CAAC,KAAK,WAAW,OAAO,EAAE,IAClD,OAAO,MAAM,CAAC,EAAA,CAAG,KAAK,WAAW,OAAO,EAAE,GAC3C,OAAO,cACP,OAAO,KACT,CACF;CACF;;;;;CAMA,MAAM,UACJ,OAAO,aAAa,cAAc,aAAa,KAAA,IAC3C,OAAO,KACJ,SAAS,eACR,QAAQ,SAAS,KACf,oBAAC,MAAD;EAEE,KAAK,eAAe,IAAI,gBAAgB,KAAA;EACxC,cAAY,aAAa;EACzB,WAAW,kBAAkB;GAC3B;GACA;GACA;GACA,kBAAkB;EACpB,CAAC;EAEA,UAAA,QAAQ,KAAK,QAAQ,UACpB,oBAACA,YAAD,EAAA,UACG,aAAa,KAAA,IACV,iBAAiB,QAAQ,yBAAyB,KAChD,oBAAC,kBAAD;GACU;GACD;EACR,CAAA,IAEH,SAAS,QAAQ,KAAK,EAClB,GATK,OAAO,EASZ,CACX;CACC,GAtBG,UAsBH,CAEV,IACA;CAEN,MAAM,UAAU,UAAU;EACxB;EACA;EACA,gBAAgB;EAChB,OAAO,WACL;GACE,kBAAkB;GAClB,WAAW,kBAAkB;IAAC;IAAQ;IAAQ;GAAU,GAAG,SAAS;GACpE,UAAU;EACZ,GACA,IACF;CACF,CAAC;CAED,OACE,oBAAC,kBAAD;EACa;EACX,WAAW;EAEV,UAAA;CACe,CAAA;AAEtB;AAEA,iBAAiB,cAAc"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/components/columns-panel/get-columns-panel-column-order.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* A ordem completa das colunas depois de um arrasto na lista do centro. Move o item de
|
|
4
|
+
* `fromIndex` para `toIndex` entre os `centerIds`, e a nova ordem deles ocupa as posições que eles
|
|
5
|
+
* já tinham em `columnIds`: as colunas fora da lista (as de exibição e as fixadas) ficam onde
|
|
6
|
+
* estão.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* getColumnsPanelColumnOrder(['select', 'name', 'age', 'city'], ['name', 'age', 'city'], 0, 2);
|
|
11
|
+
* // → ['select', 'age', 'city', 'name']
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare const getColumnsPanelColumnOrder: (columnIds: readonly string[], centerIds: readonly string[], fromIndex: number, toIndex: number) => string[];
|
|
15
|
+
//#endregion
|
|
16
|
+
//# sourceMappingURL=get-columns-panel-column-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { arrayMove } from "@dnd-kit/helpers";
|
|
2
|
+
//#region src/components/columns-panel/get-columns-panel-column-order.ts
|
|
3
|
+
/**
|
|
4
|
+
* A ordem completa das colunas depois de um arrasto na lista do centro. Move o item de
|
|
5
|
+
* `fromIndex` para `toIndex` entre os `centerIds`, e a nova ordem deles ocupa as posições que eles
|
|
6
|
+
* já tinham em `columnIds`: as colunas fora da lista (as de exibição e as fixadas) ficam onde
|
|
7
|
+
* estão.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* getColumnsPanelColumnOrder(['select', 'name', 'age', 'city'], ['name', 'age', 'city'], 0, 2);
|
|
12
|
+
* // → ['select', 'age', 'city', 'name']
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
const getColumnsPanelColumnOrder = (columnIds, centerIds, fromIndex, toIndex) => {
|
|
16
|
+
const nextCenterIds = arrayMove([...centerIds], fromIndex, toIndex);
|
|
17
|
+
const centerIdSet = new Set(centerIds);
|
|
18
|
+
let nextIndex = 0;
|
|
19
|
+
return columnIds.map((columnId) => centerIdSet.has(columnId) ? nextCenterIds[nextIndex++] ?? columnId : columnId);
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { getColumnsPanelColumnOrder };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=get-columns-panel-column-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-columns-panel-column-order.js","names":[],"sources":["../../../src/components/columns-panel/get-columns-panel-column-order.ts"],"sourcesContent":["import { arrayMove } from '@dnd-kit/helpers';\n\n/**\n * A ordem completa das colunas depois de um arrasto na lista do centro. Move o item de\n * `fromIndex` para `toIndex` entre os `centerIds`, e a nova ordem deles ocupa as posições que eles\n * já tinham em `columnIds`: as colunas fora da lista (as de exibição e as fixadas) ficam onde\n * estão.\n *\n * @example\n * ```ts\n * getColumnsPanelColumnOrder(['select', 'name', 'age', 'city'], ['name', 'age', 'city'], 0, 2);\n * // → ['select', 'age', 'city', 'name']\n * ```\n */\nexport const getColumnsPanelColumnOrder = (\n columnIds: readonly string[],\n centerIds: readonly string[],\n fromIndex: number,\n toIndex: number,\n) => {\n const nextCenterIds = arrayMove([...centerIds], fromIndex, toIndex);\n const centerIdSet = new Set(centerIds);\n\n let nextIndex = 0;\n\n return columnIds.map((columnId) =>\n centerIdSet.has(columnId)\n ? (nextCenterIds[nextIndex++] ?? columnId)\n : columnId,\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAa,8BACX,WACA,WACA,WACA,YACG;CACH,MAAM,gBAAgB,UAAU,CAAC,GAAG,SAAS,GAAG,WAAW,OAAO;CAClE,MAAM,cAAc,IAAI,IAAI,SAAS;CAErC,IAAI,YAAY;CAEhB,OAAO,UAAU,KAAK,aACpB,YAAY,IAAI,QAAQ,IACnB,cAAc,gBAAgB,WAC/B,QACN;AACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ColumnsPanelItem, ColumnsPanelItemProps } from "./columns-panel-item.js";
|
|
2
|
+
import { ColumnsPanelRoot, ColumnsPanelRootProps } from "./columns-panel-root.js";
|
|
3
|
+
declare namespace index_parts_d_exports {
|
|
4
|
+
export { ColumnsPanelItem as Item, ColumnsPanelItemProps as ItemProps, ColumnsPanelRoot as Root, ColumnsPanelRootProps as RootProps };
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { ColumnsPanelItem as Item, type ColumnsPanelItemProps as ItemProps, ColumnsPanelRoot as Root, type ColumnsPanelRootProps as RootProps, index_parts_d_exports };
|
|
8
|
+
//# sourceMappingURL=index.parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../src/components/columns-panel/index.parts.ts"],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { ColumnsPanelItem } from "./columns-panel-item.js";
|
|
3
|
+
import { ColumnsPanelRoot } from "./columns-panel-root.js";
|
|
4
|
+
//#region src/components/columns-panel/index.parts.ts
|
|
5
|
+
var index_parts_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
Item: () => ColumnsPanelItem,
|
|
7
|
+
Root: () => ColumnsPanelRoot
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ColumnsPanelItem as Item, ColumnsPanelRoot as Root, index_parts_exports };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=index.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.js","names":[],"sources":["../../../src/components/columns-panel/index.parts.ts"],"sourcesContent":["export { ColumnsPanelItem as Item } from './columns-panel-item';\nexport { ColumnsPanelRoot as Root } from './columns-panel-root';\n\n/* types */\n\nexport type { ColumnsPanelItemProps as ItemProps } from './columns-panel-item';\nexport type { ColumnsPanelRootProps as RootProps } from './columns-panel-root';\n"],"mappings":""}
|