@dxos/react-ui-table 0.3.8-next.f4e0086 → 0.3.9-main.03b62b6
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/dist/lib/browser/index.mjs +605 -532
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/Cell/Cell.d.ts +12 -0
- package/dist/types/src/components/Cell/Cell.d.ts.map +1 -0
- package/dist/types/src/components/{ComboboxCell.d.ts → Cell/CellCombobox.d.ts} +4 -4
- package/dist/types/src/components/Cell/CellCombobox.d.ts.map +1 -0
- package/dist/types/src/components/Cell/index.d.ts +2 -0
- package/dist/types/src/components/Cell/index.d.ts.map +1 -0
- package/dist/types/src/components/ColumnMenu.d.ts.map +1 -1
- package/dist/types/src/components/Table/Table.d.ts +3 -0
- package/dist/types/src/components/Table/Table.d.ts.map +1 -0
- package/dist/types/src/components/{Table.stories.d.ts → Table/Table.stories.d.ts} +4 -7
- package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -0
- package/dist/types/src/components/Table/TableBody.d.ts +11 -0
- package/dist/types/src/components/Table/TableBody.d.ts.map +1 -0
- package/dist/types/src/components/Table/TableContext.d.ts +14 -0
- package/dist/types/src/components/Table/TableContext.d.ts.map +1 -0
- package/dist/types/src/components/Table/TableFooter.d.ts +7 -0
- package/dist/types/src/components/Table/TableFooter.d.ts.map +1 -0
- package/dist/types/src/components/Table/TableHead.d.ts +8 -0
- package/dist/types/src/components/Table/TableHead.d.ts.map +1 -0
- package/dist/types/src/components/Table/index.d.ts +3 -0
- package/dist/types/src/components/Table/index.d.ts.map +1 -0
- package/dist/types/src/components/Table/props.d.ts +40 -0
- package/dist/types/src/components/Table/props.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/helpers.d.ts +21 -15
- package/dist/types/src/helpers.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/schema.d.ts +0 -1
- package/dist/types/src/schema.d.ts.map +1 -1
- package/dist/types/src/theme.d.ts +30 -33
- package/dist/types/src/theme.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +11 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +13 -10
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +12 -10
- package/src/components/Cell/Cell.tsx +43 -0
- package/src/components/{ComboboxCell.tsx → Cell/CellCombobox.tsx} +6 -6
- package/src/components/Cell/index.ts +5 -0
- package/src/components/ColumnMenu.tsx +16 -16
- package/src/components/{Table.stories.tsx → Table/Table.stories.tsx} +51 -51
- package/src/components/Table/Table.tsx +184 -0
- package/src/components/Table/TableBody.tsx +70 -0
- package/src/components/Table/TableContext.tsx +28 -0
- package/src/components/Table/TableFooter.tsx +42 -0
- package/src/components/Table/TableHead.tsx +79 -0
- package/src/components/Table/index.ts +6 -0
- package/src/components/Table/props.ts +58 -0
- package/src/components/index.ts +1 -1
- package/src/helpers.tsx +289 -219
- package/src/index.ts +1 -0
- package/src/schema.ts +0 -8
- package/src/theme.ts +102 -63
- package/src/translations.ts +11 -0
- package/src/types.ts +15 -10
- package/dist/types/src/components/ComboboxCell.d.ts.map +0 -1
- package/dist/types/src/components/Table.d.ts +0 -29
- package/dist/types/src/components/Table.d.ts.map +0 -1
- package/dist/types/src/components/Table.stories.d.ts.map +0 -1
- package/src/components/Table.tsx +0 -551
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { flexRender, type RowData } from '@tanstack/react-table';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
|
|
8
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
9
|
+
|
|
10
|
+
import { useTableContext } from './TableContext';
|
|
11
|
+
import { theadResizeRoot, theadResizeThumb, theadRoot, theadTh, theadTr } from '../../theme';
|
|
12
|
+
|
|
13
|
+
const TABLE_HEAD_NAME = 'TableHead';
|
|
14
|
+
|
|
15
|
+
type TableHeadProps = {};
|
|
16
|
+
|
|
17
|
+
const TableHead = <TData extends RowData>(_props: TableHeadProps) => {
|
|
18
|
+
const tableContext = useTableContext<TData>(TABLE_HEAD_NAME);
|
|
19
|
+
const headerGroups = tableContext.table.getHeaderGroups();
|
|
20
|
+
const state = tableContext.table.getState();
|
|
21
|
+
return (
|
|
22
|
+
<thead className={theadRoot(tableContext)}>
|
|
23
|
+
{headerGroups.map((headerGroup) => {
|
|
24
|
+
return (
|
|
25
|
+
// Group element to hover resize handles.
|
|
26
|
+
<tr key={headerGroup.id} className={theadTr(tableContext)}>
|
|
27
|
+
{/* TODO(burdon): Calc. width. */}
|
|
28
|
+
{tableContext.debug && (
|
|
29
|
+
<th className='font-mono' style={{ width: 32 }}>
|
|
30
|
+
#
|
|
31
|
+
</th>
|
|
32
|
+
)}
|
|
33
|
+
|
|
34
|
+
{headerGroup.headers.map((header) => {
|
|
35
|
+
const isResizing = header.column.getIsResizing();
|
|
36
|
+
return (
|
|
37
|
+
<th
|
|
38
|
+
key={header.id}
|
|
39
|
+
style={{
|
|
40
|
+
width: header.getSize(),
|
|
41
|
+
}}
|
|
42
|
+
className={theadTh(tableContext, header.column.columnDef.meta?.header?.classNames)}
|
|
43
|
+
>
|
|
44
|
+
{!header || header.isPlaceholder
|
|
45
|
+
? null
|
|
46
|
+
: flexRender(header.column.columnDef.header, header.getContext())}
|
|
47
|
+
|
|
48
|
+
{/*
|
|
49
|
+
* Resize handle.
|
|
50
|
+
* https://codesandbox.io/p/sandbox/github/tanstack/table/tree/main/examples/react/column-sizing
|
|
51
|
+
*/}
|
|
52
|
+
{header.column.columnDef.meta?.resizable && (
|
|
53
|
+
<div
|
|
54
|
+
className={theadResizeRoot(tableContext, isResizing && 'hidden')}
|
|
55
|
+
style={{
|
|
56
|
+
transform: `translateX(${isResizing ? state.columnSizingInfo.deltaOffset : 0}px)`,
|
|
57
|
+
}}
|
|
58
|
+
onMouseDown={header.getResizeHandler()}
|
|
59
|
+
onTouchStart={header.getResizeHandler()}
|
|
60
|
+
>
|
|
61
|
+
<div className={mx(theadResizeThumb(tableContext))} />
|
|
62
|
+
</div>
|
|
63
|
+
)}
|
|
64
|
+
</th>
|
|
65
|
+
);
|
|
66
|
+
})}
|
|
67
|
+
{tableContext.expand && <th />}
|
|
68
|
+
</tr>
|
|
69
|
+
);
|
|
70
|
+
})}
|
|
71
|
+
</thead>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
TableHead.displayName = TABLE_HEAD_NAME;
|
|
76
|
+
|
|
77
|
+
export { TableHead };
|
|
78
|
+
|
|
79
|
+
export type { TableHeadProps };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type RowData, type RowSelectionState, type Table, type VisibilityState } from '@tanstack/react-table';
|
|
6
|
+
|
|
7
|
+
import { type ClassNameValue } from '@dxos/react-ui-types';
|
|
8
|
+
|
|
9
|
+
import { type KeyValue, type TableColumnDef } from '../../types';
|
|
10
|
+
|
|
11
|
+
export type TableFlags = Partial<{
|
|
12
|
+
role: 'table' | 'grid' | 'treegrid';
|
|
13
|
+
grouping: string[];
|
|
14
|
+
header: boolean;
|
|
15
|
+
footer: boolean;
|
|
16
|
+
border: boolean;
|
|
17
|
+
fullWidth: boolean;
|
|
18
|
+
debug: boolean;
|
|
19
|
+
expand: boolean;
|
|
20
|
+
stickyHeader: boolean;
|
|
21
|
+
rowsSelectable: boolean | 'multi';
|
|
22
|
+
}>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* This is ‘current’ in the `aria-current` sense.
|
|
26
|
+
*/
|
|
27
|
+
export type TableCurrent<TData extends RowData> = Partial<{
|
|
28
|
+
// App state
|
|
29
|
+
currentDatum: TData;
|
|
30
|
+
onDatumClick: (datum: TData) => void;
|
|
31
|
+
}>;
|
|
32
|
+
|
|
33
|
+
export type TableProps<TData extends RowData> = TableFlags &
|
|
34
|
+
TableCurrent<TData> &
|
|
35
|
+
Partial<{
|
|
36
|
+
keyAccessor: KeyValue<TData>;
|
|
37
|
+
data: TData[];
|
|
38
|
+
columns: TableColumnDef<TData>[];
|
|
39
|
+
onColumnResize: (state: Record<string, number>) => void;
|
|
40
|
+
columnVisibility: VisibilityState;
|
|
41
|
+
// Controllable row selection
|
|
42
|
+
rowSelection: RowSelectionState;
|
|
43
|
+
defaultRowSelection: RowSelectionState;
|
|
44
|
+
onRowSelectionChange: (rowSelection: RowSelectionState) => void;
|
|
45
|
+
// Derived from row selection
|
|
46
|
+
onDataSelectionChange: (dataSelection: TData[]) => void;
|
|
47
|
+
// `table` element props
|
|
48
|
+
classNames: ClassNameValue;
|
|
49
|
+
}>;
|
|
50
|
+
|
|
51
|
+
export type { RowSelectionState, VisibilityState, TableColumnDef, KeyValue };
|
|
52
|
+
|
|
53
|
+
export type TableContextValue<TData extends RowData> = TableFlags &
|
|
54
|
+
TableCurrent<TData> &
|
|
55
|
+
Pick<TableProps<TData>, 'keyAccessor'> & {
|
|
56
|
+
table: Table<TData>;
|
|
57
|
+
isGrid: boolean;
|
|
58
|
+
};
|
package/src/components/index.ts
CHANGED