You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.0 KiB

3 years ago
An entire AdminJS interface is built with 2 main packages:
- [styled-components]{@link https://styled-components.com/} backed by
- [styled-system]{@link https://styled-system.com/}.
The core of the style information is the {@link Theme}. It is base on the
[Theme Specification]{@link https://styled-system.com/theme-specification/} and
it is used by almost all the components provided by AdminJS.
The structure of the Theme is as follows:
```javascript
const theme = {
breakpoints,
colors,
fontSizes,
fontWeights,
lineHeights,
shadows,
sizes,
space,
}
```
Each element controls a different kind of props passed to the Design System Components.
So let's say you would like to create a box with the same background as our
`primary100` color. This is one way of achieving that:
```javascript
import styled from 'styled-components'
import { Box } from '@adminjs/design-system'
const MyBlueBox = styled(Box)`
background: ${({ theme }) => theme.colors.primary100};
// other css styles you want to override.
`
```
> There is a helper function {@link themeGet} which can be used to fetch the data from Theme.
But, since AdminJS uses [styled-system]{@link https://styled-system.com/}, you also can achieve
a similar result by passing a `bg` Prop to the [Box Component]{@link Box},
everything because Box supports all the {@link ColorProps}.
```javascript
import { Box } from '@adminjs/design-system'
const ComponentWhereIWantToUseBlueBox = () => (
<Box bg="primary100">
...
</Box>
)
```
The last way of accessing the theme is to use withTheme HOC provided by
[styled-components]{@link https://styled-components.com/}
```javascript
import { withTheme } from 'styled-components'
const MyComponent = (props) => {
const { theme } = props
// theme.colors.primary100
}
export default withTheme(MyComponent)
```
{@link ColorProps} is only one of the extensions we provided. Take a look at the documentation
below to see all possible options,
### Responsive styles
You can pass an array instead of value to props to define how behaves in in different breakpoints.
so passing `[1, 1/2, 0.4]` as `width` will width for a following breakpoints:
- <= 577px: 100%
- 578px-769px: 50%
- \>= 769px: 40%
Combined with {@Box} and {@FlexProps} creates a tool to build entire layouts.
Take a look at this example:
```javascript
import { Box } from '@adminjs/design-system'
const ComponentWhereIWantToUseResponsiveStyle = () => (
<Box flex flexDirection="column">
<Box width={[1, 1/2, 1/3]}>Sidebar</Box>
<Box width={[1, 1/2, 2/3]}>Content</Box>
</Box>
)
```
Above we defined that the Sidebar box should have 100% width until the viewport reaches the first
breakpoint, then 50% (until the next breakpoint) and then 1/3rd of the page for the remaining 2
breakpoints.
You can read more about responsive features on `styled-system`
{@link https://styled-system.com/responsive-styles}
<style>
.shadow-div { display: block; width: 80px; height: 80px;}
.space-box { display: inline-block; height: 20px; background: #4268F6; vertical-align: middle;}
</style>