
Pastel UI
ํ์คํ
UI๋ ์นด์นด์ค์คํ์ผ ํํธ๋์ผํฐ ๋์์ธ ์์คํ
์ ์ํ ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
์ฌ์ฉ
ํ๋ก์ ํธ์ @croquiscom/pastel-ui๊ณผ peer dependencies๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
npm install --save @croquiscom/pastel-ui @emotion/react @emotion/styled react react-dom
import React from 'react'
import { value color, value text_styles, value HStack } from '@croquiscom/pastel-ui';
import styled from '@emotion/styled';
export default function Test() {
return (
<HStack spacing={10}>
<BaseText variant='Heading_24_Bold' color={colors.gray900}>Hello</BaseText>
<StyledText>Pastel UI</StyledText>
</HStack>
);
}
const StyledText = styled.p`
${text_styles.Body_14_SemiBold};
color: ${colors.gray600};
`;
๊ฐ๋ฐ
์๊ตฌ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ
Node.js v14+, Yarn v1.22+
๋ก์ปฌ์ ํด๋ก ๋ ๋ ํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ์ฌ, node_modules๋ฅผ ์ค์นํฉ๋๋ค.
yarn
์คํ ๋ฆฌ๋ถ์ ํตํด ํ์ธํ๊ธฐ ์ํด์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค. (๋ธ๋ผ์ฐ์ ์์ http://localhost:6006/ ๋ก ์ด๋ํ์ธ์.)
yarn storybook
๊ตฌ์กฐ
โโโ assets
โ โโโ icons
โโโ src
โ โโโ [COMPONENT]
โ โ โโโ index.ts
โ โ โโโ [COMPONENT].tsx
โ โ โโโ [COMPONENT].stories.mdx
โ โ โโโ types.ts
โ โ โโโ styles.ts
โ โโโ icons
โ โ โโโ generated
โ โ โโโ Icon.stories.tsx
โ โ โโโ Icon.stories.mdx
โ โโโ global_styles
โ โโโ themes
โ โโโ styles
โ โโโ hooks
โ โโโ stories
โ โโโ types
โ โโโ index.ts
โโโ tools
โโโ svgr-component-template.js
โโโ svgr-index-template.js
- [COMPONENT]: ์ปดํฌ๋ํธ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ์๋ฌธ์, ๊ตฌ๋ถ์๋ -๋ก (eg. toggle-switch) ์์ฑํฉ๋๋ค. ํ์์๋ ๊ด๋ จ ์ปดํฌ๋ํธ ํ์ผ๊ณผ ํด๋น ์ปดํฌ๋ํธ์ ์คํ ๋ฆฌ๋ถ(
*.stories.tsx) ํ์ผ์ ํฌํจํฉ๋๋ค.
styles.ts, types.ts๊ณผ ๊ฐ์ ํ์ผ์ ํฌํจํ ์ ์์ต๋๋ค.
- ์ปดํฌ๋ํธ๋ Named Exports ํฉ๋๋ค.
- ๊ฐ ์ปดํฌ๋ํธ ๋๋ ํ ๋ฆฌ์ src ํ์์
index.ts๋ฅผ ํตํด export ํฉ๋๋ค.
- global_styles: ๋ฆฌ์
์คํ์ผ์ ํฌํจํ ๊ธ๋ก๋ฒ ์คํ์ผ์ ํฌํจํฉ๋๋ค.
- ๋ฆฌ์
์คํ์ผ์ ์ํ class ๋ค์์ prefix๋ก
pastel-ui-๋ฅผ ๋ถ์ฌ์ค๋๋ค.
- themes: color, typography์ ๊ฐ์ theme๊ณผ ๊ด๋ จ๋ ์คํ์ผ, ์คํ์ผ ํ ํฐ์ ํฌํจํฉ๋๋ค.
- styles: ์ปดํฌ๋ํธ์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ ์คํ์ผ, ์คํ์ผ ํจ์๋ฅผ ํฌํจํฉ๋๋ค.
- hooks: ์ปค์คํ
ํ
์ ํฌํจํฉ๋๋ค.
- stories: ์คํ ๋ฆฌ๋ถ์ฉ ์ปดํฌ๋ํธ๋ ์คํ์ผ, ์ปดํฌ๋ํธ ์ธ์ ์คํ ๋ฆฌ๋ถ ๋ฌธ์
- assets: svg ๋ฑ์ ์์
์ ํฌํจํฉ๋๋ค.
- tools: svgr template ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์์ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํฉ๋๋ค.
์์ด์ฝ ์ถ๊ฐ
โ ๏ธ SVGR์ ํตํด svgํ์ผ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ก ์ ๋ค๋ ์ดํธํฉ๋๋ค. src/icons/generated ํ์์์ ์ง์ ์์ ํ์ง ๋ง์์ฃผ์ธ์!
assets/icons์ svg๋ฅผ ์ถ๊ฐํฉ๋๋ค.
yarn svgr์ ์คํํฉ๋๋ค.
src/icons/generated ํ์์ ์ ๋ค๋ ์ดํธ๋ ์์ด์ฝ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ src/icons/generated/index.ts์ ํด๋น ์ปดํฌ๋ํธ์ export๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํฉ๋๋ค.
yarn storybook์ ์คํํ์ฌ ์คํ ๋ฆฌ๋ถ ๋ด์์ Icon/Icons ๋ฉ๋ด๋ก ์ด๋ํ์ฌ ๋ชฉ๋ก์์ ํด๋น ์์ด์ฝ์ด ์ ์ถ๊ฐ๋์๋์ง ํ์
๋๋ค.
PR
- main์ base ๋ธ๋์น๋ก ํ ์์
๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ฐฐํฌ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ changeset์ ํตํด ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. PR ์์ฑ์ changeset README.md ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์ผ์ ์์ฑํด์ฃผ์ธ์.
- PR ๋ฐ ๋ง์คํฐ ๋จธ์ง ์์ chromatic์ผ๋ก ์๋ ๋ฐฐํฌ๋ฉ๋๋ค.
๋ฐฐํฌ
Github Action์ ํตํด ์๋์ผ๋ก ๋ฐฐํฌํ๊ณ ์์ต๋๋ค.
changeset ํ์ผ์ ํฌํจํ PR์ด main์ ๋จธ์ง๋๋ฉด, Github Action ์ํฌํ๋ก์ฐ๊ฐ ๋์๋๋ฉฐ, ๋ฒ์ ๋ฐฐํฌ๋ฅผ ์ํ Version Packages PR์ด ์์ฑ๋ฉ๋๋ค.
ํด๋น PR์ ๋จธ์งํ๊ฒ ๋๋ฉด Github Action์ ์ํฌํ๋ก์ฐ๊ฐ ๋์๋๋ฉฐ ํจํค์ง๊ฐ ๋ฐฐํฌ๋ฉ๋๋ค.
Github Action์ ํตํ ๋ฐฐํฌ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
npm ๊ถํ์ด ํ์ํฉ๋๋ค. npm์ ๊ฐ์
ํ ๊ถํ์ ์์ฒญํด์ฃผ์ธ์.
- Version Packages PR์ด ์์ฑ๋์ง ์์์ ๊ฒฝ์ฐ, ๋ค์์ ์ํํด changelog์ package.json์ version bump๋ฅผ ํฌํจํ ์์
PR์ ์์ฑํฉ๋๋ค.
yarn changeset version
git commit -m "chore: version bump"
- Version Packages PR์ด ์์ฑ๋์์ ๊ฒฝ์ฐ ํด๋น PR์ ๋จธ์งํ๊ณ main์ ์ต์ ์ํ๋ก PULL ๋ฐ์์ฃผ์ธ์.
yarn release