react-style-props
Version:
React library for styling components with defined props
193 lines (139 loc) • 5.11 kB
Markdown
# react-style-props
Style your React components using defined style props easily.
## install
```bash
npm install react-style-props
```
## usage
```tsx
// set up YourComponent.tsx
import { HtmlHTMLAttributes, ReactElement, Ref, forwardRef } from "react";
import styled from "@emotion/styled";
import { DefaultConfigType, resolveProps } from "react-style-props"; // add...(1)
export interface YourComponentInterface
extends HtmlHTMLAttributes<HTMLDivElement>,
DefaultConfigType {} // add...(2)
const YourComponent = ({ children, ...props }: YourComponentInterface): ReactElement => {
const { styleString, otherProps } = resolveProps(props); // add...(3)
return (
<$YourComponent css={styleString} {...otherProps} {/** add...(4) */}>
{children}
</$YourComponent>
);
};
export default YourComponent;
const $YourComponent = styled("div")<any>`
${({ css }) => css} // add...(5)
`;
```
```tsx
// use
<YourComponent ac fullV>
<YourTxt fs={14} fw={700} mr0mlAuto mouseCss>
Hello
</YourTxt>
</YourComponent>
```
## Supported props
- All CSS properties are supported
### Special Style Props
#### Layout Props
- `flex`: Enable flex display
- `jc`: Enable flex and justify-content: center
- `ac`: Enable flex and align-items: center
- `between`: Enable flex with justify-content: space-between
- `column`, `col`: Enable flex with flex-direction: column
- `row`: Enable flex with flex-direction: row
- `absolute`, `fixed`, `relative`, `sticky`: Set position
#### Size Props
- `w`, `width`: Set element width
- `h`, `height`: Set element height
- `size`: Set both width and height (can use array [width, height] or widthHeight)
- `fullP`: Set width: 100% and height: 100%
- `fullV`: Set width: 100vw and height: 100vh
#### Margin & Padding Props
- `m`, `margin`: Set all margins
- `mx`: Set horizontal margins (left & right)
- `my`: Set vertical margins (top & bottom)
- `mt`, `mr`, `mb`, `ml`: Set individual margins
- `p`, `padding`: Set all padding
- `px`: Set horizontal padding
- `py`: Set vertical padding
- `pt`, `pr`, `pb`, `pl`: Set individual padding
#### Text Props
- `fs`, `fontSize`: Set font size
- `fw`, `fontWeight`: Set font weight
- `textCenter`: Set text-align: center
- `textLeft`: Set text-align: left
- `textRight`: Set text-align: right
- `ellipsis`: Enable text ellipsis with overflow
#### Mouse Interaction Props
- `pointer`: Set cursor: pointer
- `mouseCss`: Apply hover and active effects for mouse interaction
#### Border Props
- `round3`, `round4`, `round5`, `round8`: Preset border-radius values
- `border`: Set border style
- `borderRadius`: Set border radius
##### Font Style Classification
###### Heading (for titles)
- **Size**: 26px ~ 34px
- **line-height**: 180%
- **Purpose**: Page titles, section titles, main headings
```typescript
// 34px heading styles
heading34B; // Bold (800)
heading34SB; // SemiBold (700)
heading34M; // Medium (600)
heading34SM; // SemiMedium (500)
heading34R; // Regular (400)
heading34L; // Light (300)
// 32px heading styles
heading32B, heading32SB, heading32M, heading32SM, heading32R, heading32L;
// 30px heading styles
heading30B, heading30SB, heading30M, heading30SM, heading30R, heading30L;
// 28px heading styles
heading28B, heading28SB, heading28M, heading28SM, heading28R, heading28L;
// 26px heading styles
heading26B, heading26SB, heading26M, heading26SM, heading26R, heading26L;
```
###### Text (for body content)
- **Size**: 8px ~ 24px
- **line-height**: 160%
- **Purpose**: Body text, button text, description text
```typescript
// 24px text styles
text24B, text24SB, text24M, text24SM, text24R, text24L;
// 22px text styles
text22B, text22SB, text22M, text22SM, text22R, text22L;
// 20px text styles
text20B, text20SB, text20M, text20SM, text20R, text20L;
// 18px text styles
text18B, text18SB, text18M, text18SM, text18R, text18L;
// 16px text styles (default body)
text16B, text16SB, text16M, text16SM, text16R, text16L;
// 14px text styles
text14B, text14SB, text14M, text14SM, text14R, text14L;
// 12px text styles
text12B, text12SB, text12M, text12SM, text12R, text12L;
// 10px text styles
text10B, text10SB, text10M, text10SM, text10R, text10L;
// 8px text styles
text8B, text8SB, text8M, text8SM, text8R, text8L;
```
##### Font Weight
Each size provides 6 different weights:
- **B (Bold)**: 800 - Boldest text, for emphasis
- **SB (SemiBold)**: 700 - Bold text, for subtitles
- **M (Medium)**: 600 - Medium weight, for emphasized text
- **SM (SemiMedium)**: 500 - Slightly bold text
- **R (Regular)**: 400 - Default weight, for body text
- **L (Light)**: 300 - Light text, for additional information
#### Other Props
- `none`: Set display: none
- `jc`: Set justify-content: center with display: flex
- `ac`: Set align-items: center with display: flex
- `mr0mlAuto`: Set margin-right: 0; margin-left: auto;
- `ml0mrAuto`: Set margin-left: 0; margin-right: auto;
**More props are available. See [github: react-style-props ...types/index.d.ts](https://github.com/yeonpm/react-style-props/blob/main/src/style/configs/types/index.d.ts)**
## License
MIT