react-garden
Version:
React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.
184 lines (160 loc) • 5.37 kB
text/typescript
// @mui material components
import { Theme } from "@mui/material/styles"
function collapseItem(theme: Theme, ownerState: any) {
const { palette, transitions, breakpoints, boxShadows, borders, functions } =
theme
const { active, transparentSidenav, whiteSidenav, darkMode } = ownerState
const { white, transparent, dark, grey } = palette
const { md } = boxShadows
const { borderRadius } = borders
const { pxToRem, rgba } = functions
return {
background: () => {
let backgroundValue
if (transparentSidenav && darkMode) {
backgroundValue = active ? rgba(white.main, 0.2) : transparent.main
} else if (transparentSidenav && !darkMode) {
backgroundValue = active ? grey[300] : transparent.main
} else if (whiteSidenav) {
backgroundValue = active ? grey[200] : transparent.main
} else {
backgroundValue = active ? rgba(white.main, 0.2) : transparent.main
}
return backgroundValue
},
color:
(transparentSidenav && !darkMode) || whiteSidenav
? dark.main
: white.main,
display: "flex",
alignItems: "center",
width: "100%",
padding: `${pxToRem(4)} ${pxToRem(8)}`,
margin: `${pxToRem(0.75)} ${pxToRem(8)}`,
borderRadius: borderRadius.md,
cursor: "pointer",
userSelect: "none",
whiteSpace: "nowrap",
boxShadow:
active && !whiteSidenav && !darkMode && !transparentSidenav ? md : "none",
[breakpoints.up("xl")]: {
transition: transitions.create(["box-shadow", "background-color"], {
easing: transitions.easing.easeInOut,
duration: transitions.duration.shorter,
}),
},
"&:hover, &:focus": {
backgroundColor:
transparentSidenav && !darkMode
? grey[300]
: rgba(whiteSidenav ? grey[400] : white.main, 0.2),
},
}
}
function collapseIconBox(theme: Theme, ownerState: any) {
const { palette, transitions, borders, functions } = theme
const { transparentSidenav, whiteSidenav, darkMode } = ownerState
const { white, dark } = palette
const { borderRadius } = borders
const { pxToRem } = functions
return {
minWidth: pxToRem(32),
minHeight: pxToRem(32),
color:
(transparentSidenav && !darkMode) || whiteSidenav
? dark.main
: white.main,
borderRadius: borderRadius.md,
display: "grid",
placeItems: "center",
transition: transitions.create("margin", {
easing: transitions.easing.easeInOut,
duration: transitions.duration.standard,
}),
"& svg, svg g": {
color:
(transparentSidenav && !darkMode) || whiteSidenav
? dark.main
: white.main,
},
}
}
const collapseIcon = (
{ palette: { white, gradients } }: Theme,
{ active }: any
) => ({
color: active ? white.main : gradients.dark.state,
})
function collapseText(theme: any, ownerState: any) {
const { typography, transitions, breakpoints, functions } = theme
const { miniSidenav, transparentSidenav, active } = ownerState
const { size, fontWeightRegular, fontWeightLight } = typography
const { pxToRem } = functions
return {
// marginLeft: pxToRem(10),
[breakpoints.up("xl")]: {
opacity: miniSidenav || (miniSidenav && transparentSidenav) ? 0 : 1,
maxWidth: miniSidenav || (miniSidenav && transparentSidenav) ? 0 : "100%",
marginLeft:
miniSidenav || (miniSidenav && transparentSidenav) ? 0 : pxToRem(10),
transition: transitions.create(["opacity", "margin"], {
easing: transitions.easing.easeInOut,
duration: transitions.duration.standard,
}),
},
"& span": {
fontWeight: active ? fontWeightRegular : fontWeightLight,
fontSize: size.sm,
lineHeight: 0,
},
}
}
function collapseArrow(theme: Theme, ownerState: any) {
const { palette, typography, transitions, breakpoints, functions } = theme
const {
noCollapse,
transparentSidenav,
whiteSidenav,
miniSidenav,
open,
active,
darkMode,
} = ownerState
const { white, dark } = palette
const { size } = typography
const { pxToRem, rgba } = functions
return {
fontSize: `${size.lg} !important`,
fontWeight: 700,
marginBottom: pxToRem(-1),
transform: open ? "rotate(0)" : "rotate(-180deg)",
color: () => {
let colorValue
if (transparentSidenav && darkMode) {
colorValue = open || active ? white.main : rgba(white.main, 0.25)
} else if (transparentSidenav || whiteSidenav) {
colorValue = open || active ? dark.main : rgba(dark.main, 0.25)
} else {
colorValue = open || active ? white.main : rgba(white.main, 0.5)
}
return colorValue
},
transition: transitions.create(["color", "transform", "opacity"], {
easing: transitions.easing.easeInOut,
duration: transitions.duration.shorter,
}),
[breakpoints.up("xl")]: {
display:
noCollapse || (transparentSidenav && miniSidenav) || miniSidenav
? "none !important"
: "block !important",
},
}
}
export {
collapseItem,
collapseIconBox,
collapseIcon,
collapseText,
collapseArrow,
}