@bwp-web/components 1.2.0 → 1.3.1

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/README.md CHANGED
@@ -282,7 +282,7 @@ import BrokenImageIcon from '@mui/icons-material/BrokenImage';
282
282
 
283
283
  ### BiampTable
284
284
 
285
- A composable data table built on TanStack React Table v8 with support for sorting, row selection, pagination, column visibility, global search, column filters, and CSV export.
285
+ A composable data table built on TanStack React Table v8 with support for sorting, row selection, pagination, column visibility, global search, column filters, CSV export, and per-slot prop overrides for restyling internal MUI elements.
286
286
 
287
287
  Requires `@tanstack/react-table` >= 8.0.0 as a peer dependency.
288
288
 
@@ -1,6 +1,29 @@
1
- import { type BoxProps } from '@mui/material';
2
- import { type Table } from '@tanstack/react-table';
1
+ import { type BoxProps, type TableBodyProps as MuiTableBodyProps, type TableCellProps as MuiTableCellProps, type TableHeadProps as MuiTableHeadProps, type TableProps as MuiTableProps, type TableRowProps as MuiTableRowProps } from '@mui/material';
2
+ import { type Cell, type Header, type Row, type Table } from '@tanstack/react-table';
3
3
  import { type ReactNode } from 'react';
4
+ import { type SlotPropsOrFn } from './slotProps';
5
+ export type BiampTableSlotProps<TData> = {
6
+ /** Props merged onto the MUI `<Table>`. `sx` composes with defaults. */
7
+ table?: MuiTableProps;
8
+ /** Props merged onto the `<TableHead>`. `sx` composes with defaults. */
9
+ head?: MuiTableHeadProps;
10
+ /** Props merged onto the `<TableBody>`. `sx` composes with defaults. */
11
+ body?: MuiTableBodyProps;
12
+ /** Props merged onto the header `<TableRow>`. `sx` composes with defaults. */
13
+ headerRow?: MuiTableRowProps;
14
+ /** Props merged onto each header `<TableCell>`. Pass a function for per-column overrides. `sx` composes with defaults. */
15
+ headerCell?: SlotPropsOrFn<MuiTableCellProps, {
16
+ header: Header<TData, unknown>;
17
+ }>;
18
+ /** Props merged onto each body `<TableRow>`. Pass a function for per-row overrides. `sx` composes with defaults. */
19
+ row?: SlotPropsOrFn<MuiTableRowProps, {
20
+ row: Row<TData>;
21
+ }>;
22
+ /** Props merged onto each body `<TableCell>`. Pass a function for per-cell overrides. `sx` composes with defaults. */
23
+ cell?: SlotPropsOrFn<MuiTableCellProps, {
24
+ cell: Cell<TData, unknown>;
25
+ }>;
26
+ };
4
27
  type RowClickProps<TData> = {
5
28
  /** Called when a clickable body row is clicked. Receives the row's original data. */
6
29
  onRowClick: (row: TData) => void;
@@ -34,7 +57,24 @@ export type BiampTableProps<TData> = BoxProps & RowClickProps<TData> & Selection
34
57
  empty?: boolean | ReactNode;
35
58
  /** Returns a human-readable name for a row, used in ARIA labels (e.g. "Select: Conference Room A"). Falls back to row index. */
36
59
  getRowLabel?: (row: TData) => string;
60
+ /**
61
+ * Returns a background color for a row (any valid CSS color). Applied to
62
+ * the row and to all sticky cells (selection column, sticky action columns)
63
+ * so the row reads as a single tinted band. Hover and selected backgrounds
64
+ * override the custom color — whatever the theme defines for those states
65
+ * wins. Use opaque colors so sticky cells fully cover scrolled content.
66
+ * Return `undefined` to leave a row at its default color.
67
+ */
68
+ setRowColor?: (row: TData) => string | undefined;
69
+ /**
70
+ * Per-slot props merged onto the internal MUI elements (`table`, `head`, `body`,
71
+ * `headerRow`, `headerCell`, `row`, `cell`). `sx` composes with the defaults
72
+ * instead of replacing them. `row`, `cell`, and `headerCell` accept a function
73
+ * of the row/cell/header for data-aware overrides — memoize these callbacks to
74
+ * avoid breaking row memoization.
75
+ */
76
+ slotProps?: BiampTableSlotProps<TData>;
37
77
  };
38
- export declare function BiampTable<TData>({ table, onRowClick, isRowClickable, loading, error, empty, enableRowSelection, enableExpanding, hideSelectAll, selectChildrenWithParent, getRowLabel, sx, ...boxProps }: BiampTableProps<TData>): import("react/jsx-runtime").JSX.Element;
78
+ export declare function BiampTable<TData>({ table, onRowClick, isRowClickable, loading, error, empty, enableRowSelection, enableExpanding, hideSelectAll, selectChildrenWithParent, getRowLabel, setRowColor, slotProps, sx, ...boxProps }: BiampTableProps<TData>): import("react/jsx-runtime").JSX.Element;
39
79
  export {};
40
80
  //# sourceMappingURL=BiampTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BiampTable.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAWd,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAc,EAAE,KAAK,SAAS,EAAU,MAAM,OAAO,CAAC;AAOtD,KAAK,aAAa,CAAC,KAAK,IACpB;IACE,qFAAqF;IACrF,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC;CAC1C,GACD;IACE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC;AAGN,KAAK,uBAAuB,GAAG;IAC7B,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uFAAuF;IACvF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iJAAiJ;IACjJ,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wKAAwK;IACxK,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI,QAAQ,GAC3C,aAAa,CAAC,KAAK,CAAC,GACpB,uBAAuB,GAAG;IACxB,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wKAAwK;IACxK,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IACpC,6IAA6I;IAC7I,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,gIAAgI;IAChI,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,MAAM,CAAC;CACtC,CAAC;AAiRJ,wBAAgB,UAAU,CAAC,KAAK,EAAE,EAChC,KAAK,EACL,UAAU,EACV,cAAc,EACd,OAAO,EACP,KAAK,EACL,KAAK,EACL,kBAA0B,EAC1B,eAAuB,EACvB,aAAa,EACb,wBAAgC,EAChC,WAAW,EACX,EAAE,EACF,GAAG,QAAQ,EACZ,EAAE,eAAe,CAAC,KAAK,CAAC,2CAyJxB"}
1
+ {"version":3,"file":"BiampTable.d.ts","sourceRoot":"","sources":["../../src/BiampTable/BiampTable.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { BiampTable, type BiampTableProps } from './BiampTable';
1
+ export { BiampTable, type BiampTableProps, type BiampTableSlotProps, } from './BiampTable';
2
2
  export { BiampTableContainer, type BiampTableContainerProps, } from './BiampTableContainer';
3
3
  export { BiampTableCellActionButton, type BiampTableCellActionButtonProps, } from './BiampTableCellActionButton';
4
4
  export { BiampTableColumnVisibility, type BiampTableColumnVisibilityProps, getColumnVisibilityDirtyCount, getDefaultColumnVisibility, toVisibilityState, type ColumnVisibility, } from './BiampTableColumnVisibility';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/BiampTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,6BAA6B,EAC7B,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,iCAAiC,EACjC,KAAK,sCAAsC,GAC5C,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,KAAK,kCAAkC,GACxC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,KAAK,8BAA8B,GACpC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,kCAAkC,EAClC,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/BiampTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,6BAA6B,EAC7B,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,iCAAiC,EACjC,KAAK,sCAAsC,GAC5C,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,KAAK,kCAAkC,GACxC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,KAAK,8BAA8B,GACpC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,kCAAkC,EAClC,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SxProps, Theme } from '@mui/material';
2
+ export type SlotPropsOrFn<TProps, TCtx> = TProps | ((ctx: TCtx) => TProps);
3
+ export declare function resolveSlot<TProps, TCtx>(slot: SlotPropsOrFn<TProps, TCtx> | undefined, ctx: TCtx): TProps | undefined;
4
+ export declare function mergeSx(...inputs: Array<SxProps<Theme> | false | null | undefined>): SxProps<Theme>;
5
+ //# sourceMappingURL=slotProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotProps.d.ts","sourceRoot":"","sources":["../../src/BiampTable/slotProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC;AAE3E,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,EACtC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,EAC7C,GAAG,EAAE,IAAI,GACR,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,OAAO,CACrB,GAAG,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAC1D,OAAO,CAAC,KAAK,CAAC,CAIhB"}
package/dist/index.cjs CHANGED
@@ -1086,6 +1086,15 @@ function useLoadingDelay(loading, { delay = 150, minDuration = 500 } = {}) {
1086
1086
  return status === "loading" || status === "ending";
1087
1087
  }
1088
1088
 
1089
+ // src/BiampTable/slotProps.ts
1090
+ function resolveSlot(slot, ctx) {
1091
+ if (!slot) return void 0;
1092
+ return typeof slot === "function" ? slot(ctx) : slot;
1093
+ }
1094
+ function mergeSx(...inputs) {
1095
+ return inputs.filter((v) => Boolean(v)).flatMap((v) => Array.isArray(v) ? v : [v]);
1096
+ }
1097
+
1089
1098
  // src/BiampTable/BiampTable.tsx
1090
1099
  var import_jsx_runtime9 = require("react/jsx-runtime");
1091
1100
  var overlaySx = {
@@ -1156,42 +1165,71 @@ function BiampTableRowInner({
1156
1165
  enableExpanding,
1157
1166
  selectChildrenWithParent,
1158
1167
  getRowLabel,
1159
- hasExpandableRows
1168
+ hasExpandableRows,
1169
+ customColor,
1170
+ rowSlotProps,
1171
+ cellSlotProps
1160
1172
  }) {
1161
1173
  const clickable = onRowClick ? isRowClickable ? isRowClickable(row.original) : true : false;
1174
+ const resolvedRow = resolveSlot(rowSlotProps, { row });
1175
+ const {
1176
+ sx: userRowSx,
1177
+ onClick: userRowOnClick,
1178
+ onKeyDown: userRowOnKeyDown,
1179
+ ...restRowProps
1180
+ } = resolvedRow ?? {};
1162
1181
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1163
1182
  import_material7.TableRow,
1164
1183
  {
1184
+ ...restRowProps,
1165
1185
  hover: clickable,
1166
1186
  selected: enableRowSelection ? isSelected : void 0,
1167
1187
  role: clickable ? "button" : void 0,
1168
1188
  tabIndex: clickable ? 0 : void 0,
1169
- sx: clickable ? rowCursorPointerSx : void 0,
1170
- onClick: clickable && onRowClick ? () => onRowClick(row.original) : void 0,
1189
+ sx: mergeSx(
1190
+ clickable && rowCursorPointerSx,
1191
+ customColor ? { backgroundColor: customColor } : void 0,
1192
+ userRowSx
1193
+ ),
1194
+ onClick: clickable && onRowClick ? (e) => {
1195
+ onRowClick(row.original);
1196
+ userRowOnClick?.(e);
1197
+ } : userRowOnClick,
1171
1198
  onKeyDown: clickable && onRowClick ? (e) => {
1172
1199
  if (e.key === "Enter" || e.key === " ") {
1173
1200
  e.preventDefault();
1174
1201
  onRowClick(row.original);
1175
1202
  }
1176
- } : void 0,
1203
+ userRowOnKeyDown?.(e);
1204
+ } : userRowOnKeyDown,
1177
1205
  children: [
1178
- enableRowSelection && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableCell, { padding: "checkbox", sx: selectionCellSx, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1179
- import_material7.Checkbox,
1206
+ enableRowSelection && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1207
+ import_material7.TableCell,
1180
1208
  {
1181
- checked: isSelected,
1182
- disabled: !row.getCanSelect(),
1183
- onChange: (e) => row.toggleSelected(e.target.checked, {
1184
- selectChildren: selectChildrenWithParent
1185
- }),
1186
- onClick: (e) => e.stopPropagation(),
1187
- sx: !row.getCanSelect() ? checkboxHiddenSx : void 0,
1188
- slotProps: {
1189
- input: {
1190
- "aria-label": getRowLabel ? `Select ${getRowLabel(row.original)}` : `Select row ${row.index + 1}`
1209
+ padding: "checkbox",
1210
+ sx: mergeSx(
1211
+ selectionCellSx,
1212
+ customColor ? { backgroundColor: customColor } : void 0
1213
+ ),
1214
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1215
+ import_material7.Checkbox,
1216
+ {
1217
+ checked: isSelected,
1218
+ disabled: !row.getCanSelect(),
1219
+ onChange: (e) => row.toggleSelected(e.target.checked, {
1220
+ selectChildren: selectChildrenWithParent
1221
+ }),
1222
+ onClick: (e) => e.stopPropagation(),
1223
+ sx: !row.getCanSelect() ? checkboxHiddenSx : void 0,
1224
+ slotProps: {
1225
+ input: {
1226
+ "aria-label": getRowLabel ? `Select ${getRowLabel(row.original)}` : `Select row ${row.index + 1}`
1227
+ }
1228
+ }
1191
1229
  }
1192
- }
1230
+ )
1193
1231
  }
1194
- ) }),
1232
+ ),
1195
1233
  row.getVisibleCells().map((cell, cellIndex, cells) => {
1196
1234
  const sticky = cell.column.columnDef.meta?.sticky;
1197
1235
  const isExpandCell = enableExpanding && !sticky && cellIndex === cells.findIndex((c) => !c.column.columnDef.meta?.sticky);
@@ -1199,14 +1237,19 @@ function BiampTableRowInner({
1199
1237
  cell.column.columnDef.cell,
1200
1238
  cell.getContext()
1201
1239
  );
1240
+ const resolvedCell = resolveSlot(cellSlotProps, { cell });
1241
+ const { sx: userCellSx, ...restCellProps } = resolvedCell ?? {};
1202
1242
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1203
1243
  import_material7.TableCell,
1204
1244
  {
1245
+ ...restCellProps,
1205
1246
  "data-sticky": sticky || void 0,
1206
- sx: {
1207
- ...cellSx(sticky, cell.column.columnDef.meta?.minWidth, 2),
1208
- pl: isExpandCell ? "6px" : "12px"
1209
- },
1247
+ sx: mergeSx(
1248
+ cellSx(sticky, cell.column.columnDef.meta?.minWidth, 2),
1249
+ { pl: isExpandCell ? "6px" : "12px" },
1250
+ sticky && customColor ? { backgroundColor: customColor } : void 0,
1251
+ userCellSx
1252
+ ),
1210
1253
  children: (() => {
1211
1254
  if (sticky) return content;
1212
1255
  const truncate = cell.column.columnDef.meta?.truncate ?? true;
@@ -1262,7 +1305,7 @@ function BiampTableRowInner({
1262
1305
  );
1263
1306
  }
1264
1307
  function biampTableRowPropsAreEqual(prev, next) {
1265
- return prev.row.id === next.row.id && prev.row.original === next.row.original && prev.isSelected === next.isSelected && prev.isExpanded === next.isExpanded && prev.row.getVisibleCells().length === next.row.getVisibleCells().length && prev.enableRowSelection === next.enableRowSelection && prev.enableExpanding === next.enableExpanding && prev.hasExpandableRows === next.hasExpandableRows && prev.selectChildrenWithParent === next.selectChildrenWithParent && prev.onRowClick === next.onRowClick && prev.isRowClickable === next.isRowClickable && prev.getRowLabel === next.getRowLabel;
1308
+ return prev.row.id === next.row.id && prev.row.original === next.row.original && prev.isSelected === next.isSelected && prev.isExpanded === next.isExpanded && prev.row.getVisibleCells().length === next.row.getVisibleCells().length && prev.enableRowSelection === next.enableRowSelection && prev.enableExpanding === next.enableExpanding && prev.hasExpandableRows === next.hasExpandableRows && prev.selectChildrenWithParent === next.selectChildrenWithParent && prev.onRowClick === next.onRowClick && prev.isRowClickable === next.isRowClickable && prev.getRowLabel === next.getRowLabel && prev.customColor === next.customColor && prev.rowSlotProps === next.rowSlotProps && prev.cellSlotProps === next.cellSlotProps;
1266
1309
  }
1267
1310
  var BiampTableRow = import_react4.default.memo(
1268
1311
  BiampTableRowInner,
@@ -1280,9 +1323,15 @@ function BiampTable({
1280
1323
  hideSelectAll,
1281
1324
  selectChildrenWithParent = false,
1282
1325
  getRowLabel,
1326
+ setRowColor,
1327
+ slotProps,
1283
1328
  sx,
1284
1329
  ...boxProps
1285
1330
  }) {
1331
+ const { sx: userTableSx, ...restTableSlotProps } = slotProps?.table ?? {};
1332
+ const { sx: userHeadSx, ...restHeadSlotProps } = slotProps?.head ?? {};
1333
+ const { sx: userBodySx, ...restBodySlotProps } = slotProps?.body ?? {};
1334
+ const { sx: userHeaderRowSx, ...restHeaderRowSlotProps } = slotProps?.headerRow ?? {};
1286
1335
  const tableMinWidth = table.getVisibleLeafColumns().reduce(
1287
1336
  (sum, col) => {
1288
1337
  const mw = col.columnDef.meta?.minWidth;
@@ -1314,73 +1363,99 @@ function BiampTable({
1314
1363
  import_material7.Table,
1315
1364
  {
1316
1365
  "aria-busy": showLoading || void 0,
1317
- sx: { minWidth: tableMinWidth, tableLayout: "auto" },
1366
+ ...restTableSlotProps,
1367
+ sx: mergeSx(
1368
+ { minWidth: tableMinWidth, tableLayout: "auto" },
1369
+ userTableSx
1370
+ ),
1318
1371
  children: [
1319
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableHead, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_material7.TableRow, { children: [
1320
- enableRowSelection && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableCell, { padding: "checkbox", sx: headerSelectionCellSx, children: !hideSelectAll && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1321
- import_material7.Checkbox,
1322
- {
1323
- checked: table.getIsAllPageRowsSelected(),
1324
- indeterminate: table.getIsSomePageRowsSelected(),
1325
- onChange: table.getToggleAllPageRowsSelectedHandler(),
1326
- sx: rows.length === 0 ? checkboxHiddenHeaderSx : void 0,
1327
- slotProps: { input: { "aria-label": "Select all rows" } }
1328
- }
1329
- ) }),
1330
- headerGroup.headers.map((header) => {
1331
- const sticky = header.column.columnDef.meta?.sticky;
1332
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1333
- import_material7.TableCell,
1334
- {
1335
- "data-sticky": sticky || void 0,
1336
- sortDirection: header.column.getIsSorted() || false,
1337
- ...header.column.getCanSort() && {
1338
- "aria-sort": header.column.getIsSorted() ? header.column.getIsSorted() === "asc" ? "ascending" : "descending" : "none"
1339
- },
1340
- sx: cellSx(
1341
- sticky,
1342
- header.column.columnDef.meta?.minWidth,
1343
- 3
1344
- ),
1345
- children: header.isPlaceholder ? null : header.column.getCanSort() ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1346
- import_material7.TableSortLabel,
1372
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableHead, { ...restHeadSlotProps, sx: mergeSx(userHeadSx), children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1373
+ import_material7.TableRow,
1374
+ {
1375
+ ...restHeaderRowSlotProps,
1376
+ sx: mergeSx(userHeaderRowSx),
1377
+ children: [
1378
+ enableRowSelection && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableCell, { padding: "checkbox", sx: headerSelectionCellSx, children: !hideSelectAll && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1379
+ import_material7.Checkbox,
1380
+ {
1381
+ checked: table.getIsAllPageRowsSelected(),
1382
+ indeterminate: table.getIsSomePageRowsSelected(),
1383
+ onChange: table.getToggleAllPageRowsSelectedHandler(),
1384
+ sx: rows.length === 0 ? checkboxHiddenHeaderSx : void 0,
1385
+ slotProps: { input: { "aria-label": "Select all rows" } }
1386
+ }
1387
+ ) }),
1388
+ headerGroup.headers.map((header) => {
1389
+ const sticky = header.column.columnDef.meta?.sticky;
1390
+ const resolvedHeaderCell = resolveSlot(slotProps?.headerCell, {
1391
+ header
1392
+ });
1393
+ const { sx: userHeaderCellSx, ...restHeaderCellProps } = resolvedHeaderCell ?? {};
1394
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1395
+ import_material7.TableCell,
1347
1396
  {
1348
- active: !!header.column.getIsSorted(),
1349
- direction: header.column.getIsSorted() || "asc",
1350
- onClick: header.column.getToggleSortingHandler(),
1351
- ...header.column.getIsSorted() && {
1352
- IconComponent: header.column.getIsSorted() === "asc" ? import_assets5.DropdownChevronUpIcon : import_assets5.DropdownChevronDownIcon
1397
+ ...restHeaderCellProps,
1398
+ "data-sticky": sticky || void 0,
1399
+ sortDirection: header.column.getIsSorted() || false,
1400
+ ...header.column.getCanSort() && {
1401
+ "aria-sort": header.column.getIsSorted() ? header.column.getIsSorted() === "asc" ? "ascending" : "descending" : "none"
1353
1402
  },
1354
- children: (0, import_react_table.flexRender)(
1403
+ sx: mergeSx(
1404
+ cellSx(sticky, header.column.columnDef.meta?.minWidth, 3),
1405
+ userHeaderCellSx
1406
+ ),
1407
+ children: header.isPlaceholder ? null : header.column.getCanSort() ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1408
+ import_material7.TableSortLabel,
1409
+ {
1410
+ active: !!header.column.getIsSorted(),
1411
+ direction: header.column.getIsSorted() || "asc",
1412
+ onClick: header.column.getToggleSortingHandler(),
1413
+ ...header.column.getIsSorted() && {
1414
+ IconComponent: header.column.getIsSorted() === "asc" ? import_assets5.DropdownChevronUpIcon : import_assets5.DropdownChevronDownIcon
1415
+ },
1416
+ children: (0, import_react_table.flexRender)(
1417
+ header.column.columnDef.header,
1418
+ header.getContext()
1419
+ )
1420
+ }
1421
+ ) : (0, import_react_table.flexRender)(
1355
1422
  header.column.columnDef.header,
1356
1423
  header.getContext()
1357
1424
  )
1358
- }
1359
- ) : (0, import_react_table.flexRender)(
1360
- header.column.columnDef.header,
1361
- header.getContext()
1362
- )
1363
- },
1364
- header.id
1365
- );
1366
- })
1367
- ] }, headerGroup.id)) }),
1368
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material7.TableBody, { sx: { opacity: showLoading ? 0.3 : 1 }, children: !showError && rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1369
- BiampTableRow,
1370
- {
1371
- row,
1372
- isExpanded: row.getIsExpanded(),
1373
- isSelected: row.getIsSelected(),
1374
- onRowClick,
1375
- isRowClickable,
1376
- enableRowSelection,
1377
- enableExpanding,
1378
- selectChildrenWithParent,
1379
- getRowLabel,
1380
- hasExpandableRows
1425
+ },
1426
+ header.id
1427
+ );
1428
+ })
1429
+ ]
1381
1430
  },
1382
- row.id
1383
- )) })
1431
+ headerGroup.id
1432
+ )) }),
1433
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1434
+ import_material7.TableBody,
1435
+ {
1436
+ ...restBodySlotProps,
1437
+ sx: mergeSx({ opacity: showLoading ? 0.3 : 1 }, userBodySx),
1438
+ children: !showError && rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1439
+ BiampTableRow,
1440
+ {
1441
+ row,
1442
+ isExpanded: row.getIsExpanded(),
1443
+ isSelected: row.getIsSelected(),
1444
+ onRowClick,
1445
+ isRowClickable,
1446
+ enableRowSelection,
1447
+ enableExpanding,
1448
+ selectChildrenWithParent,
1449
+ getRowLabel,
1450
+ hasExpandableRows,
1451
+ customColor: setRowColor?.(row.original),
1452
+ rowSlotProps: slotProps?.row,
1453
+ cellSlotProps: slotProps?.cell
1454
+ },
1455
+ row.id
1456
+ ))
1457
+ }
1458
+ )
1384
1459
  ]
1385
1460
  }
1386
1461
  ),