@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 @@
|
|
|
1
|
+
{"version":3,"file":"use-data-table-header-offset.js","names":[],"sources":["../../../../src/components/data-table/root/use-data-table-header-offset.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\n/** O cabeçalho da tabela, pelo `data-component` que o `DataTable.Header` põe. */\nconst HEADER_SELECTOR = '[data-component=\"DataTable.Header\"]';\n\n/**\n * Mede a altura do `DataTable.Header` dentro do contêiner e a escreve em\n * `--data-table-header-offset`, no próprio contêiner. A barra de rolagem vertical lê a variável\n * para começar abaixo do cabeçalho, que é sticky e cobriria o começo dela.\n *\n * Mede pelo `ResizeObserver`, fora do React: a altura muda com a densidade e com os níveis de um\n * cabeçalho agrupado, sem render do contêiner. O cabeçalho é procurado quando o contêiner monta;\n * um que monte depois não é medido, e a barra começa no topo.\n *\n * Devolve o callback ref do contêiner.\n */\nexport const useDataTableHeaderOffset = () => {\n /** O observer do contêiner atual, desligado quando o elemento sai ou é trocado. */\n const observerRef = useRef<ResizeObserver | null>(null);\n\n return useCallback((element: HTMLElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n const header = element?.querySelector(HEADER_SELECTOR);\n\n if (!(element && header)) {\n return;\n }\n\n const observer = new ResizeObserver(([entry]) => {\n const height = entry?.borderBoxSize[0]?.blockSize ?? 0;\n\n element.style.setProperty('--data-table-header-offset', `${height}px`);\n });\n\n observer.observe(header);\n observerRef.current = observer;\n }, []);\n};\n"],"mappings":";;;AAGA,MAAM,kBAAkB;;;;;;;;;;;;AAaxB,MAAa,iCAAiC;;CAE5C,MAAM,cAAc,OAA8B,IAAI;CAEtD,OAAO,aAAa,YAAgC;EAClD,YAAY,SAAS,WAAW;EAChC,YAAY,UAAU;EAEtB,MAAM,SAAS,SAAS,cAAc,eAAe;EAErD,IAAI,EAAE,WAAW,SACf;EAGF,MAAM,WAAW,IAAI,gBAAgB,CAAC,WAAW;GAC/C,MAAM,SAAS,OAAO,cAAc,EAAE,EAAE,aAAa;GAErD,QAAQ,MAAM,YAAY,8BAA8B,GAAG,OAAO,GAAG;EACvE,CAAC;EAED,SAAS,QAAQ,MAAM;EACvB,YAAY,UAAU;CACxB,GAAG,CAAC,CAAC;AACP"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RowWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
|
+
import { Checkbox } from "@lucasbernardosn/react-ui/fields/checkbox";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
6
|
+
//#region src/components/data-table/selection/data-table-row-checkbox.d.ts
|
|
7
|
+
export type DataTableRowCheckboxProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Omit<Checkbox.RootProps, 'checked' | 'defaultChecked' | 'indeterminate' | 'onCheckedChange'>, {
|
|
8
|
+
/** A linha. Exige `rowSelectionFeature`. */
|
|
9
|
+
row: RowWith<TFeatures, TData, 'rowSelectionFeature'>;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* O checkbox de seleção de uma linha, para a célula de uma coluna de seleção. Shift+clique
|
|
13
|
+
* seleciona o intervalo desde a última linha marcada (`enableRowRangeSelection: false` desliga).
|
|
14
|
+
* Numa linha que não seleciona (`enableRowSelection`), fica desabilitado; com sub-linhas em parte
|
|
15
|
+
* selecionadas, mostra o estado misto.
|
|
16
|
+
*
|
|
17
|
+
* A seleção guarda só os ids das linhas (`{ [rowId]: true }`) e sobrevive à troca de página: com
|
|
18
|
+
* a paginação pela API, os ids de outras páginas ficam no estado, e a linha volta marcada quando
|
|
19
|
+
* a página volta. Para isso, a tabela precisa do `getRowId` com o id do registro: sem ele, o id é
|
|
20
|
+
* a posição na página, que se repete em todas, e marcar a primeira linha de uma marcaria a
|
|
21
|
+
* primeira de todas. Os dados das linhas de outras páginas não estão na tabela
|
|
22
|
+
* (`getSelectedRowModel()` só traz as carregadas): para agir sobre a seleção, mande os ids à API
|
|
23
|
+
* e limpe com `table.resetRowSelection()` depois.
|
|
24
|
+
*
|
|
25
|
+
* Assina só a seleção. As props do `Checkbox.Root` passam adiante, como `colorScheme` e
|
|
26
|
+
* `aria-label`.
|
|
27
|
+
*/
|
|
28
|
+
export declare const DataTableRowCheckbox: {
|
|
29
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableRowCheckboxProps<TFeatures, TData>): import("react").JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
//# sourceMappingURL=data-table-row-checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-row-checkbox.d.ts","names":[],"sources":["../../../../src/components/data-table/selection/data-table-row-checkbox.tsx"],"mappings":";;;;;;YAOY,0BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KACE,SAAS;;EAKT,KAAK,QAAQ,WAAW;;;;;;;;;;;;;;;;;;;qBAqBf;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,0BAA0B,WAAW,yBAAM,IAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { hasRowFeature } from "../../../utils/has-feature.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useSelector } from "@tanstack/react-store";
|
|
4
|
+
import { Checkbox } from "@lucasbernardosn/react-ui/fields/checkbox";
|
|
5
|
+
//#region src/components/data-table/selection/data-table-row-checkbox.tsx
|
|
6
|
+
/**
|
|
7
|
+
* O checkbox de seleção de uma linha, para a célula de uma coluna de seleção. Shift+clique
|
|
8
|
+
* seleciona o intervalo desde a última linha marcada (`enableRowRangeSelection: false` desliga).
|
|
9
|
+
* Numa linha que não seleciona (`enableRowSelection`), fica desabilitado; com sub-linhas em parte
|
|
10
|
+
* selecionadas, mostra o estado misto.
|
|
11
|
+
*
|
|
12
|
+
* A seleção guarda só os ids das linhas (`{ [rowId]: true }`) e sobrevive à troca de página: com
|
|
13
|
+
* a paginação pela API, os ids de outras páginas ficam no estado, e a linha volta marcada quando
|
|
14
|
+
* a página volta. Para isso, a tabela precisa do `getRowId` com o id do registro: sem ele, o id é
|
|
15
|
+
* a posição na página, que se repete em todas, e marcar a primeira linha de uma marcaria a
|
|
16
|
+
* primeira de todas. Os dados das linhas de outras páginas não estão na tabela
|
|
17
|
+
* (`getSelectedRowModel()` só traz as carregadas): para agir sobre a seleção, mande os ids à API
|
|
18
|
+
* e limpe com `table.resetRowSelection()` depois.
|
|
19
|
+
*
|
|
20
|
+
* Assina só a seleção. As props do `Checkbox.Root` passam adiante, como `colorScheme` e
|
|
21
|
+
* `aria-label`.
|
|
22
|
+
*/
|
|
23
|
+
const DataTableRowCheckbox = (props) => {
|
|
24
|
+
const { row, children, ...rest } = props;
|
|
25
|
+
/**
|
|
26
|
+
* O estado do checkbox num valor só, para uma assinatura por linha. Re-renderiza quando muda a
|
|
27
|
+
* seleção desta linha ou das sub-linhas; as sub-linhas mudam com os dados, que já trazem uma
|
|
28
|
+
* linha nova por prop.
|
|
29
|
+
*/
|
|
30
|
+
const checkedState = useSelector(row.table.atoms.rowSelection, () => row.getIsSelected() ? "checked" : row.getIsSomeSelected() ? "indeterminate" : "unchecked");
|
|
31
|
+
return /* @__PURE__ */ jsx(Checkbox.Root, {
|
|
32
|
+
"data-component": "DataTable.RowCheckbox",
|
|
33
|
+
"aria-label": "Selecionar linha",
|
|
34
|
+
checked: checkedState === "checked",
|
|
35
|
+
indeterminate: checkedState === "indeterminate",
|
|
36
|
+
disabled: !row.getCanSelect(),
|
|
37
|
+
tabIndex: hasRowFeature(row, "activeRowFeature") ? -1 : void 0,
|
|
38
|
+
onCheckedChange: (checked, eventDetails) => row.getToggleSelectedHandler()({
|
|
39
|
+
target: { checked },
|
|
40
|
+
nativeEvent: eventDetails.event
|
|
41
|
+
}),
|
|
42
|
+
...rest,
|
|
43
|
+
children: children === void 0 ? /* @__PURE__ */ jsx(Checkbox.Indicator, {}) : children
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
DataTableRowCheckbox.displayName = "DataTable.RowCheckbox";
|
|
47
|
+
//#endregion
|
|
48
|
+
export { DataTableRowCheckbox };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=data-table-row-checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-row-checkbox.js","names":[],"sources":["../../../../src/components/data-table/selection/data-table-row-checkbox.tsx"],"sourcesContent":["import { Checkbox } from '@lucasbernardosn/react-ui/fields/checkbox';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { RowWith } from '../../../types';\nimport { hasRowFeature } from '../../../utils';\n\nexport type DataTableRowCheckboxProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Omit<\n Checkbox.RootProps,\n 'checked' | 'defaultChecked' | 'indeterminate' | 'onCheckedChange'\n >,\n {\n /** A linha. Exige `rowSelectionFeature`. */\n row: RowWith<TFeatures, TData, 'rowSelectionFeature'>;\n }\n>;\n\n/**\n * O checkbox de seleção de uma linha, para a célula de uma coluna de seleção. Shift+clique\n * seleciona o intervalo desde a última linha marcada (`enableRowRangeSelection: false` desliga).\n * Numa linha que não seleciona (`enableRowSelection`), fica desabilitado; com sub-linhas em parte\n * selecionadas, mostra o estado misto.\n *\n * A seleção guarda só os ids das linhas (`{ [rowId]: true }`) e sobrevive à troca de página: com\n * a paginação pela API, os ids de outras páginas ficam no estado, e a linha volta marcada quando\n * a página volta. Para isso, a tabela precisa do `getRowId` com o id do registro: sem ele, o id é\n * a posição na página, que se repete em todas, e marcar a primeira linha de uma marcaria a\n * primeira de todas. Os dados das linhas de outras páginas não estão na tabela\n * (`getSelectedRowModel()` só traz as carregadas): para agir sobre a seleção, mande os ids à API\n * e limpe com `table.resetRowSelection()` depois.\n *\n * Assina só a seleção. As props do `Checkbox.Root` passam adiante, como `colorScheme` e\n * `aria-label`.\n */\nexport const DataTableRowCheckbox = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableRowCheckboxProps<TFeatures, TData>,\n) => {\n const { row, children, ...rest } = props;\n\n /**\n * O estado do checkbox num valor só, para uma assinatura por linha. Re-renderiza quando muda a\n * seleção desta linha ou das sub-linhas; as sub-linhas mudam com os dados, que já trazem uma\n * linha nova por prop.\n */\n const checkedState = useSelector(row.table.atoms.rowSelection, () =>\n row.getIsSelected()\n ? 'checked'\n : row.getIsSomeSelected()\n ? 'indeterminate'\n : 'unchecked',\n );\n\n return (\n <Checkbox.Root\n data-component=\"DataTable.RowCheckbox\"\n aria-label=\"Selecionar linha\"\n checked={checkedState === 'checked'}\n indeterminate={checkedState === 'indeterminate'}\n disabled={!row.getCanSelect()}\n // Com a navegação, a tabela tem um ponto de Tab só, a linha ativa, e o Espaço nela alterna\n // a seleção. O clique continua.\n tabIndex={hasRowFeature(row, 'activeRowFeature') ? -1 : undefined}\n // O handler lê `target.checked` e o Shift do evento; o Base UI entrega os dois separados.\n onCheckedChange={(checked, eventDetails) =>\n row.getToggleSelectedHandler()({\n target: { checked },\n nativeEvent: eventDetails.event,\n })\n }\n {...rest}\n >\n {children === undefined ? <Checkbox.Indicator /> : children}\n </Checkbox.Root>\n );\n};\n\nDataTableRowCheckbox.displayName = 'DataTable.RowCheckbox';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsCA,MAAa,wBAIX,UACG;CACH,MAAM,EAAE,KAAK,UAAU,GAAG,SAAS;;;;;;CAOnC,MAAM,eAAe,YAAY,IAAI,MAAM,MAAM,oBAC/C,IAAI,cAAc,IACd,YACA,IAAI,kBAAkB,IACpB,kBACA,WACR;CAEA,OACE,oBAAC,SAAS,MAAV;EACE,kBAAe;EACf,cAAW;EACX,SAAS,iBAAiB;EAC1B,eAAe,iBAAiB;EAChC,UAAU,CAAC,IAAI,aAAa;EAG5B,UAAU,cAAc,KAAK,kBAAkB,IAAI,KAAK,KAAA;EAExD,kBAAkB,SAAS,iBACzB,IAAI,yBAAyB,CAAC,CAAC;GAC7B,QAAQ,EAAE,QAAQ;GAClB,aAAa,aAAa;EAC5B,CAAC;EAEH,GAAI;EAEH,UAAA,aAAa,KAAA,IAAY,oBAAC,SAAS,WAAV,CAAqB,CAAA,IAAI;CACtC,CAAA;AAEnB;AAEA,qBAAqB,cAAc"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TableWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
|
+
import { Checkbox } from "@lucasbernardosn/react-ui/fields/checkbox";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
6
|
+
//#region src/components/data-table/selection/data-table-select-all-checkbox.d.ts
|
|
7
|
+
export type DataTableSelectAllCheckboxProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Omit<Checkbox.RootProps, 'checked' | 'defaultChecked' | 'indeterminate' | 'onCheckedChange'>, {
|
|
8
|
+
/** A tabela. Exige `rowSelectionFeature`. */
|
|
9
|
+
table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;
|
|
10
|
+
/**
|
|
11
|
+
* O que o checkbox marca e mede: as linhas da página ou todas as linhas da tabela. Com
|
|
12
|
+
* paginação, a página: o checkbox fica no cabeçalho da página à vista, e marcar linhas
|
|
13
|
+
* escondidas em outras surpreende. Com a paginação pela API (`manualPagination`), a tabela só
|
|
14
|
+
* tem a página carregada, e `'all'` contaria os ids selecionados em outras páginas.
|
|
15
|
+
* @default 'page' com `rowPaginationFeature`, 'all' sem
|
|
16
|
+
*/
|
|
17
|
+
scope?: 'page' | 'all';
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* O checkbox que marca ou desmarca todas as linhas, para o header de uma coluna de seleção. Com
|
|
21
|
+
* parte das linhas marcadas, mostra o estado misto; o clique então marca todas. Com
|
|
22
|
+
* `loadingFeature`, fica desabilitado enquanto a tabela carrega.
|
|
23
|
+
*
|
|
24
|
+
* As props do `Checkbox.Root` passam adiante, como `colorScheme` e `aria-label`.
|
|
25
|
+
*/
|
|
26
|
+
export declare const DataTableSelectAllCheckbox: {
|
|
27
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSelectAllCheckboxProps<TFeatures, TData>): import("react").JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
//# sourceMappingURL=data-table-select-all-checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-select-all-checkbox.d.ts","names":[],"sources":["../../../../src/components/data-table/selection/data-table-select-all-checkbox.tsx"],"mappings":";;;;;;YAOY,gCACV,kBAAkB,eAClB,cAAc,WACZ,cACF,KACE,SAAS;;EAKT,OAAO,UAAU,WAAW;;;;;;;;EAQ5B;;;;;;;;;qBAWS;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,gCAAgC,WAAW,yBAAM,IAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { hasTableFeature } from "../../../utils/has-feature.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useSelector } from "@tanstack/react-store";
|
|
4
|
+
import { Checkbox } from "@lucasbernardosn/react-ui/fields/checkbox";
|
|
5
|
+
//#region src/components/data-table/selection/data-table-select-all-checkbox.tsx
|
|
6
|
+
/**
|
|
7
|
+
* O checkbox que marca ou desmarca todas as linhas, para o header de uma coluna de seleção. Com
|
|
8
|
+
* parte das linhas marcadas, mostra o estado misto; o clique então marca todas. Com
|
|
9
|
+
* `loadingFeature`, fica desabilitado enquanto a tabela carrega.
|
|
10
|
+
*
|
|
11
|
+
* As props do `Checkbox.Root` passam adiante, como `colorScheme` e `aria-label`.
|
|
12
|
+
*/
|
|
13
|
+
const DataTableSelectAllCheckbox = (props) => {
|
|
14
|
+
const { table, scope, children, ...rest } = props;
|
|
15
|
+
const isPageScope = scope === void 0 ? hasTableFeature(table, "rowPaginationFeature") : scope === "page";
|
|
16
|
+
/**
|
|
17
|
+
* O estado do checkbox num valor só. Re-renderiza quando ele muda. O store, e não só o atom da
|
|
18
|
+
* seleção: o resultado também muda com as linhas, como na troca de página ou de dados.
|
|
19
|
+
*/
|
|
20
|
+
const checkedState = useSelector(table.store, () => {
|
|
21
|
+
if (isPageScope) return table.getIsAllPageRowsSelected() ? "checked" : table.getIsSomePageRowsSelected() ? "indeterminate" : "unchecked";
|
|
22
|
+
return table.getIsAllRowsSelected() ? "checked" : table.getIsSomeRowsSelected() ? "indeterminate" : "unchecked";
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Re-renderiza quando o carregamento liga ou desliga. A feature é opcional: assina o store. Na
|
|
26
|
+
* hora, e não depois dos 200ms do visual, para não sobrar uma janela em que o clique passa.
|
|
27
|
+
*/
|
|
28
|
+
const isLoading = useSelector(table.store, () => hasTableFeature(table, "loadingFeature") && table.atoms.isLoading.get());
|
|
29
|
+
return /* @__PURE__ */ jsx(Checkbox.Root, {
|
|
30
|
+
"data-component": "DataTable.SelectAllCheckbox",
|
|
31
|
+
"aria-label": isPageScope ? "Selecionar todas as linhas da página" : "Selecionar todas as linhas",
|
|
32
|
+
checked: checkedState === "checked",
|
|
33
|
+
indeterminate: checkedState === "indeterminate",
|
|
34
|
+
disabled: isLoading,
|
|
35
|
+
onCheckedChange: (checked) => isPageScope ? table.toggleAllPageRowsSelected(checked) : table.toggleAllRowsSelected(checked),
|
|
36
|
+
...rest,
|
|
37
|
+
children: children === void 0 ? /* @__PURE__ */ jsx(Checkbox.Indicator, {}) : children
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
DataTableSelectAllCheckbox.displayName = "DataTable.SelectAllCheckbox";
|
|
41
|
+
//#endregion
|
|
42
|
+
export { DataTableSelectAllCheckbox };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=data-table-select-all-checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-select-all-checkbox.js","names":[],"sources":["../../../../src/components/data-table/selection/data-table-select-all-checkbox.tsx"],"sourcesContent":["import { Checkbox } from '@lucasbernardosn/react-ui/fields/checkbox';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { TableWith } from '../../../types';\nimport { hasTableFeature } from '../../../utils';\n\nexport type DataTableSelectAllCheckboxProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n Omit<\n Checkbox.RootProps,\n 'checked' | 'defaultChecked' | 'indeterminate' | 'onCheckedChange'\n >,\n {\n /** A tabela. Exige `rowSelectionFeature`. */\n table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;\n /**\n * O que o checkbox marca e mede: as linhas da página ou todas as linhas da tabela. Com\n * paginação, a página: o checkbox fica no cabeçalho da página à vista, e marcar linhas\n * escondidas em outras surpreende. Com a paginação pela API (`manualPagination`), a tabela só\n * tem a página carregada, e `'all'` contaria os ids selecionados em outras páginas.\n * @default 'page' com `rowPaginationFeature`, 'all' sem\n */\n scope?: 'page' | 'all';\n }\n>;\n\n/**\n * O checkbox que marca ou desmarca todas as linhas, para o header de uma coluna de seleção. Com\n * parte das linhas marcadas, mostra o estado misto; o clique então marca todas. Com\n * `loadingFeature`, fica desabilitado enquanto a tabela carrega.\n *\n * As props do `Checkbox.Root` passam adiante, como `colorScheme` e `aria-label`.\n */\nexport const DataTableSelectAllCheckbox = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSelectAllCheckboxProps<TFeatures, TData>,\n) => {\n const { table, scope, children, ...rest } = props;\n\n const isPageScope =\n scope === undefined\n ? hasTableFeature(table, 'rowPaginationFeature')\n : scope === 'page';\n\n /**\n * O estado do checkbox num valor só. Re-renderiza quando ele muda. O store, e não só o atom da\n * seleção: o resultado também muda com as linhas, como na troca de página ou de dados.\n */\n const checkedState = useSelector(table.store, () => {\n if (isPageScope) {\n return table.getIsAllPageRowsSelected()\n ? 'checked'\n : table.getIsSomePageRowsSelected()\n ? 'indeterminate'\n : 'unchecked';\n }\n\n return table.getIsAllRowsSelected()\n ? 'checked'\n : table.getIsSomeRowsSelected()\n ? 'indeterminate'\n : 'unchecked';\n });\n\n /**\n * Re-renderiza quando o carregamento liga ou desliga. A feature é opcional: assina o store. Na\n * hora, e não depois dos 200ms do visual, para não sobrar uma janela em que o clique passa.\n */\n const isLoading = useSelector(\n table.store,\n () =>\n hasTableFeature(table, 'loadingFeature') && table.atoms.isLoading.get(),\n );\n\n return (\n <Checkbox.Root\n data-component=\"DataTable.SelectAllCheckbox\"\n aria-label={\n isPageScope\n ? 'Selecionar todas as linhas da página'\n : 'Selecionar todas as linhas'\n }\n checked={checkedState === 'checked'}\n indeterminate={checkedState === 'indeterminate'}\n // Durante a carga, as linhas ainda são as antigas: marcar todas marcaria os ids delas.\n disabled={isLoading}\n onCheckedChange={(checked) =>\n isPageScope\n ? table.toggleAllPageRowsSelected(checked)\n : table.toggleAllRowsSelected(checked)\n }\n {...rest}\n >\n {children === undefined ? <Checkbox.Indicator /> : children}\n </Checkbox.Root>\n );\n};\n\nDataTableSelectAllCheckbox.displayName = 'DataTable.SelectAllCheckbox';\n"],"mappings":";;;;;;;;;;;;AAoCA,MAAa,8BAIX,UACG;CACH,MAAM,EAAE,OAAO,OAAO,UAAU,GAAG,SAAS;CAE5C,MAAM,cACJ,UAAU,KAAA,IACN,gBAAgB,OAAO,sBAAsB,IAC7C,UAAU;;;;;CAMhB,MAAM,eAAe,YAAY,MAAM,aAAa;EAClD,IAAI,aACF,OAAO,MAAM,yBAAyB,IAClC,YACA,MAAM,0BAA0B,IAC9B,kBACA;EAGR,OAAO,MAAM,qBAAqB,IAC9B,YACA,MAAM,sBAAsB,IAC1B,kBACA;CACR,CAAC;;;;;CAMD,MAAM,YAAY,YAChB,MAAM,aAEJ,gBAAgB,OAAO,gBAAgB,KAAK,MAAM,MAAM,UAAU,IAAI,CAC1E;CAEA,OACE,oBAAC,SAAS,MAAV;EACE,kBAAe;EACf,cACE,cACI,yCACA;EAEN,SAAS,iBAAiB;EAC1B,eAAe,iBAAiB;EAEhC,UAAU;EACV,kBAAkB,YAChB,cACI,MAAM,0BAA0B,OAAO,IACvC,MAAM,sBAAsB,OAAO;EAEzC,GAAI;EAEH,UAAA,aAAa,KAAA,IAAY,oBAAC,SAAS,WAAV,CAAqB,CAAA,IAAI;CACtC,CAAA;AAEnB;AAEA,2BAA2B,cAAc"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RowWith, TableWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
|
+
//#region src/components/data-table/selection/selection-column-def.d.ts
|
|
5
|
+
/** As opções da coluna de seleção. */
|
|
6
|
+
export type SelectionColumnDefOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* O id da coluna.
|
|
9
|
+
* @default 'select'
|
|
10
|
+
*/
|
|
11
|
+
id?: string;
|
|
12
|
+
/**
|
|
13
|
+
* O que o checkbox do header marca e mede. Ver `DataTable.SelectAllCheckbox`.
|
|
14
|
+
* @default 'page' com `rowPaginationFeature`, 'all' sem
|
|
15
|
+
*/
|
|
16
|
+
scope?: 'page' | 'all';
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o
|
|
20
|
+
* `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem
|
|
21
|
+
* esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes
|
|
22
|
+
* ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do
|
|
23
|
+
* registro (ver `DataTable.RowCheckbox`).
|
|
24
|
+
*
|
|
25
|
+
* Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e
|
|
26
|
+
* não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem
|
|
27
|
+
* `rowSelectionFeature` é recusada pelo header e pela célula daqui.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const columns = columnHelper.columns([
|
|
32
|
+
* columnHelper.display(DataTable.selectionColumnDef()),
|
|
33
|
+
* columnHelper.accessor('name', { header: 'Nome' }),
|
|
34
|
+
* ]);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare const selectionColumnDef: (options?: SelectionColumnDefOptions) => {
|
|
38
|
+
id: string;
|
|
39
|
+
size: number;
|
|
40
|
+
minSize: number;
|
|
41
|
+
maxSize: number;
|
|
42
|
+
align: "center";
|
|
43
|
+
enableResizing: boolean;
|
|
44
|
+
enableSorting: boolean;
|
|
45
|
+
enableHiding: boolean;
|
|
46
|
+
header: <TFeatures extends TableFeatures, TData extends RowData>(context: {
|
|
47
|
+
table: TableWith<TFeatures, TData, "rowSelectionFeature">;
|
|
48
|
+
}) => import("react").JSX.Element;
|
|
49
|
+
cell: <TFeatures extends TableFeatures, TData extends RowData>(context: {
|
|
50
|
+
row: RowWith<TFeatures, TData, "rowSelectionFeature">;
|
|
51
|
+
}) => import("react").JSX.Element;
|
|
52
|
+
};
|
|
53
|
+
//#endregion
|
|
54
|
+
//# sourceMappingURL=selection-column-def.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-column-def.d.ts","names":[],"sources":["../../../../src/components/data-table/selection/selection-column-def.tsx"],"mappings":";;;;;YAOY;;;;;EAKV;;;;;EAKA;;;;;;;;;;;;;;;;;;;;;qBAkCW,qBAAsB,UAAS;;;;;;;;;EAY/B,SAAA,kBAAkB,eAAe,cAAc,SAAO;IAC7D,OAAO,UAAU,WAAW;wBAC7B,IAAA;EAMM,OAAA,kBAAkB,eAAe,cAAc,SAAO;IAC3D,KAAK,QAAQ,WAAW;wBACzB,IAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DataTableRowCheckbox } from "./data-table-row-checkbox.js";
|
|
2
|
+
import { DataTableSelectAllCheckbox } from "./data-table-select-all-checkbox.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/data-table/selection/selection-column-def.tsx
|
|
5
|
+
/**
|
|
6
|
+
* A largura da coluna: o checkbox de 16px mais o padding da densidade mais folgada (12px de cada
|
|
7
|
+
* lado) e a borda. Menos que isso, a célula, que trunca, cortaria o checkbox nessa densidade.
|
|
8
|
+
*/
|
|
9
|
+
const SELECTION_COLUMN_SIZE = 44;
|
|
10
|
+
/**
|
|
11
|
+
* O checkbox no centro da célula e do header. Numa constante tipada: o literal direto no objeto
|
|
12
|
+
* devolvido viraria `string`, que o `align` da definição recusa.
|
|
13
|
+
*/
|
|
14
|
+
const SELECTION_COLUMN_ALIGN = "center";
|
|
15
|
+
/**
|
|
16
|
+
* A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o
|
|
17
|
+
* `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem
|
|
18
|
+
* esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes
|
|
19
|
+
* ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do
|
|
20
|
+
* registro (ver `DataTable.RowCheckbox`).
|
|
21
|
+
*
|
|
22
|
+
* Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e
|
|
23
|
+
* não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem
|
|
24
|
+
* `rowSelectionFeature` é recusada pelo header e pela célula daqui.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const columns = columnHelper.columns([
|
|
29
|
+
* columnHelper.display(DataTable.selectionColumnDef()),
|
|
30
|
+
* columnHelper.accessor('name', { header: 'Nome' }),
|
|
31
|
+
* ]);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
const selectionColumnDef = (options = {}) => {
|
|
35
|
+
const { id = "select", scope } = options;
|
|
36
|
+
return {
|
|
37
|
+
id,
|
|
38
|
+
size: SELECTION_COLUMN_SIZE,
|
|
39
|
+
minSize: SELECTION_COLUMN_SIZE,
|
|
40
|
+
maxSize: SELECTION_COLUMN_SIZE,
|
|
41
|
+
align: SELECTION_COLUMN_ALIGN,
|
|
42
|
+
enableResizing: false,
|
|
43
|
+
enableSorting: false,
|
|
44
|
+
enableHiding: false,
|
|
45
|
+
header: (context) => /* @__PURE__ */ jsx(DataTableSelectAllCheckbox, {
|
|
46
|
+
table: context.table,
|
|
47
|
+
scope
|
|
48
|
+
}),
|
|
49
|
+
cell: (context) => /* @__PURE__ */ jsx(DataTableRowCheckbox, { row: context.row })
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//#endregion
|
|
53
|
+
export { selectionColumnDef };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=selection-column-def.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection-column-def.js","names":[],"sources":["../../../../src/components/data-table/selection/selection-column-def.tsx"],"sourcesContent":["import type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { ColumnAlign } from '../../../features';\nimport type { RowWith, TableWith } from '../../../types';\nimport { DataTableRowCheckbox } from './data-table-row-checkbox';\nimport { DataTableSelectAllCheckbox } from './data-table-select-all-checkbox';\n\n/** As opções da coluna de seleção. */\nexport type SelectionColumnDefOptions = {\n /**\n * O id da coluna.\n * @default 'select'\n */\n id?: string;\n /**\n * O que o checkbox do header marca e mede. Ver `DataTable.SelectAllCheckbox`.\n * @default 'page' com `rowPaginationFeature`, 'all' sem\n */\n scope?: 'page' | 'all';\n};\n\n/**\n * A largura da coluna: o checkbox de 16px mais o padding da densidade mais folgada (12px de cada\n * lado) e a borda. Menos que isso, a célula, que trunca, cortaria o checkbox nessa densidade.\n */\nconst SELECTION_COLUMN_SIZE = 44;\n\n/**\n * O checkbox no centro da célula e do header. Numa constante tipada: o literal direto no objeto\n * devolvido viraria `string`, que o `align` da definição recusa.\n */\nconst SELECTION_COLUMN_ALIGN: ColumnAlign = 'center';\n\n/**\n * A definição da coluna de seleção: o `DataTable.SelectAllCheckbox` no header e o\n * `DataTable.RowCheckbox` em cada linha, com largura fixa, sem redimensionar, ordenar nem\n * esconder. Passe ao `columnHelper.display` do app. Com `columnAlignmentFeature`, os checkboxes\n * ficam centralizados. Com a paginação pela API, a tabela precisa do `getRowId` com o id do\n * registro (ver `DataTable.RowCheckbox`).\n *\n * Não recebe o `columnHelper`: numa função genérica, o tipo da definição de coluna fica adiado e\n * não aceita as opções das features. No `display` do app os tipos são concretos, e uma tabela sem\n * `rowSelectionFeature` é recusada pelo header e pela célula daqui.\n *\n * @example\n * ```ts\n * const columns = columnHelper.columns([\n * columnHelper.display(DataTable.selectionColumnDef()),\n * columnHelper.accessor('name', { header: 'Nome' }),\n * ]);\n * ```\n */\nexport const selectionColumnDef = (options: SelectionColumnDefOptions = {}) => {\n const { id = 'select', scope } = options;\n\n return {\n id,\n size: SELECTION_COLUMN_SIZE,\n minSize: SELECTION_COLUMN_SIZE,\n maxSize: SELECTION_COLUMN_SIZE,\n align: SELECTION_COLUMN_ALIGN,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n header: <TFeatures extends TableFeatures, TData extends RowData>(context: {\n table: TableWith<TFeatures, TData, 'rowSelectionFeature'>;\n }) => (\n <DataTableSelectAllCheckbox\n table={context.table}\n scope={scope}\n />\n ),\n cell: <TFeatures extends TableFeatures, TData extends RowData>(context: {\n row: RowWith<TFeatures, TData, 'rowSelectionFeature'>;\n }) => <DataTableRowCheckbox row={context.row} />,\n };\n};\n"],"mappings":";;;;;;;;AAwBA,MAAM,wBAAwB;;;;;AAM9B,MAAM,yBAAsC;;;;;;;;;;;;;;;;;;;;AAqB5C,MAAa,sBAAsB,UAAqC,CAAC,MAAM;CAC7E,MAAM,EAAE,KAAK,UAAU,UAAU;CAEjC,OAAO;EACL;EACA,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,gBAAgB;EAChB,eAAe;EACf,cAAc;EACd,SAAiE,YAG/D,oBAAC,4BAAD;GACE,OAAO,QAAQ;GACR;EACR,CAAA;EAEH,OAA+D,YAEzD,oBAAC,sBAAD,EAAsB,KAAK,QAAQ,IAAM,CAAA;CACjD;AACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { HeaderWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
|
+
import { useRender } from "@base-ui/react";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
6
|
+
//#region src/components/data-table/sorting/data-table-sort-indicator.d.ts
|
|
7
|
+
export type DataTableSortIndicatorProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'span'>, {
|
|
8
|
+
/** O header da coluna. Exige `rowSortingFeature`. */
|
|
9
|
+
header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna
|
|
13
|
+
* fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com
|
|
14
|
+
* `children`, eles substituem o ícone; a direção fica em `data-sorted`.
|
|
15
|
+
*
|
|
16
|
+
* Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.
|
|
17
|
+
*
|
|
18
|
+
* É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do
|
|
19
|
+
* `DataTable.HeaderCell`.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DataTableSortIndicator: {
|
|
22
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSortIndicatorProps<TFeatures, TData>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | null;
|
|
23
|
+
displayName: string;
|
|
24
|
+
};
|
|
25
|
+
//#endregion
|
|
26
|
+
//# sourceMappingURL=data-table-sort-indicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-sort-indicator.d.ts","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-indicator.tsx"],"mappings":";;;;;;YAaY,4BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WAAW,WAAW;;;;;;;;;;;;qBAcrB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,4BAA4B,WAAW,yBAAM,+CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Icon } from "@lucasbernardosn/react-ui/display/icon";
|
|
2
|
+
import { CaretDownIcon, CaretUpDownIcon, CaretUpIcon } from "@phosphor-icons/react";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { mergeProps, useRender } from "@base-ui/react";
|
|
5
|
+
import { useSelector } from "@tanstack/react-store";
|
|
6
|
+
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
7
|
+
//#region src/components/data-table/sorting/data-table-sort-indicator.tsx
|
|
8
|
+
/**
|
|
9
|
+
* O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna
|
|
10
|
+
* fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com
|
|
11
|
+
* `children`, eles substituem o ícone; a direção fica em `data-sorted`.
|
|
12
|
+
*
|
|
13
|
+
* Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.
|
|
14
|
+
*
|
|
15
|
+
* É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do
|
|
16
|
+
* `DataTable.HeaderCell`.
|
|
17
|
+
*/
|
|
18
|
+
const DataTableSortIndicator = (props) => {
|
|
19
|
+
const { header, render, className, children, ...rest } = props;
|
|
20
|
+
const { table } = header.column;
|
|
21
|
+
/**
|
|
22
|
+
* Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor.
|
|
23
|
+
*/
|
|
24
|
+
const sorted = useSelector(table.atoms.sorting, () => header.column.getIsSorted());
|
|
25
|
+
/**
|
|
26
|
+
* A posição na ordenação, de 1 em diante, só com mais de uma coluna ordenada: com uma só, o
|
|
27
|
+
* número não diz nada. Re-renderiza quando a posição desta coluna muda.
|
|
28
|
+
*/
|
|
29
|
+
const position = useSelector(table.atoms.sorting, (sorting) => {
|
|
30
|
+
const index = header.column.getSortIndex();
|
|
31
|
+
return index >= 0 && sorting.length > 1 ? index + 1 : void 0;
|
|
32
|
+
});
|
|
33
|
+
const icon = sorted === "asc" ? /* @__PURE__ */ jsx(CaretUpIcon, {}) : sorted === "desc" ? /* @__PURE__ */ jsx(CaretDownIcon, {}) : /* @__PURE__ */ jsx(CaretUpDownIcon, {});
|
|
34
|
+
const baseProps = {
|
|
35
|
+
"data-component": "DataTable.SortIndicator",
|
|
36
|
+
"data-sorted": sorted || void 0,
|
|
37
|
+
"aria-hidden": true,
|
|
38
|
+
className: mergeTwClassNames([
|
|
39
|
+
"inline-flex",
|
|
40
|
+
"shrink-0",
|
|
41
|
+
"items-center",
|
|
42
|
+
"gap-0.5",
|
|
43
|
+
"text-gray-8",
|
|
44
|
+
"data-sorted:text-gray-12",
|
|
45
|
+
"text-2xs",
|
|
46
|
+
"tabular-nums"
|
|
47
|
+
], className),
|
|
48
|
+
children: children === void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Icon, {
|
|
49
|
+
render: icon,
|
|
50
|
+
className: "size-3.5"
|
|
51
|
+
}), position] }) : children
|
|
52
|
+
};
|
|
53
|
+
const element = useRender({
|
|
54
|
+
render,
|
|
55
|
+
defaultTagName: "span",
|
|
56
|
+
props: mergeProps(baseProps, rest)
|
|
57
|
+
});
|
|
58
|
+
return header.column.getCanSort() ? element : null;
|
|
59
|
+
};
|
|
60
|
+
DataTableSortIndicator.displayName = "DataTable.SortIndicator";
|
|
61
|
+
//#endregion
|
|
62
|
+
export { DataTableSortIndicator };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=data-table-sort-indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-sort-indicator.js","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-indicator.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { Icon } from '@lucasbernardosn/react-ui/display/icon';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport {\n CaretDownIcon,\n CaretUpDownIcon,\n CaretUpIcon,\n} from '@phosphor-icons/react';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { HeaderWith } from '../../../types';\n\nexport type DataTableSortIndicatorProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'span'>,\n {\n /** O header da coluna. Exige `rowSortingFeature`. */\n header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;\n }\n>;\n\n/**\n * O ícone da direção da ordenação: seta para cima, para baixo, ou dupla e apagada com a coluna\n * fora da ordenação. Com mais de uma coluna ordenada, mostra também a posição desta. Com\n * `children`, eles substituem o ícone; a direção fica em `data-sorted`.\n *\n * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), não renderiza.\n *\n * É decorativo (`aria-hidden`): a direção chega ao leitor de tela pelo `aria-sort` do\n * `DataTable.HeaderCell`.\n */\nexport const DataTableSortIndicator = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortIndicatorProps<TFeatures, TData>,\n) => {\n const { header, render, className, children, ...rest } = props;\n\n const { table } = header.column;\n\n /**\n * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor.\n */\n const sorted = useSelector(table.atoms.sorting, () =>\n header.column.getIsSorted(),\n );\n\n /**\n * A posição na ordenação, de 1 em diante, só com mais de uma coluna ordenada: com uma só, o\n * número não diz nada. Re-renderiza quando a posição desta coluna muda.\n */\n const position = useSelector(table.atoms.sorting, (sorting) => {\n const index = header.column.getSortIndex();\n\n return index >= 0 && sorting.length > 1 ? index + 1 : undefined;\n });\n\n const icon =\n sorted === 'asc' ? (\n <CaretUpIcon />\n ) : sorted === 'desc' ? (\n <CaretDownIcon />\n ) : (\n <CaretUpDownIcon />\n );\n\n const baseProps = {\n 'data-component': 'DataTable.SortIndicator',\n 'data-sorted': sorted || undefined,\n 'aria-hidden': true,\n className: mergeTwClassNames(\n [\n 'inline-flex',\n 'shrink-0',\n 'items-center',\n 'gap-0.5',\n\n 'text-gray-8',\n 'data-sorted:text-gray-12',\n\n 'text-2xs',\n 'tabular-nums',\n ],\n className,\n ),\n children:\n children === undefined ? (\n <>\n <Icon\n render={icon}\n className=\"size-3.5\"\n />\n {position}\n </>\n ) : (\n children\n ),\n };\n\n const element = useRender({\n render,\n defaultTagName: 'span',\n props: mergeProps(baseProps, rest),\n });\n\n return header.column.getCanSort() ? element : null;\n};\n\nDataTableSortIndicator.displayName = 'DataTable.SortIndicator';\n"],"mappings":";;;;;;;;;;;;;;;;;AAkCA,MAAa,0BAIX,UACG;CACH,MAAM,EAAE,QAAQ,QAAQ,WAAW,UAAU,GAAG,SAAS;CAEzD,MAAM,EAAE,UAAU,OAAO;;;;CAKzB,MAAM,SAAS,YAAY,MAAM,MAAM,eACrC,OAAO,OAAO,YAAY,CAC5B;;;;;CAMA,MAAM,WAAW,YAAY,MAAM,MAAM,UAAU,YAAY;EAC7D,MAAM,QAAQ,OAAO,OAAO,aAAa;EAEzC,OAAO,SAAS,KAAK,QAAQ,SAAS,IAAI,QAAQ,IAAI,KAAA;CACxD,CAAC;CAED,MAAM,OACJ,WAAW,QACT,oBAAC,aAAD,CAAc,CAAA,IACZ,WAAW,SACb,oBAAC,eAAD,CAAgB,CAAA,IAEhB,oBAAC,iBAAD,CAAkB,CAAA;CAGtB,MAAM,YAAY;EAChB,kBAAkB;EAClB,eAAe,UAAU,KAAA;EACzB,eAAe;EACf,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;EACF,GACA,SACF;EACA,UACE,aAAa,KAAA,IACX,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD;GACE,QAAQ;GACR,WAAU;EACX,CAAA,GACA,QACD,EAAA,CAAA,IAEF;CAEN;CAEA,MAAM,UAAU,UAAU;EACxB;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;CAED,OAAO,OAAO,OAAO,WAAW,IAAI,UAAU;AAChD;AAEA,uBAAuB,cAAc"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { HeaderWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
4
|
+
import { useRender } from "@base-ui/react";
|
|
5
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
6
|
+
//#region src/components/data-table/sorting/data-table-sort-trigger.d.ts
|
|
7
|
+
export type DataTableSortTriggerProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<useRender.ComponentProps<'button'>, {
|
|
8
|
+
/** O header da coluna. Exige `rowSortingFeature`. */
|
|
9
|
+
header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo
|
|
13
|
+
* configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação
|
|
14
|
+
* local (`sortedRowModel`) e à da API (`manualSorting`).
|
|
15
|
+
*
|
|
16
|
+
* É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam
|
|
17
|
+
* com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o
|
|
18
|
+
* `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa
|
|
19
|
+
* coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto
|
|
20
|
+
* encosta na mesma borda dos valores.
|
|
21
|
+
*
|
|
22
|
+
* Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,
|
|
23
|
+
* marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da
|
|
24
|
+
* coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.
|
|
25
|
+
*/
|
|
26
|
+
export declare const DataTableSortTrigger: {
|
|
27
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableSortTriggerProps<TFeatures, TData>): import("react").JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
//# sourceMappingURL=data-table-sort-trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-sort-trigger.d.ts","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-trigger.tsx"],"mappings":";;;;;;YAQY,0BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,UAAU;;EAGR,QAAQ,WAAW,WAAW;;;;;;;;;;;;;;;;;qBAmBrB;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,0BAA0B,WAAW,yBAAM,IAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DataTableHeaderButton } from "../header/data-table-header-button.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { mergeProps } from "@base-ui/react";
|
|
4
|
+
import { useSelector } from "@tanstack/react-store";
|
|
5
|
+
import { mergeTwClassNames } from "@lucasbernardosn/react-ui/utils";
|
|
6
|
+
//#region src/components/data-table/sorting/data-table-sort-trigger.tsx
|
|
7
|
+
/**
|
|
8
|
+
* O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo
|
|
9
|
+
* configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação
|
|
10
|
+
* local (`sortedRowModel`) e à da API (`manualSorting`).
|
|
11
|
+
*
|
|
12
|
+
* É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam
|
|
13
|
+
* com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o
|
|
14
|
+
* `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa
|
|
15
|
+
* coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto
|
|
16
|
+
* encosta na mesma borda dos valores.
|
|
17
|
+
*
|
|
18
|
+
* Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,
|
|
19
|
+
* marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da
|
|
20
|
+
* coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.
|
|
21
|
+
*/
|
|
22
|
+
const DataTableSortTrigger = (props) => {
|
|
23
|
+
const { header, render, className, ...rest } = props;
|
|
24
|
+
/**
|
|
25
|
+
* Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor:
|
|
26
|
+
* redimensionar ou selecionar não chega aqui.
|
|
27
|
+
*/
|
|
28
|
+
const sorted = useSelector(header.column.table.atoms.sorting, () => header.column.getIsSorted());
|
|
29
|
+
const canSort = header.column.getCanSort();
|
|
30
|
+
const baseProps = {
|
|
31
|
+
"data-component": "DataTable.SortTrigger",
|
|
32
|
+
"data-sorted": sorted || void 0,
|
|
33
|
+
"data-disabled": canSort ? void 0 : "",
|
|
34
|
+
onClick: canSort ? header.column.getToggleSortingHandler() : void 0,
|
|
35
|
+
className: mergeTwClassNames(["in-data-[align=end]:flex-row-reverse", "data-sorted:text-gray-12"], className)
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */ jsx(DataTableHeaderButton, {
|
|
38
|
+
...mergeProps(baseProps, rest),
|
|
39
|
+
render: render ?? (canSort ? void 0 : /* @__PURE__ */ jsx("span", {}))
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
DataTableSortTrigger.displayName = "DataTable.SortTrigger";
|
|
43
|
+
//#endregion
|
|
44
|
+
export { DataTableSortTrigger };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=data-table-sort-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-sort-trigger.js","names":[],"sources":["../../../../src/components/data-table/sorting/data-table-sort-trigger.tsx"],"sourcesContent":["import { mergeProps, type useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '@lucasbernardosn/react-ui/utils';\nimport type { MergeOverride } from '@lucasbernardosn/utils';\nimport { useSelector } from '@tanstack/react-store';\nimport type { RowData, TableFeatures } from '@tanstack/react-table';\nimport type { HeaderWith } from '../../../types';\nimport { DataTableHeaderButton } from '../header/data-table-header-button';\n\nexport type DataTableSortTriggerProps<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = MergeOverride<\n useRender.ComponentProps<'button'>,\n {\n /** O header da coluna. Exige `rowSortingFeature`. */\n header: HeaderWith<TFeatures, TData, 'rowSortingFeature'>;\n }\n>;\n\n/**\n * O botão que alterna a ordenação da coluna: crescente, decrescente e sem ordenação, ou o ciclo\n * configurado nas opções da tabela. Com Shift, ordena por mais de uma coluna. Serve à ordenação\n * local (`sortedRowModel`) e à da API (`manualSorting`).\n *\n * É o `DataTable.HeaderButton` com a ação de ordenar: ocupa a célula do header, e as bordas ficam\n * com a área de agarre do `DataTable.ResizeHandle`. Os filhos são o que ele mostra, em geral o\n * `DataTable.HeaderContent` e o `DataTable.SortIndicator`. Marca a direção em `data-sorted`. Numa\n * coluna `align: 'end'`, a ordem dos filhos se inverte: o indicador vem antes do texto, e o texto\n * encosta na mesma borda dos valores.\n *\n * Numa coluna que não ordena (`enableSorting: false`, ou sem accessor), vira um `span` sem ação,\n * marcado com `data-disabled`: o layout não muda, e um controle dentro dele, como o checkbox da\n * coluna de seleção, continua clicável. Um botão desabilitado engoliria o clique.\n */\nexport const DataTableSortTrigger = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n props: DataTableSortTriggerProps<TFeatures, TData>,\n) => {\n const { header, render, className, ...rest } = props;\n\n /**\n * Só re-renderiza quando a direção desta coluna muda, e só o atom da ordenação roda o seletor:\n * redimensionar ou selecionar não chega aqui.\n */\n const sorted = useSelector(header.column.table.atoms.sorting, () =>\n header.column.getIsSorted(),\n );\n\n const canSort = header.column.getCanSort();\n\n const baseProps = {\n 'data-component': 'DataTable.SortTrigger',\n 'data-sorted': sorted || undefined,\n 'data-disabled': canSort ? undefined : '',\n onClick: canSort ? header.column.getToggleSortingHandler() : undefined,\n className: mergeTwClassNames(\n [\n // Invertida, a linha começa pelo fim: o texto fica na borda, e o indicador antes dele.\n 'in-data-[align=end]:flex-row-reverse',\n\n 'data-sorted:text-gray-12',\n ],\n className,\n ),\n };\n\n return (\n <DataTableHeaderButton\n {...mergeProps(baseProps, rest)}\n render={render ?? (canSort ? undefined : <span />)}\n />\n );\n};\n\nDataTableSortTrigger.displayName = 'DataTable.SortTrigger';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,wBAIX,UACG;CACH,MAAM,EAAE,QAAQ,QAAQ,WAAW,GAAG,SAAS;;;;;CAM/C,MAAM,SAAS,YAAY,OAAO,OAAO,MAAM,MAAM,eACnD,OAAO,OAAO,YAAY,CAC5B;CAEA,MAAM,UAAU,OAAO,OAAO,WAAW;CAEzC,MAAM,YAAY;EAChB,kBAAkB;EAClB,eAAe,UAAU,KAAA;EACzB,iBAAiB,UAAU,KAAA,IAAY;EACvC,SAAS,UAAU,OAAO,OAAO,wBAAwB,IAAI,KAAA;EAC7D,WAAW,kBACT,CAEE,wCAEA,0BACF,GACA,SACF;CACF;CAEA,OACE,oBAAC,uBAAD;EACE,GAAI,WAAW,WAAW,IAAI;EAC9B,QAAQ,WAAW,UAAU,KAAA,IAAY,oBAAC,QAAD,CAAO,CAAA;CACjD,CAAA;AAEL;AAEA,qBAAqB,cAAc"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { TableWith } from "../../../types/table-with.js";
|
|
2
|
+
import "../../../types/index.js";
|
|
3
|
+
import { RowDensity } from "../../../features/row-density/row-density-feature.types.js";
|
|
4
|
+
import "../../../features/index.js";
|
|
5
|
+
import { RowData, TableFeatures } from "@tanstack/react-table";
|
|
6
|
+
import { Select } from "@lucasbernardosn/react-ui/collections/select";
|
|
7
|
+
import { MergeOverride } from "@lucasbernardosn/utils";
|
|
8
|
+
//#region src/components/data-table/toolbar/data-table-density-select.d.ts
|
|
9
|
+
export type DataTableDensitySelectProps<TFeatures extends TableFeatures, TData extends RowData> = MergeOverride<Select.TriggerProps, {
|
|
10
|
+
/** A tabela. Exige `rowDensityFeature`. */
|
|
11
|
+
table: TableWith<TFeatures, TData, 'rowDensityFeature'>;
|
|
12
|
+
/**
|
|
13
|
+
* O nome de cada densidade.
|
|
14
|
+
* @default { compact: 'Compacta', standard: 'Padrão', comfortable: 'Confortável' }
|
|
15
|
+
*/
|
|
16
|
+
labels?: Partial<Record<RowDensity, string>>;
|
|
17
|
+
/**
|
|
18
|
+
* O tamanho do select.
|
|
19
|
+
* @default 'sm'
|
|
20
|
+
*/
|
|
21
|
+
size?: Select.RootProps<RowDensity>['size'];
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* O select da densidade das linhas, para a barra de ferramentas. Sem rótulo visível: o nome para
|
|
25
|
+
* o leitor de tela é "Densidade", trocável pelo `aria-label`.
|
|
26
|
+
*
|
|
27
|
+
* Renderiza o `Select` do `ui` por dentro; as props passam para o trigger.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <DataTable.DensitySelect table={table} />
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare const DataTableDensitySelect: {
|
|
35
|
+
<TFeatures extends TableFeatures, TData extends RowData>(props: DataTableDensitySelectProps<TFeatures, TData>): import("react").JSX.Element;
|
|
36
|
+
displayName: string;
|
|
37
|
+
};
|
|
38
|
+
//#endregion
|
|
39
|
+
//# sourceMappingURL=data-table-density-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-density-select.d.ts","names":[],"sources":["../../../../src/components/data-table/toolbar/data-table-density-select.tsx"],"mappings":";;;;;;;;YAOY,4BACV,kBAAkB,eAClB,cAAc,WACZ,cACF,OAAO;;EAGL,OAAO,UAAU,WAAW;;;;;EAK5B,SAAS,QAAQ,OAAO;;;;;EAKxB,OAAO,OAAO,UAAU;;;;;;;;;;;;;qBAuBf;GACX,kBAAkB,eAClB,cAAc,SAAO,OAEd,4BAA4B,WAAW,yBAAM,IAAA"}
|