mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-29 00:16:39 +01:00
198 lines
5.7 KiB
TypeScript
198 lines
5.7 KiB
TypeScript
import { styled, alpha, darken, lighten } from "@mui/material";
|
|
import { APP_BAR_HEIGHT } from "@src/components/Navigation";
|
|
import { DRAWER_COLLAPSED_WIDTH } from "@src/components/SideDrawer";
|
|
|
|
import { colord, extend } from "colord";
|
|
import mixPlugin from "colord/plugins/lch";
|
|
extend([mixPlugin]);
|
|
|
|
export const OUT_OF_ORDER_MARGIN = 8;
|
|
|
|
export const TableContainer = styled("div", {
|
|
shouldForwardProp: (prop) => prop !== "rowHeight",
|
|
})<{ rowHeight: number }>(({ theme, rowHeight }) => ({
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
height: `calc(100vh - ${APP_BAR_HEIGHT}px)`,
|
|
|
|
"& > .rdg": {
|
|
width: `calc(100% - ${DRAWER_COLLAPSED_WIDTH}px)`,
|
|
flex: 1,
|
|
paddingBottom: `max(env(safe-area-inset-bottom), ${theme.spacing(2)})`,
|
|
},
|
|
|
|
[theme.breakpoints.down("sm")]: { width: "100%" },
|
|
|
|
"& .rdg": {
|
|
"--color": theme.palette.text.primary,
|
|
"--border-color": theme.palette.divider,
|
|
// "--summary-border-color": "#aaa",
|
|
"--background-color":
|
|
theme.palette.mode === "light"
|
|
? theme.palette.background.paper
|
|
: colord(theme.palette.background.paper)
|
|
.mix("#fff", 0.04)
|
|
.alpha(1)
|
|
.toHslString(),
|
|
"--header-background-color": theme.palette.background.default,
|
|
"--row-hover-background-color": colord(theme.palette.background.paper)
|
|
.mix(theme.palette.action.hover, theme.palette.action.hoverOpacity)
|
|
.alpha(1)
|
|
.toHslString(),
|
|
"--row-selected-background-color":
|
|
theme.palette.mode === "light"
|
|
? lighten(theme.palette.primary.main, 0.9)
|
|
: darken(theme.palette.primary.main, 0.8),
|
|
"--row-selected-hover-background-color":
|
|
theme.palette.mode === "light"
|
|
? lighten(theme.palette.primary.main, 0.8)
|
|
: darken(theme.palette.primary.main, 0.7),
|
|
"--checkbox-color": theme.palette.primary.main,
|
|
"--checkbox-focus-color": theme.palette.primary.main,
|
|
"--checkbox-disabled-border-color": "#ccc",
|
|
"--checkbox-disabled-background-color": "#ddd",
|
|
"--selection-color": theme.palette.primary.main,
|
|
"--font-size": "0.75rem",
|
|
"--cell-padding": theme.spacing(0, 1.25),
|
|
|
|
border: "none",
|
|
backgroundColor: "transparent",
|
|
|
|
...(theme.typography.caption as any),
|
|
// fontSize: "0.8125rem",
|
|
lineHeight: "inherit !important",
|
|
|
|
"& .rdg-cell": {
|
|
display: "flex",
|
|
alignItems: "center",
|
|
padding: 0,
|
|
|
|
overflow: "visible",
|
|
contain: "none",
|
|
position: "relative",
|
|
|
|
lineHeight: "calc(var(--row-height) - 1px)",
|
|
},
|
|
|
|
"& .rdg-cell-frozen": {
|
|
position: "sticky",
|
|
},
|
|
"& .rdg-cell-frozen-last": {
|
|
boxShadow: theme.shadows[2]
|
|
.replace(/, 0 (\d+px)/g, ", $1 0")
|
|
.split("),")
|
|
.slice(1)
|
|
.join("),"),
|
|
|
|
"&[aria-selected=true]": {
|
|
boxShadow:
|
|
theme.shadows[2]
|
|
.replace(/, 0 (\d+px)/g, ", $1 0")
|
|
.split("),")
|
|
.slice(1)
|
|
.join("),") + ", inset 0 0 0 2px var(--selection-color)",
|
|
},
|
|
},
|
|
|
|
"& .rdg-cell-copied": {
|
|
backgroundColor:
|
|
theme.palette.mode === "light"
|
|
? lighten(theme.palette.primary.main, 0.7)
|
|
: darken(theme.palette.primary.main, 0.6),
|
|
},
|
|
},
|
|
|
|
".rdg-row, .rdg-header-row": {
|
|
marginLeft: `max(env(safe-area-inset-left), ${theme.spacing(2)})`,
|
|
marginRight: `env(safe-area-inset-right)`,
|
|
},
|
|
|
|
".rdg-header-row .rdg-cell:first-child": {
|
|
borderTopLeftRadius: theme.shape.borderRadius,
|
|
},
|
|
|
|
".rdg-row .rdg-cell:first-child, .rdg-header-row .rdg-cell:first-child": {
|
|
borderLeft: "1px solid var(--border-color)",
|
|
},
|
|
|
|
".rdg-row:last-child": {
|
|
borderBottomLeftRadius: theme.shape.borderRadius,
|
|
borderBottomRightRadius: theme.shape.borderRadius,
|
|
|
|
"& .rdg-cell:first-child": {
|
|
borderBottomLeftRadius: theme.shape.borderRadius,
|
|
},
|
|
"& .rdg-cell:nth-last-child(2)": {
|
|
borderBottomRightRadius: theme.shape.borderRadius,
|
|
},
|
|
},
|
|
|
|
".rdg-header-row .rdg-cell": {
|
|
borderTop: "1px solid var(--border-color)",
|
|
},
|
|
|
|
".rdg-row:hover": { color: theme.palette.text.primary },
|
|
|
|
".row-hover-iconButton": {
|
|
color: theme.palette.text.disabled,
|
|
transitionDuration: "0s",
|
|
},
|
|
".rdg-row:hover .row-hover-iconButton": {
|
|
color: theme.palette.text.primary,
|
|
backgroundColor: alpha(
|
|
theme.palette.action.hover,
|
|
theme.palette.action.hoverOpacity * 1.5
|
|
),
|
|
},
|
|
|
|
".cell-collapse-padding": {
|
|
margin: theme.spacing(0, -1.25),
|
|
width: `calc(100% + ${theme.spacing(1.25 * 2)})`,
|
|
},
|
|
|
|
".rdg-row.out-of-order": {
|
|
"--row-height": rowHeight + 1 + "px !important",
|
|
marginTop: -1,
|
|
marginBottom: OUT_OF_ORDER_MARGIN,
|
|
borderBottomLeftRadius: theme.shape.borderRadius,
|
|
|
|
"& .rdg-cell:not(:last-child)": {
|
|
borderTop: `1px solid var(--border-color)`,
|
|
},
|
|
"& .rdg-cell:first-child": {
|
|
borderBottomLeftRadius: theme.shape.borderRadius,
|
|
},
|
|
"& .rdg-cell:nth-last-child(2)": {
|
|
borderBottomRightRadius: theme.shape.borderRadius,
|
|
},
|
|
"&:not(:nth-child(4))": {
|
|
borderTopLeftRadius: theme.shape.borderRadius,
|
|
|
|
"& .rdg-cell:first-child": {
|
|
borderTopLeftRadius: theme.shape.borderRadius,
|
|
},
|
|
"& .rdg-cell:nth-last-child(2)": {
|
|
borderTopRightRadius: theme.shape.borderRadius,
|
|
},
|
|
},
|
|
|
|
"& + .rdg-row:not(.out-of-order)": {
|
|
"--row-height": rowHeight + 1 + "px !important",
|
|
marginTop: -1,
|
|
borderTopLeftRadius: theme.shape.borderRadius,
|
|
|
|
"& .rdg-cell:not(:last-child)": {
|
|
borderTop: `1px solid var(--border-color)`,
|
|
},
|
|
"& .rdg-cell:first-child": {
|
|
borderTopLeftRadius: theme.shape.borderRadius,
|
|
},
|
|
"& .rdg-cell:nth-last-child(2)": {
|
|
borderTopRightRadius: theme.shape.borderRadius,
|
|
},
|
|
},
|
|
},
|
|
}));
|
|
|
|
export default TableContainer;
|