react-science 11.1.0 → 11.2.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.
@@ -1,7 +1,9 @@
1
1
  import type { Header, RowData } from '@tanstack/react-table';
2
+ import type { HeaderCellRenderer } from './table_header_cell.js';
2
3
  interface TableHeaderProps<TData extends RowData> {
3
4
  headers: Array<Header<TData, unknown>>;
4
5
  sticky: boolean;
6
+ renderHeaderCell?: HeaderCellRenderer<TData>;
5
7
  }
6
8
  export declare function TableHeader<TData extends RowData>(props: TableHeaderProps<TData>): import("react/jsx-runtime").JSX.Element;
7
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"table_header.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAY7D,UAAU,gBAAgB,CAAC,KAAK,SAAS,OAAO;IAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,OAAO,EAC/C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,2CAY/B"}
1
+ {"version":3,"file":"table_header.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAUjE,UAAU,gBAAgB,CAAC,KAAK,SAAS,OAAO;IAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,OAAO,EAC/C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,2CAgB/B"}
@@ -7,7 +7,7 @@ const headerStyle = {
7
7
  backgroundColor: 'white',
8
8
  };
9
9
  export function TableHeader(props) {
10
- const { headers, sticky } = props;
11
- return (_jsx("thead", { style: sticky ? headerStyle : undefined, children: _jsx("tr", { children: headers.map((header) => (_jsx(TableHeaderCell, { header: header }, header.id))) }) }));
10
+ const { headers, sticky, renderHeaderCell } = props;
11
+ return (_jsx("thead", { style: sticky ? headerStyle : undefined, children: _jsx("tr", { children: headers.map((header) => (_jsx(TableHeaderCell, { header: header, renderHeaderCell: renderHeaderCell }, header.id))) }) }));
12
12
  }
13
13
  //# sourceMappingURL=table_header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_header.js","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,GAAkB;IACjC,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,OAAO;CACzB,CAAC;AAOF,MAAM,UAAU,WAAW,CACzB,KAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAClC,OAAO,CACL,gBAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,YAC5C,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,eAAe,IAAiB,MAAM,EAAE,MAAM,IAAzB,MAAM,CAAC,EAAE,CAAoB,CACpD,CAAC,GACC,GACC,CACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"table_header.js","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,GAAkB;IACjC,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,OAAO;CACzB,CAAC;AAQF,MAAM,UAAU,WAAW,CACzB,KAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IACpD,OAAO,CACL,gBAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,YAC5C,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,eAAe,IAEd,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,IAF7B,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,GACC,GACC,CACT,CAAC;AACJ,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import type { Header, RowData } from '@tanstack/react-table';
2
+ import type { HTMLAttributes, ReactNode } from 'react';
3
+ type ThProps = Pick<HTMLAttributes<HTMLTableCellElement>, 'style' | 'onClick' | 'children'>;
4
+ export type HeaderCellRenderer<TData extends RowData> = (thProps: ThProps, header: Header<TData, unknown>) => ReactNode;
2
5
  interface TableHeaderCellProps<TData extends RowData> {
3
6
  header: Header<TData, unknown>;
7
+ renderHeaderCell?: HeaderCellRenderer<TData>;
4
8
  }
5
- export declare function TableHeaderCell<TData extends RowData>(props: TableHeaderCellProps<TData>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function TableHeaderCell<TData extends RowData>(props: TableHeaderCellProps<TData>): string | number | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
6
10
  export {};
7
11
  //# sourceMappingURL=table_header_cell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAI7D,UAAU,oBAAoB,CAAC,KAAK,SAAS,OAAO;IAClD,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAS,OAAO,EACnD,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,2CA6BnC"}
1
+ {"version":3,"file":"table_header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAiB,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,KAAK,OAAO,GAAG,IAAI,CACjB,cAAc,CAAC,oBAAoB,CAAC,EACpC,OAAO,GAAG,SAAS,GAAG,UAAU,CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,OAAO,IAAI,CACtD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAC3B,SAAS,CAAC;AAEf,UAAU,oBAAoB,CAAC,KAAK,SAAS,OAAO;IAClD,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAS,OAAO,EACnD,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,gHASnC"}
@@ -1,19 +1,27 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { flexRender } from '@tanstack/react-table';
3
3
  export function TableHeaderCell(props) {
4
- const { header } = props;
5
- const column = header.column;
6
- const canSort = column.getCanSort();
7
- const sorted = column.getIsSorted();
4
+ const { header, renderHeaderCell } = props;
5
+ const thProps = getThProps(header);
6
+ if (renderHeaderCell) {
7
+ return renderHeaderCell(thProps, header);
8
+ }
9
+ return _jsx("th", { ...thProps });
10
+ }
11
+ function getThProps(header) {
12
+ const sorted = header.column.getIsSorted();
13
+ const canSort = header.column.getCanSort();
8
14
  const style = {
9
15
  position: 'relative',
10
16
  cursor: canSort ? 'pointer' : undefined,
11
17
  };
12
- return (_jsx("th", { style: style, onClick: canSort ? column.getToggleSortingHandler() : undefined, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: '5px' }, children: [flexRender(header.column.columnDef.header, header.getContext()), sorted
13
- ? {
14
- asc: '🔼',
15
- desc: '🔽',
16
- }[sorted]
17
- : null] }) }));
18
+ const onClick = canSort ? header.column.getToggleSortingHandler() : undefined;
19
+ const children = (_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: '5px' }, children: [_jsx("div", { children: flexRender(header.column.columnDef.header, header.getContext()) }), sorted
20
+ ? {
21
+ asc: '🔼',
22
+ desc: '🔽',
23
+ }[sorted]
24
+ : null] }));
25
+ return { style, children, onClick };
18
26
  }
19
27
  //# sourceMappingURL=table_header_cell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_header_cell.js","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOnD,MAAM,UAAU,eAAe,CAC7B,KAAkC;IAElC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAkB;QAC3B,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACxC,CAAC;IAEF,OAAO,CACL,aACE,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,YAE/D,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAC9D,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAC/D,MAAM;oBACL,CAAC,CAAC;wBACE,GAAG,EAAE,IAAI;wBACT,IAAI,EAAE,IAAI;qBACX,CAAC,MAAM,CAAC;oBACX,CAAC,CAAC,IAAI,IACJ,GACH,CACN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"table_header_cell.js","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAkBnD,MAAM,UAAU,eAAe,CAC7B,KAAkC;IAElC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,gBAAQ,OAAO,GAAI,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CACjB,MAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAkB;QAC3B,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACxC,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,QAAQ,GAAG,CACf,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,wBACG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAC5D,EACL,MAAM;gBACL,CAAC,CAAC;oBACE,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,IAAI;iBACX,CAAC,MAAM,CAAC;gBACX,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /** @jsxImportSource @emotion/react */
2
2
  import type { RowData, TableOptions } from '@tanstack/react-table';
3
3
  import type { TableHTMLAttributes } from 'react';
4
+ import type { HeaderCellRenderer } from './table_header_cell.js';
4
5
  import type { TableColumnDef, TableRowTrRenderer } from './table_utils.js';
5
6
  interface TableBaseProps<TData extends RowData> {
6
7
  data: TData[];
@@ -42,6 +43,10 @@ interface TableBaseProps<TData extends RowData> {
42
43
  * Make sure to spread the passed `trProps` onto the rendered `<tr>` element.
43
44
  */
44
45
  renderRowTr?: TableRowTrRenderer<TData>;
46
+ /**
47
+ * Override the columns' header cell rendering.
48
+ */
49
+ renderHeaderCell?: HeaderCellRenderer<TData>;
45
50
  }
46
51
  interface RegularTableProps<TData extends RowData> extends TableBaseProps<TData> {
47
52
  virtualizeRows?: false | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"table_root.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOnE,OAAO,KAAK,EAAwB,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAc3E,UAAU,cAAc,CAAC,KAAK,SAAS,OAAO;IAC5C,IAAI,EAAE,KAAK,EAAE,CAAC;IACd;;OAEG;IAEH,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,CAAC,EAAE,IAAI,CACf,YAAY,CAAC,KAAK,CAAC,EACnB,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,mBAAmB,CAC7D,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CACzC;AAED,UAAU,iBAAiB,CAAC,KAAK,SAAS,OAAO,CAC/C,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACpC;AAED,UAAU,qBAAqB,CAAC,KAAK,SAAS,OAAO,CACnD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,EAAE,IAAI,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,OAAO,IACxC,iBAAiB,CAAC,KAAK,CAAC,GACxB,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAEjC,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,oDAwDpE"}
1
+ {"version":3,"file":"table_root.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOnE,OAAO,KAAK,EAAwB,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAc3E,UAAU,cAAc,CAAC,KAAK,SAAS,OAAO;IAC5C,IAAI,EAAE,KAAK,EAAE,CAAC;IACd;;OAEG;IAEH,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,CAAC,EAAE,IAAI,CACf,YAAY,CAAC,KAAK,CAAC,EACnB,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,mBAAmB,CAC7D,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,UAAU,iBAAiB,CAAC,KAAK,SAAS,OAAO,CAC/C,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACpC;AAED,UAAU,qBAAqB,CAAC,KAAK,SAAS,OAAO,CACnD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,EAAE,IAAI,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,OAAO,IACxC,iBAAiB,CAAC,KAAK,CAAC,GACxB,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAEjC,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,oDA6DpE"}
@@ -18,7 +18,7 @@ const CustomHTMLTable = styled(HTMLTable, {
18
18
  }
19
19
  `;
20
20
  export function Table(props) {
21
- const { data, columns, bordered = false, compact = false, interactive = false, striped = false, stickyHeader = false, reactTable, tableProps, renderRowTr, virtualizeRows, } = props;
21
+ const { data, columns, bordered = false, compact = false, interactive = false, striped = false, stickyHeader = false, reactTable, tableProps, renderRowTr, renderHeaderCell, virtualizeRows, } = props;
22
22
  const scrollElementRef = useRef(null);
23
23
  const columnDefs = useTableColumns(columns);
24
24
  const table = useReactTable({
@@ -35,7 +35,7 @@ export function Table(props) {
35
35
  estimateSize: (props.virtualizeRows && props.estimatedRowHeight) || (() => 0),
36
36
  overscan: 5,
37
37
  });
38
- return (_jsx(Container, { virtualizeRows: virtualizeRows, scrollRef: scrollElementRef, children: _jsxs(CustomHTMLTable, { bordered: bordered, compact: compact, interactive: interactive, striped: striped, ...tableProps, children: [_jsx(TableHeader, { sticky: stickyHeader, headers: table.getFlatHeaders() }), _jsx(TableBody, { rows: table.getRowModel().rows, renderRowTr: renderRowTr, virtualizer: tanstackVirtualizer, virtualizeRows: virtualizeRows })] }) }));
38
+ return (_jsx(Container, { virtualizeRows: virtualizeRows, scrollRef: scrollElementRef, children: _jsxs(CustomHTMLTable, { bordered: bordered, compact: compact, interactive: interactive, striped: striped, ...tableProps, children: [_jsx(TableHeader, { sticky: stickyHeader, headers: table.getFlatHeaders(), renderHeaderCell: renderHeaderCell }), _jsx(TableBody, { rows: table.getRowModel().rows, renderRowTr: renderRowTr, virtualizer: tanstackVirtualizer, virtualizeRows: virtualizeRows })] }) }));
39
39
  }
40
40
  const ScrollRefDiv = styled.div `
41
41
  height: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"table_root.js","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table_root.js","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-science",
3
- "version": "11.1.0",
3
+ "version": "11.2.0",
4
4
  "description": "React components to build scientific applications UI",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,7 @@
1
1
  import type { Header, RowData } from '@tanstack/react-table';
2
2
  import type { CSSProperties } from 'react';
3
3
 
4
+ import type { HeaderCellRenderer } from './table_header_cell.js';
4
5
  import { TableHeaderCell } from './table_header_cell.js';
5
6
 
6
7
  const headerStyle: CSSProperties = {
@@ -13,17 +14,22 @@ const headerStyle: CSSProperties = {
13
14
  interface TableHeaderProps<TData extends RowData> {
14
15
  headers: Array<Header<TData, unknown>>;
15
16
  sticky: boolean;
17
+ renderHeaderCell?: HeaderCellRenderer<TData>;
16
18
  }
17
19
 
18
20
  export function TableHeader<TData extends RowData>(
19
21
  props: TableHeaderProps<TData>,
20
22
  ) {
21
- const { headers, sticky } = props;
23
+ const { headers, sticky, renderHeaderCell } = props;
22
24
  return (
23
25
  <thead style={sticky ? headerStyle : undefined}>
24
26
  <tr>
25
27
  {headers.map((header) => (
26
- <TableHeaderCell key={header.id} header={header} />
28
+ <TableHeaderCell
29
+ key={header.id}
30
+ header={header}
31
+ renderHeaderCell={renderHeaderCell}
32
+ />
27
33
  ))}
28
34
  </tr>
29
35
  </thead>
@@ -1,39 +1,57 @@
1
1
  import type { Header, RowData } from '@tanstack/react-table';
2
2
  import { flexRender } from '@tanstack/react-table';
3
- import type { CSSProperties } from 'react';
3
+ import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';
4
+
5
+ type ThProps = Pick<
6
+ HTMLAttributes<HTMLTableCellElement>,
7
+ 'style' | 'onClick' | 'children'
8
+ >;
9
+
10
+ export type HeaderCellRenderer<TData extends RowData> = (
11
+ thProps: ThProps,
12
+ header: Header<TData, unknown>,
13
+ ) => ReactNode;
4
14
 
5
15
  interface TableHeaderCellProps<TData extends RowData> {
6
16
  header: Header<TData, unknown>;
17
+ renderHeaderCell?: HeaderCellRenderer<TData>;
7
18
  }
8
19
 
9
20
  export function TableHeaderCell<TData extends RowData>(
10
21
  props: TableHeaderCellProps<TData>,
11
22
  ) {
12
- const { header } = props;
13
- const column = header.column;
23
+ const { header, renderHeaderCell } = props;
24
+ const thProps = getThProps(header);
14
25
 
15
- const canSort = column.getCanSort();
16
- const sorted = column.getIsSorted();
26
+ if (renderHeaderCell) {
27
+ return renderHeaderCell(thProps, header);
28
+ }
29
+ return <th {...thProps} />;
30
+ }
17
31
 
32
+ function getThProps<TData extends RowData>(
33
+ header: Header<TData, unknown>,
34
+ ): ThProps {
35
+ const sorted = header.column.getIsSorted();
36
+ const canSort = header.column.getCanSort();
18
37
  const style: CSSProperties = {
19
38
  position: 'relative',
20
39
  cursor: canSort ? 'pointer' : undefined,
21
40
  };
22
-
23
- return (
24
- <th
25
- style={style}
26
- onClick={canSort ? column.getToggleSortingHandler() : undefined}
27
- >
28
- <div style={{ display: 'flex', flexDirection: 'row', gap: '5px' }}>
41
+ const onClick = canSort ? header.column.getToggleSortingHandler() : undefined;
42
+ const children = (
43
+ <div style={{ display: 'flex', flexDirection: 'row', gap: '5px' }}>
44
+ <div>
29
45
  {flexRender(header.column.columnDef.header, header.getContext())}
30
- {sorted
31
- ? {
32
- asc: '🔼',
33
- desc: '🔽',
34
- }[sorted]
35
- : null}
36
46
  </div>
37
- </th>
47
+ {sorted
48
+ ? {
49
+ asc: '🔼',
50
+ desc: '🔽',
51
+ }[sorted]
52
+ : null}
53
+ </div>
38
54
  );
55
+
56
+ return { style, children, onClick };
39
57
  }
@@ -14,6 +14,7 @@ import { useRef } from 'react';
14
14
 
15
15
  import { TableBody } from './table_body.js';
16
16
  import { TableHeader } from './table_header.js';
17
+ import type { HeaderCellRenderer } from './table_header_cell.js';
17
18
  import type { TableColumnDef, TableRowTrRenderer } from './table_utils.js';
18
19
  import { useTableColumns } from './use_table_columns.js';
19
20
 
@@ -73,6 +74,10 @@ interface TableBaseProps<TData extends RowData> {
73
74
  * Make sure to spread the passed `trProps` onto the rendered `<tr>` element.
74
75
  */
75
76
  renderRowTr?: TableRowTrRenderer<TData>;
77
+ /**
78
+ * Override the columns' header cell rendering.
79
+ */
80
+ renderHeaderCell?: HeaderCellRenderer<TData>;
76
81
  }
77
82
 
78
83
  interface RegularTableProps<TData extends RowData>
@@ -109,6 +114,7 @@ export function Table<TData extends RowData>(props: TableProps<TData>) {
109
114
  reactTable,
110
115
  tableProps,
111
116
  renderRowTr,
117
+ renderHeaderCell,
112
118
 
113
119
  virtualizeRows,
114
120
  } = props;
@@ -141,7 +147,11 @@ export function Table<TData extends RowData>(props: TableProps<TData>) {
141
147
  striped={striped}
142
148
  {...tableProps}
143
149
  >
144
- <TableHeader sticky={stickyHeader} headers={table.getFlatHeaders()} />
150
+ <TableHeader
151
+ sticky={stickyHeader}
152
+ headers={table.getFlatHeaders()}
153
+ renderHeaderCell={renderHeaderCell}
154
+ />
145
155
  <TableBody
146
156
  rows={table.getRowModel().rows}
147
157
  renderRowTr={renderRowTr}