@deque/cauldron-react 6.11.0 → 6.12.0-canary.98683670
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/lib/components/Table/Table.d.ts +18 -6
- package/lib/components/Table/TableBody.d.ts +4 -5
- package/lib/components/Table/TableCell.d.ts +6 -5
- package/lib/components/Table/TableContext.d.ts +15 -0
- package/lib/components/Table/TableFooter.d.ts +4 -5
- package/lib/components/Table/TableHead.d.ts +4 -5
- package/lib/components/Table/TableHeader.d.ts +5 -6
- package/lib/components/Table/useTableGridStyles.d.ts +10 -0
- package/lib/index.js +128 -22
- package/package.json +1 -1
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import React
|
|
2
|
-
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type Column = {
|
|
3
|
+
align: ColumnAlignment;
|
|
4
|
+
width?: ColumnWidth;
|
|
5
|
+
};
|
|
6
|
+
export type ColumnAlignment = 'start' | 'center' | 'end';
|
|
7
|
+
export type ColumnWidth = 'auto' | 'min-content' | 'max-content' | `${number}` | `${number}%` | `${number}fr`;
|
|
8
|
+
export type RowAlignment = 'start' | 'center';
|
|
9
|
+
type TableBaseProps = {
|
|
10
|
+
layout: never;
|
|
11
|
+
columns: never;
|
|
12
|
+
variant?: 'border';
|
|
13
|
+
};
|
|
14
|
+
type TableGridProps = {
|
|
15
|
+
layout: 'grid';
|
|
16
|
+
columns?: Array<Column> | number;
|
|
3
17
|
variant?: 'border';
|
|
4
|
-
}
|
|
5
|
-
declare const Table: {
|
|
6
|
-
({ children, className, variant, ...other }: TableProps): React.JSX.Element;
|
|
7
|
-
displayName: string;
|
|
8
18
|
};
|
|
19
|
+
type TableProps = (TableBaseProps | Partial<TableGridProps>) & React.TableHTMLAttributes<HTMLTableElement>;
|
|
20
|
+
declare const Table: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>>;
|
|
9
21
|
export default Table;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
declare const TableBody: {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const TableBody: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
3
|
+
className?: string | undefined;
|
|
4
|
+
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
6
5
|
export default TableBody;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
1
|
+
import type { ColumnAlignment } from './Table';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
interface TableCellProps extends Omit<React.TdHTMLAttributes<HTMLTableDataCellElement>, 'align'> {
|
|
4
|
+
align?: ColumnAlignment;
|
|
5
|
+
}
|
|
6
|
+
declare const TableCell: React.ForwardRefExoticComponent<TableCellProps & React.RefAttributes<HTMLTableCellElement>>;
|
|
6
7
|
export default TableCell;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Column } from './Table';
|
|
3
|
+
type TableContext = {
|
|
4
|
+
layout: 'table' | 'grid';
|
|
5
|
+
columns: Array<Column>;
|
|
6
|
+
};
|
|
7
|
+
type TableProvider = {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
layout: 'table' | 'grid';
|
|
10
|
+
columns: Array<Column>;
|
|
11
|
+
};
|
|
12
|
+
declare const TableContext: React.Context<TableContext>;
|
|
13
|
+
declare function TableProvider({ children, layout, columns }: TableProvider): JSX.Element;
|
|
14
|
+
declare function useTable(): TableContext;
|
|
15
|
+
export { TableProvider, useTable };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
declare const TableFooter: {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const TableFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
3
|
+
className?: string | undefined;
|
|
4
|
+
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
6
5
|
export default TableFooter;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
declare const TableHead: {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const TableHead: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableSectionElement> & {
|
|
3
|
+
className?: string | undefined;
|
|
4
|
+
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
6
5
|
export default TableHead;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { ColumnAlignment } from './Table';
|
|
2
|
+
import React from 'react';
|
|
2
3
|
type SortDirection = 'ascending' | 'descending' | 'none';
|
|
3
|
-
interface TableHeaderProps extends ThHTMLAttributes<
|
|
4
|
+
interface TableHeaderProps extends Omit<React.ThHTMLAttributes<HTMLTableHeaderCellElement>, 'align'> {
|
|
4
5
|
sortDirection?: SortDirection;
|
|
5
6
|
onSort?: () => void;
|
|
6
7
|
sortAscendingAnnouncement?: string;
|
|
7
8
|
sortDescendingAnnouncement?: string;
|
|
9
|
+
align?: ColumnAlignment;
|
|
8
10
|
}
|
|
9
|
-
declare const TableHeader:
|
|
10
|
-
({ children, sortDirection, onSort, className, sortAscendingAnnouncement, sortDescendingAnnouncement, ...other }: TableHeaderProps): React.JSX.Element;
|
|
11
|
-
displayName: string;
|
|
12
|
-
};
|
|
11
|
+
declare const TableHeader: React.ForwardRefExoticComponent<TableHeaderProps & React.RefAttributes<HTMLTableHeaderCellElement>>;
|
|
13
12
|
export default TableHeader;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { useTable } from './TableContext';
|
|
2
|
+
import type { Column, ColumnAlignment } from './Table';
|
|
3
|
+
interface useTableGridStylesParameters<E extends HTMLTableCellElement = HTMLTableCellElement> {
|
|
4
|
+
elementRef: React.RefObject<E | null>;
|
|
5
|
+
align?: ColumnAlignment;
|
|
6
|
+
layout: ReturnType<typeof useTable>['layout'];
|
|
7
|
+
columns: Array<Column>;
|
|
8
|
+
}
|
|
9
|
+
export default function useTableGridStyles<E extends HTMLTableCellElement>({ elementRef, align, layout, columns }: useTableGridStylesParameters<E>): React.CSSProperties;
|
|
10
|
+
export {};
|
package/lib/index.js
CHANGED
|
@@ -2783,32 +2783,138 @@ var TagButton = React__default["default"].forwardRef(function (_a, ref) {
|
|
|
2783
2783
|
});
|
|
2784
2784
|
TagButton.displayName = 'TagButton';
|
|
2785
2785
|
|
|
2786
|
-
var
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
};
|
|
2786
|
+
var TableContext = React.createContext({
|
|
2787
|
+
layout: 'table',
|
|
2788
|
+
columns: []
|
|
2789
|
+
});
|
|
2790
|
+
function TableProvider(_a) {
|
|
2791
|
+
var children = _a.children, layout = _a.layout, columns = _a.columns;
|
|
2792
|
+
var Provider = TableContext.Provider;
|
|
2793
|
+
var contextValue = React.useMemo(function () { return ({
|
|
2794
|
+
layout: layout,
|
|
2795
|
+
columns: columns
|
|
2796
|
+
}); }, [layout, columns]);
|
|
2797
|
+
return React__default["default"].createElement(Provider, { value: contextValue }, children);
|
|
2798
|
+
}
|
|
2799
|
+
function useTable() {
|
|
2800
|
+
return React.useContext(TableContext);
|
|
2801
|
+
}
|
|
2802
|
+
|
|
2803
|
+
var Table = React__default["default"].forwardRef(function (_a, ref) {
|
|
2804
|
+
var children = _a.children, className = _a.className, variant = _a.variant, layout = _a.layout, _b = _a.columns, columnsProp = _b === void 0 ? [] : _b, style = _a.style, other = tslib.__rest(_a, ["children", "className", "variant", "layout", "columns", "style"]);
|
|
2805
|
+
var isGridLayout = layout === 'grid';
|
|
2806
|
+
var columns = React.useMemo(function () {
|
|
2807
|
+
if (typeof columnsProp === 'number') {
|
|
2808
|
+
return columnsProp > 0
|
|
2809
|
+
? Array(columnsProp).fill({ align: 'start' })
|
|
2810
|
+
: [{ align: 'start' }];
|
|
2811
|
+
}
|
|
2812
|
+
return columnsProp;
|
|
2813
|
+
}, [columnsProp]);
|
|
2814
|
+
var styleTemplateColumns = React.useMemo(function () {
|
|
2815
|
+
if (layout !== 'grid') {
|
|
2816
|
+
return;
|
|
2817
|
+
}
|
|
2818
|
+
if (!columns) {
|
|
2819
|
+
return 'auto';
|
|
2820
|
+
}
|
|
2821
|
+
return columns
|
|
2822
|
+
.map(function (_a) {
|
|
2823
|
+
var width = _a.width;
|
|
2824
|
+
return width || 'auto';
|
|
2825
|
+
})
|
|
2826
|
+
.join(' ');
|
|
2827
|
+
}, [layout, columns]);
|
|
2828
|
+
var tableGridStyles = isGridLayout
|
|
2829
|
+
? {
|
|
2830
|
+
'--table-grid-template-columns': styleTemplateColumns
|
|
2831
|
+
}
|
|
2832
|
+
: {};
|
|
2833
|
+
return (React__default["default"].createElement("table", tslib.__assign({ ref: ref, style: tslib.__assign(tslib.__assign({}, tableGridStyles), style), className: classNames__default["default"]('Table', className, {
|
|
2834
|
+
'Table--border': variant === 'border',
|
|
2835
|
+
TableGrid: isGridLayout
|
|
2836
|
+
}) }, other),
|
|
2837
|
+
React__default["default"].createElement(TableProvider, { layout: isGridLayout ? 'grid' : 'table', columns: columns }, children)));
|
|
2838
|
+
});
|
|
2790
2839
|
Table.displayName = 'Table';
|
|
2791
2840
|
|
|
2792
|
-
var TableBody = function (_a) {
|
|
2841
|
+
var TableBody = React.forwardRef(function (_a, ref) {
|
|
2793
2842
|
var children = _a.children, className = _a.className, other = tslib.__rest(_a, ["children", "className"]);
|
|
2794
|
-
return (React__default["default"].createElement("tbody", tslib.__assign({ className: classNames__default["default"]('TableBody', className) }, other), children));
|
|
2795
|
-
};
|
|
2843
|
+
return (React__default["default"].createElement("tbody", tslib.__assign({ ref: ref, className: classNames__default["default"]('TableBody', className) }, other), children));
|
|
2844
|
+
});
|
|
2796
2845
|
TableBody.displayName = 'TableBody';
|
|
2797
2846
|
|
|
2798
|
-
|
|
2799
|
-
var
|
|
2800
|
-
|
|
2801
|
-
|
|
2847
|
+
function useTableGridStyles(_a) {
|
|
2848
|
+
var elementRef = _a.elementRef, align = _a.align, layout = _a.layout, columns = _a.columns;
|
|
2849
|
+
var isGridLayout = layout === 'grid';
|
|
2850
|
+
var _b = tslib.__read(React.useState(align || 'start'), 2), columnAlignment = _b[0], setColumnAlignment = _b[1];
|
|
2851
|
+
var _c = tslib.__read(React.useState(1), 2), gridColumnSpan = _c[0], setGridColumnSpan = _c[1];
|
|
2852
|
+
var _d = tslib.__read(React.useState(1), 2), gridRowSpan = _d[0], setGridRowSpan = _d[1];
|
|
2853
|
+
React.useEffect(function () {
|
|
2854
|
+
var _a;
|
|
2855
|
+
if (!isGridLayout) {
|
|
2856
|
+
return;
|
|
2857
|
+
}
|
|
2858
|
+
var element = elementRef.current;
|
|
2859
|
+
var column = typeof columns !== 'number' && columns[(_a = element === null || element === void 0 ? void 0 : element.cellIndex) !== null && _a !== void 0 ? _a : -1];
|
|
2860
|
+
if (!column) {
|
|
2861
|
+
setColumnAlignment(align || 'start');
|
|
2862
|
+
}
|
|
2863
|
+
else {
|
|
2864
|
+
setColumnAlignment(column.align);
|
|
2865
|
+
}
|
|
2866
|
+
if (element === null || element === void 0 ? void 0 : element.colSpan) {
|
|
2867
|
+
setGridColumnSpan(element.colSpan);
|
|
2868
|
+
}
|
|
2869
|
+
else {
|
|
2870
|
+
setGridColumnSpan(1);
|
|
2871
|
+
}
|
|
2872
|
+
if (element === null || element === void 0 ? void 0 : element.rowSpan) {
|
|
2873
|
+
setGridRowSpan(element.rowSpan);
|
|
2874
|
+
}
|
|
2875
|
+
else {
|
|
2876
|
+
setGridRowSpan(1);
|
|
2877
|
+
}
|
|
2878
|
+
}, [isGridLayout, columns, align]);
|
|
2879
|
+
return isGridLayout
|
|
2880
|
+
? {
|
|
2881
|
+
textAlign: columnAlignment,
|
|
2882
|
+
gridColumn: gridColumnSpan > 1 ? "span ".concat(gridColumnSpan) : undefined,
|
|
2883
|
+
gridRow: gridRowSpan > 1 ? "span ".concat(gridRowSpan) : undefined
|
|
2884
|
+
}
|
|
2885
|
+
: {};
|
|
2886
|
+
}
|
|
2887
|
+
|
|
2888
|
+
var TableCell = React.forwardRef(function (_a, ref) {
|
|
2889
|
+
var children = _a.children, className = _a.className, align = _a.align, style = _a.style, other = tslib.__rest(_a, ["children", "className", "align", "style"]);
|
|
2890
|
+
var tableCellRef = useSharedRef(ref);
|
|
2891
|
+
var _b = useTable(), layout = _b.layout, columns = _b.columns;
|
|
2892
|
+
var tableGridStyles = useTableGridStyles({
|
|
2893
|
+
elementRef: tableCellRef,
|
|
2894
|
+
align: align,
|
|
2895
|
+
columns: columns,
|
|
2896
|
+
layout: layout
|
|
2897
|
+
});
|
|
2898
|
+
return (React__default["default"].createElement("td", tslib.__assign({ ref: tableCellRef, style: tslib.__assign(tslib.__assign({}, tableGridStyles), style), className: classNames__default["default"]('TableCell', className) }, other), children));
|
|
2899
|
+
});
|
|
2802
2900
|
TableCell.displayName = 'TableCell';
|
|
2803
2901
|
|
|
2804
|
-
var TableHead = function (_a) {
|
|
2902
|
+
var TableHead = React.forwardRef(function (_a, ref) {
|
|
2805
2903
|
var children = _a.children, className = _a.className, other = tslib.__rest(_a, ["children", "className"]);
|
|
2806
|
-
return (React__default["default"].createElement("thead", tslib.__assign({ className: classNames__default["default"]('TableHead', className) }, other), children));
|
|
2807
|
-
};
|
|
2904
|
+
return (React__default["default"].createElement("thead", tslib.__assign({ ref: ref, className: classNames__default["default"]('TableHead', className) }, other), children));
|
|
2905
|
+
});
|
|
2808
2906
|
TableHead.displayName = 'TableHead';
|
|
2809
2907
|
|
|
2810
|
-
var TableHeader = function (_a) {
|
|
2811
|
-
var children = _a.children, sortDirection = _a.sortDirection, onSort = _a.onSort, className = _a.className, _b = _a.sortAscendingAnnouncement, sortAscendingAnnouncement = _b === void 0 ? 'sorted ascending' : _b, _c = _a.sortDescendingAnnouncement, sortDescendingAnnouncement = _c === void 0 ? 'sorted descending' : _c, other = tslib.__rest(_a, ["children", "sortDirection", "onSort", "className", "sortAscendingAnnouncement", "sortDescendingAnnouncement"]);
|
|
2908
|
+
var TableHeader = React.forwardRef(function (_a, ref) {
|
|
2909
|
+
var children = _a.children, sortDirection = _a.sortDirection, onSort = _a.onSort, className = _a.className, _b = _a.sortAscendingAnnouncement, sortAscendingAnnouncement = _b === void 0 ? 'sorted ascending' : _b, _c = _a.sortDescendingAnnouncement, sortDescendingAnnouncement = _c === void 0 ? 'sorted descending' : _c, align = _a.align, style = _a.style, other = tslib.__rest(_a, ["children", "sortDirection", "onSort", "className", "sortAscendingAnnouncement", "sortDescendingAnnouncement", "align", "style"]);
|
|
2910
|
+
var tableHeaderRef = useSharedRef(ref);
|
|
2911
|
+
var _d = useTable(), layout = _d.layout, columns = _d.columns;
|
|
2912
|
+
var tableGridStyles = useTableGridStyles({
|
|
2913
|
+
elementRef: tableHeaderRef,
|
|
2914
|
+
align: align,
|
|
2915
|
+
columns: columns,
|
|
2916
|
+
layout: layout
|
|
2917
|
+
});
|
|
2812
2918
|
// When the sort direction changes, we want to announce the change in a live region
|
|
2813
2919
|
// because changes to the sort value is not widely supported yet
|
|
2814
2920
|
// see: https://a11ysupport.io/tech/aria/aria-sort_attribute
|
|
@@ -2817,15 +2923,15 @@ var TableHeader = function (_a) {
|
|
|
2817
2923
|
: sortDirection === 'descending'
|
|
2818
2924
|
? sortDescendingAnnouncement
|
|
2819
2925
|
: '';
|
|
2820
|
-
return (React__default["default"].createElement("th", tslib.__assign({ "aria-sort": sortDirection, className: classNames__default["default"]('TableHeader', className, {
|
|
2926
|
+
return (React__default["default"].createElement("th", tslib.__assign({ ref: tableHeaderRef, "aria-sort": sortDirection, className: classNames__default["default"]('TableHeader', className, {
|
|
2821
2927
|
'TableHeader--sort-ascending': sortDirection === 'ascending',
|
|
2822
2928
|
'TableHeader--sort-descending': sortDirection === 'descending'
|
|
2823
|
-
}) }, other), !!onSort && !!sortDirection ? (React__default["default"].createElement("button", { onClick: onSort, className: "TableHeader__sort-button", type: "button" },
|
|
2929
|
+
}), style: tslib.__assign(tslib.__assign({}, tableGridStyles), style) }, other), !!onSort && !!sortDirection ? (React__default["default"].createElement("button", { onClick: onSort, className: "TableHeader__sort-button", type: "button" },
|
|
2824
2930
|
children,
|
|
2825
2931
|
React__default["default"].createElement("span", { "aria-hidden": "true" }, sortDirection === 'none' ? (React__default["default"].createElement(Icon, { type: "sort-triangle" })) : sortDirection === 'ascending' ? (React__default["default"].createElement(Icon, { type: "table-sort-ascending" })) : (React__default["default"].createElement(Icon, { type: "table-sort-descending" }))),
|
|
2826
2932
|
React__default["default"].createElement(Offscreen, null,
|
|
2827
2933
|
React__default["default"].createElement("span", { role: "status", "aria-live": "polite" }, announcement)))) : (children)));
|
|
2828
|
-
};
|
|
2934
|
+
});
|
|
2829
2935
|
TableHeader.displayName = 'TableHeader';
|
|
2830
2936
|
|
|
2831
2937
|
var TableRow = function (_a) {
|
|
@@ -2834,10 +2940,10 @@ var TableRow = function (_a) {
|
|
|
2834
2940
|
};
|
|
2835
2941
|
TableRow.displayName = 'TableRow';
|
|
2836
2942
|
|
|
2837
|
-
var TableFooter = function (_a) {
|
|
2943
|
+
var TableFooter = React.forwardRef(function (_a, ref) {
|
|
2838
2944
|
var children = _a.children, className = _a.className, other = tslib.__rest(_a, ["children", "className"]);
|
|
2839
|
-
return (React__default["default"].createElement("tfoot", tslib.__assign({ className: classNames__default["default"]('TableFooter', className) }, other), children));
|
|
2840
|
-
};
|
|
2945
|
+
return (React__default["default"].createElement("tfoot", tslib.__assign({ ref: ref, className: classNames__default["default"]('TableFooter', className) }, other), children));
|
|
2946
|
+
});
|
|
2841
2947
|
TableFooter.displayName = 'TableFooter';
|
|
2842
2948
|
|
|
2843
2949
|
var Tab = React__default["default"].forwardRef(function (_a, ref) {
|
package/package.json
CHANGED