@dbcdk/react-components 0.0.33 → 0.0.34

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.
@@ -1,3 +1,3 @@
1
1
  import type { JSX } from 'react';
2
2
  import type { TableProps } from './Table.types';
3
- export declare function Table<T extends Record<string, any>>({ data, dataKey, columns, selectedRows, selectionMode, allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant, size, viewMode, striped, fillViewport, gridTemplateColumns, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement, showFirstLast, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }: TableProps<T>): JSX.Element;
3
+ export declare function Table<T extends Record<string, any>>({ data, dataKey, columns, selectedRows, selectionMode, allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant, size, viewMode, striped, fillViewport, gridTemplateColumns, tableRootRef, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement, showFirstLast, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }: TableProps<T>): JSX.Element;
@@ -9,7 +9,7 @@ import { TableLoadingBody } from './components/TableLoadingBody';
9
9
  import { cx } from './table.classes';
10
10
  import styles from './Table.module.css';
11
11
  import { buildDefaultGridTemplate, getVisibleColumns } from './table.utils';
12
- export function Table({ data, dataKey, columns, selectedRows, selectionMode = 'single', allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant = 'primary', size = 'md', viewMode, striped, fillViewport = false, gridTemplateColumns, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement = 'bottom', showFirstLast = false, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }) {
12
+ export function Table({ data, dataKey, columns, selectedRows, selectionMode = 'single', allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant = 'primary', size = 'md', viewMode, striped, fillViewport = false, gridTemplateColumns, tableRootRef, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement = 'bottom', showFirstLast = false, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }) {
13
13
  const visibleColumns = useMemo(() => getVisibleColumns(columns), [columns]);
14
14
  const selectionInputName = useId();
15
15
  const hasSelection = Boolean(selectedRows && onRowSelect);
@@ -26,7 +26,7 @@ export function Table({ data, dataKey, columns, selectedRows, selectionMode = 's
26
26
  const bodyContent = loading && !data.length ? (_jsx(TableLoadingBody, { rows: take !== null && take !== void 0 ? take : 5, columns: visibleColumns, hasSelection: hasSelection, gridStyle: gridStyle })) : (_jsx(TableBody, { data: data, dataKey: dataKey, columns: visibleColumns, gridStyle: gridStyle, striped: striped, selectedRows: selectedRows, hasSelection: hasSelection, selectionMode: selectionMode, selectionInputName: selectionInputName, viewMode: viewMode, getRowSeverity: getRowSeverity, onRowClick: onRowClick, onRowMouseEnter: onRowMouseEnter, onRowSelect: onRowSelect }));
27
27
  const paginationEl = onPageChange && data.length > 0 ? (_jsx("div", { className: cx(styles.paginationSlot, paginationPlacement === 'top' && styles.paginationSlotTop), children: _jsx(Pagination, { itemsCount: totalItemsCount, take: take, skip: skip, onPageChange: handlePageChange, showFirstLast: showFirstLast, pageSizeOptions: pageSizeOptions }) })) : null;
28
28
  const tableClassName = cx(styles.tableRoot, styles[variant], styles[size], getRowSeverity && styles.severityTable);
29
- const tableShell = (_jsx("div", { ...rest, className: tableClassName, role: "table", "aria-rowcount": data.length, children: _jsxs("div", { className: styles.tableContent, children: [_jsx("div", { className: styles.header, role: "rowgroup", children: _jsx(TableHeader, { columns: visibleColumns, gridStyle: gridStyle, hasSelection: hasSelection, selectionMode: selectionMode, allRowsSelected: allRowsSelected, onSelectAllRows: onSelectAllRows, sortById: sortById, sortDirection: sortDirection, onSortChange: onSortChange, headerExtras: headerExtras }) }), _jsx("div", { className: styles.bodyScroll, children: !data.length && !loading ? (_jsx("div", { className: styles.emptyStateSlot, children: _jsx(TableEmptyState, { config: emptyConfig }) })) : (bodyContent) })] }) }));
29
+ const tableShell = (_jsx("div", { ...rest, ref: tableRootRef, className: tableClassName, role: "table", "aria-rowcount": data.length, children: _jsxs("div", { className: styles.tableContent, children: [_jsx("div", { className: styles.header, role: "rowgroup", children: _jsx(TableHeader, { columns: visibleColumns, gridStyle: gridStyle, hasSelection: hasSelection, selectionMode: selectionMode, allRowsSelected: allRowsSelected, onSelectAllRows: onSelectAllRows, sortById: sortById, sortDirection: sortDirection, onSortChange: onSortChange, headerExtras: headerExtras }) }), _jsx("div", { className: styles.bodyScroll, children: !data.length && !loading ? (_jsx("div", { className: styles.emptyStateSlot, children: _jsx(TableEmptyState, { config: emptyConfig }) })) : (bodyContent) })] }) }));
30
30
  if (fillViewport) {
31
31
  return (_jsxs("div", { className: styles.fillViewportRoot, style: {
32
32
  flexDirection: paginationPlacement === 'top' ? 'column-reverse' : 'column',
@@ -193,7 +193,7 @@
193
193
  align-items: flex-start;
194
194
  justify-content: flex-start;
195
195
  min-width: 0;
196
- padding-inline: var(--spacing-sm);
196
+ padding-inline: calc(var(--spacing-xxs) + 2px) var(--spacing-sm);
197
197
  padding-block: 6px;
198
198
  cursor: pointer;
199
199
  }
@@ -403,17 +403,17 @@
403
403
  }
404
404
 
405
405
  .severityTable {
406
- --row-rail-width: 4px;
406
+ --row-rail-width: 2px;
407
407
  --row-rail-gap: 10px;
408
408
  --row-rail-offset: calc(var(--row-rail-width) + var(--row-rail-gap));
409
409
  --row-rail-inset-block: 1px;
410
- --row-rail-radius: 0 2px 2px 0;
410
+ --row-rail-radius: 0;
411
411
  --selection-rail-compensation: calc(var(--row-rail-offset) / 2);
412
412
  }
413
413
 
414
414
  .severityTable .headerCell.selectionCell,
415
415
  .severityTable .row .selectionCell {
416
- padding-inline-start: 0 !important;
416
+ padding-inline-start: calc(var(--spacing-xxs) + 2px) !important;
417
417
  }
418
418
 
419
419
  .severityTable .headerCell.selectionCell .selectionHitArea,
@@ -472,8 +472,8 @@
472
472
  }
473
473
 
474
474
  .severityTable .row.severity:focus-within::before {
475
- inline-size: 6px;
476
475
  opacity: 1;
476
+ z-index: 5;
477
477
  }
478
478
 
479
479
  .striped .severityTable .row.severity:nth-child(even):not(.selectedRow):not(:hover) {
@@ -1,4 +1,4 @@
1
- import type { HTMLAttributes, ReactNode } from 'react';
1
+ import type { HTMLAttributes, ReactNode, Ref } from 'react';
2
2
  import type { PageChangeEvent } from '../../components/pagination/Pagination';
3
3
  import type { Severity } from '../../constants/severity.types';
4
4
  import type { ViewMode } from '../../hooks/useTableSettings';
@@ -41,6 +41,7 @@ export type TableProps<T extends Record<string, any>> = Omit<HTMLAttributes<HTML
41
41
  striped?: boolean;
42
42
  fillViewport?: boolean;
43
43
  gridTemplateColumns?: string;
44
+ tableRootRef?: Ref<HTMLDivElement>;
44
45
  toolbar?: ReactNode;
45
46
  headerExtras?: (args: HeaderExtrasArgs<T>) => ReactNode;
46
47
  take?: number;
@@ -4,6 +4,7 @@ import { useReactTable, getCoreRowModel, getSortedRowModel, getFilteredRowModel,
4
4
  import * as React from 'react';
5
5
  import ColumnResizer from './components/column-resizer/ColumnResizer';
6
6
  import { Table } from './Table';
7
+ import { DEFAULT_COLUMN_PX } from './table.utils';
7
8
  import { buildColumnVisibilityFromVisibleIds, mapDefsToColumnItems, sortingEqual, getSortPropsFromSorting, columnItemsToIdSet, buildDistributedGridTemplateColumns, } from './tanstackTable.utils';
8
9
  export function TanstackTable(props) {
9
10
  const { data, dataKey, columns, sorting: controlledSorting, onSortingChange, optimisticSortingUi = true, visibleColumnIds, manualSorting, selectedRows, onRowSelect, ...tableProps } = props;
@@ -47,7 +48,7 @@ export function TanstackTable(props) {
47
48
  defaultColumn: {
48
49
  enableResizing: true,
49
50
  minSize: 80,
50
- size: 180,
51
+ size: DEFAULT_COLUMN_PX,
51
52
  },
52
53
  });
53
54
  const columnItems = React.useMemo(() => mapDefsToColumnItems(columns, columnVisibility), [columns, columnVisibility]);
@@ -101,5 +102,5 @@ export function TanstackTable(props) {
101
102
  availableWidth,
102
103
  });
103
104
  }, [table, allowedIds, hasSelection, columnSizing, availableWidth]);
104
- return (_jsx("div", { ref: containerRef, style: { width: '100%', minWidth: 0, overflow: 'auto' }, children: _jsx(Table, { ...tableProps, onSortChange: handleSortChange, dataKey: dataKey, data: visibleData, columns: columnItems, sortById: sortById, sortDirection: sortDirection, gridTemplateColumns: gridTemplateColumns, headerExtras: headerExtras, selectedRows: selectedRows, onRowSelect: onRowSelect }) }));
105
+ return (_jsx(Table, { ...tableProps, tableRootRef: containerRef, onSortChange: handleSortChange, dataKey: dataKey, data: visibleData, columns: columnItems, sortById: sortById, sortDirection: sortDirection, gridTemplateColumns: gridTemplateColumns, headerExtras: headerExtras, selectedRows: selectedRows, onRowSelect: onRowSelect }));
105
106
  }
@@ -1,6 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ColumnItem } from './Table.types';
3
3
  export declare const SELECTION_COLUMN_PX: 40;
4
+ export declare const DEFAULT_COLUMN_PX: 150;
4
5
  export type SortDirection = 'asc' | 'desc' | null;
5
6
  export declare function getVisibleColumns<T>(columns: Array<ColumnItem<T>>): Array<ColumnItem<T>>;
6
7
  export declare function getHeaderLabel(header: string | (() => ReactNode)): ReactNode;
@@ -1,4 +1,5 @@
1
1
  export const SELECTION_COLUMN_PX = 40;
2
+ export const DEFAULT_COLUMN_PX = 150;
2
3
  export function getVisibleColumns(columns) {
3
4
  return columns.filter(column => !column.hidden);
4
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbcdk/react-components",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
4
4
  "description": "Reusable React components for DBC projects",
5
5
  "license": "ISC",
6
6
  "author": "",