Evento disponibilizado pela RocketSeat
Projeto desenvolvido durante a semana de 10/10/2022 a 13/11/2022, onde pude ter contato com várias ferramentas para a construção de um Design System como, Figma, React, StoryBook e TailwindCSS.
- Projeto no Figma
- Design System - Criação dos componentes
- Documentação no Storybook
- Deploy automatizado com GitHub Actions
- Criação do Front-End em Vite
- Implementação de testes com Jest no Storybook.
Durante as aulas, pude conhecer como montar uma estrutura visual de um design system na prática com o Figma e como porta-lo para o código disponibilizando assim os dados para testes dos componentes via StoryBook, deploy automatizado com GitHub Actions e simulação do Front-End em Vite.
https://www.figma.com/file/2ws9TBu6IweT00RnFdCo6a/Ignite-Lab-Design-System?node-id=14%3A162
Aqui eu inicio o meu repositório no git
git init
npm create vite@latest
{
"name": "lab-ds",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"storybook": "start-storybook -p 6006"
},
"dependencies": {
"@radix-ui/react-checkbox": "^1.0.0",
"@radix-ui/react-slot": "^1.0.0",
"clsx": "^1.2.1",
"phosphor-react": "^1.4.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@babel/core": "^7.19.3",
"@types/react": "^18.0.17",
"@types/react-dom": "^18.0.6",
"@vitejs/plugin-react": "^2.1.0",
"autoprefixer": "^10.4.12",
"babel-loader": "^8.2.5",
"postcss": "^8.4.17",
"typescript": "^4.6.4",
"vite": "^3.1.0"
}
}
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
- src/App.css
- src/index.css
- src/assets/react.svg
- App.tsx
- main.tsx
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
{
"name": "lab-ds",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@babel/core": "^7.19.3",
"@types/react": "^18.0.17",
"@types/react-dom": "^18.0.6",
"@vitejs/plugin-react": "^2.1.0",
"autoprefixer": "^10.4.12",
"babel-loader": "^8.2.5",
"postcss": "^8.4.17",
"tailwindcss": "^3.1.8",
"typescript": "^4.6.4",
"vite": "^3.1.0"
}
}
@tailwind base;
@tailwind components;
@tailwind utilities;
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./src/**/*.tsx',
],
theme: {
fontSize: {
'xs': 14,
'sm': 16,
'md': 18,
'lg': 20,
'xl': 24,
'2xl': 32,
},
colors: {
black: '#000',
white: '#fff',
transparent: 'transparent',
gray: {
900: '#121214',
800: '#202024',
400: '#7c7c8a',
200: '#c4c4cc',
100: '#e1e1e6',
},
cyan:{
500: '#81d8f7',
300: '#98e1fb',
}
},
extend: {
fontFamily: {
sans: ['Inter', 'sans-serif'],
}
},
},
plugins: [],
}
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet" />
<title>Ignite Lab Design System</title>
</head>
<body>
<div id="root"></div>
npm install --save clsx
npm install @radix-ui/react-slot
npm i phosphor-react
npm install @radix-ui/react-checkbox
- Heading.tsx
- Text.tsx
- Button.tsx
- TextInput.tsx
- Checkbox.tsx
npm i @storybook/storybook-deployer --save-dev
npx sb init --builder @storybook/builder-vite --use-npm
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Storybook
storybook-static
import { addons } from '@storybook/addons'
import { themes } from '@storybook/theming'
addons.setConfig({
theme: themes.dark,
})
import { themes } from '@storybook/theming';
import '../src/styles/global.css';
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
docs: {
theme: themes.dark,
},
}
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-vite"
},
"features": {
"storyStoreV7": true
},
viteFinal: (config, { configType }) => {
if (configType === 'PRODUCTION') {
config.base = '/rocketseat-ignite-lab-design-system/'
}
return config
},
}
{
"name": "lab-ds",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"storybook": "start-storybook -p 6006",
"build-storybook": "build-storybook"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@babel/core": "^7.19.3",
"@storybook/addon-actions": "^6.5.12",
"@storybook/addon-essentials": "^6.5.12",
"@storybook/addon-interactions": "^6.5.12",
"@storybook/addon-links": "^6.5.12",
"@storybook/builder-vite": "^0.2.4",
"@storybook/react": "^6.5.12",
"@storybook/testing-library": "^0.0.13",
"@types/react": "^18.0.17",
"@types/react-dom": "^18.0.6",
"@vitejs/plugin-react": "^2.1.0",
"autoprefixer": "^10.4.12",
"babel-loader": "^8.2.5",
"postcss": "^8.4.17",
"tailwindcss": "^3.1.8",
"typescript": "^4.6.4",
"vite": "^3.1.0"
}
}
- Heading.stories.tsx
- Text.stories.tsx
- Button.stories.tsx
- TextInput.stories.tsx
- Checkbox.stories.tsx
git clone https://github.com/claudneysessa/rocketseat-ignite-lab-design-system
# Instalar as Dependências
$ npm i
# Iniciar o Servidor em Modo de Desenvolvimento
$ npm run dev
# Iniciar o StoryBook
$ npm run storybook
Link
npm i @storybook/addon-a11y --dev
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/addon-a11y"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-vite"
},
"features": {
"storyStoreV7": true
},
viteFinal: (config, { configType }) => {
if (configType === 'PRODUCTION') {
config.base = '/rocketseat-ignite-lab-design-system/'
}
return config
},
}
Aqui vai o exemplo da tela de login criada com os componentes publicados no StoryBook
Link
Links
npm i @storybook/addon-interactions @storybook/jest @storybook/testing-library @storybook/test-runner --dev
Dependencias adicionadas
- @storybook/addon-interactions
- @storybook/jest
- @storybook/testing-library
- @storybook/test-runner
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/addon-a11y"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-vite"
},
"features": {
"storyStoreV7": true,
"interactionsDebugger": true
},
viteFinal: (config, { configType }) => {
if (configType === 'PRODUCTION') {
config.base = '/rocketseat-ignite-lab-design-system/'
}
return config
},
}
npm i axios
npm i msw --save-dev
npm i msw-storybook-addon --save-dev
npx msw init public/
```cjs
module.exports = {
"stories": [
"../src/**/*.stories.mdx",
"../src/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@storybook/addon-a11y"
],
"framework": "@storybook/react",
"core": {
"builder": "@storybook/builder-vite"
},
"features": {
"storyStoreV7": true,
"interactionsDebugger": true
},
"staticDirs": [
"../public"
],
viteFinal: (config, { configType }) => {
if (configType === 'PRODUCTION') {
config.base = '/rocketseat-ignite-lab-design-system/'
}
return config
},
}
import { initialize, mswDecorator } from 'msw-storybook-addon';
// Initialize MSW
initialize();
// Provide the MSW addon decorator globally
export const decorators = [mswDecorator];
- Instagram: https://www.instagram.com/claudneysessa/
- Linkedin: https://www.linkedin.com/in/claudneysessa/