From f22ab7e4856aca2f81c1defe26c45309a950ed97 Mon Sep 17 00:00:00 2001 From: DingX2 Date: Wed, 8 May 2024 23:15:49 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20sidebar=20=EA=B8=B0=EC=B4=88=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 1 + .eslintrc | 3 +- .prettierignore | 3 +- bun.lockb | Bin 219403 -> 223894 bytes index.html | 2 +- package.json | 11 +++++-- src/App.tsx | 29 ------------------- src/Layout.tsx | 11 +++++++ src/Router.tsx | 17 +++++++++++ src/assets/home.svg | 3 ++ src/components/atoms/Box.ts | 7 +++++ src/components/atoms/Button.ts | 15 +++++++++- src/components/atoms/Image.ts | 16 ++++++++++ src/components/atoms/Logo.tsx | 13 +++++++++ src/components/atoms/Menu.ts | 20 +++++++++++++ src/components/atoms/Stack.ts | 26 +++++++++++++++++ src/components/atoms/Text.ts | 11 +++++++ src/components/atoms/index.ts | 6 ++++ src/components/molecules/index.ts | 0 src/components/organisms/Sidebar.tsx | 16 ++++++++++ src/components/organisms/index.ts | 1 + src/components/templates/AboutTemplate.tsx | 5 ++++ src/components/templates/ContactTemplate.tsx | 5 ++++ src/components/templates/HomeTemplate.tsx | 5 ++++ src/components/templates/SkillTemplate.tsx | 5 ++++ src/components/templates/WorkTemplate.tsx | 5 ++++ src/components/templates/index.ts | 5 ++++ src/constants/index.ts | 1 + src/constants/{Query.ts => query.ts} | 0 src/index.tsx | 7 ++--- src/pages/About.tsx | 6 ++++ src/pages/Contact.tsx | 6 ++++ src/pages/Home.tsx | 6 ++++ src/pages/NotFound.tsx | 5 ++++ src/pages/Skill.tsx | 6 ++++ src/pages/Work.tsx | 6 ++++ src/pages/index.ts | 6 ++++ src/types/index.ts | 1 + src/types/style.ts | 3 ++ tsconfig.json | 3 +- vite.config.ts | 3 +- 41 files changed, 259 insertions(+), 41 deletions(-) delete mode 100644 src/App.tsx create mode 100644 src/Layout.tsx create mode 100644 src/Router.tsx create mode 100644 src/assets/home.svg create mode 100644 src/components/atoms/Box.ts create mode 100644 src/components/atoms/Image.ts create mode 100644 src/components/atoms/Logo.tsx create mode 100644 src/components/atoms/Menu.ts create mode 100644 src/components/atoms/Stack.ts create mode 100644 src/components/atoms/Text.ts create mode 100644 src/components/molecules/index.ts create mode 100644 src/components/organisms/Sidebar.tsx create mode 100644 src/components/organisms/index.ts create mode 100644 src/components/templates/AboutTemplate.tsx create mode 100644 src/components/templates/ContactTemplate.tsx create mode 100644 src/components/templates/HomeTemplate.tsx create mode 100644 src/components/templates/SkillTemplate.tsx create mode 100644 src/components/templates/WorkTemplate.tsx create mode 100644 src/components/templates/index.ts create mode 100644 src/constants/index.ts rename src/constants/{Query.ts => query.ts} (100%) create mode 100644 src/pages/About.tsx create mode 100644 src/pages/Contact.tsx create mode 100644 src/pages/Home.tsx create mode 100644 src/pages/NotFound.tsx create mode 100644 src/pages/Skill.tsx create mode 100644 src/pages/Work.tsx create mode 100644 src/pages/index.ts create mode 100644 src/types/index.ts create mode 100644 src/types/style.ts diff --git a/.eslintignore b/.eslintignore index 2094342..863ba72 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ bun.lockb .eslintrc .github dist +vite.config.ts diff --git a/.eslintrc b/.eslintrc index 57232dd..35598a1 100644 --- a/.eslintrc +++ b/.eslintrc @@ -69,7 +69,8 @@ "js": "never", "jsx": "never", "ts": "never", - "tsx": "never" + "tsx": "never", + "json": "never" } ], "no-restricted-imports": [ diff --git a/.prettierignore b/.prettierignore index 124813e..863ba72 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,4 +3,5 @@ node_modules bun.lockb .eslintrc .github -dist \ No newline at end of file +dist +vite.config.ts diff --git a/bun.lockb b/bun.lockb index 99f2f5b5f948e08e5998d8a7de4699197faf07d1..255a8abdd0121752c0bd0855cd98326999324735 100755 GIT binary patch delta 46266 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 - + diff --git a/package.json b/package.json index d306cae..3d6d748 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,22 @@ "type-check:watch": "tsc --noEmit --watch" }, "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.0", + "@solidjs/router": "^0.13.3", "@tanstack/solid-query": "^5.35.1", - "@tanstack/solid-query-devtools": "^5.35.1", "framer-motion": "^11.1.8", "ky": "^1.2.4", + "normalize.css": "^8.0.1", + "solid-fontawesome": "^0.2.1", "solid-js": "^1.8.15", "solid-styled-components": "^0.28.5" }, "devDependencies": { "@commitlint/config-conventional": "^19.2.2", "@eslint/js": "^9.1.1", + "@tanstack/solid-query-devtools": "^5.35.1", "commitlint": "^19.3.0", "eslint": "^8.56.0", "eslint-config-airbnb": "^19.0.4", @@ -43,7 +49,8 @@ "vite": "^5.2.0", "vite-plugin-babel": "^1.2.0", "vite-plugin-eslint": "^1.8.1", - "vite-plugin-solid": "^2.10.2" + "vite-plugin-solid": "^2.10.2", + "vite-tsconfig-paths": "^4.3.2" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index 95d6cc5..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { type Component, createSignal } from 'solid-js'; -import { styled } from 'solid-styled-components'; -import { Button } from './components/atoms'; -import solidLogo from './assets/solid.svg'; - -const Box = styled.div``; - -export const App: Component = () => { - const [count, setCount] = createSignal(0); - - return ( - <> - - Vite + Solid - -
- -

- Edit src/App.tsx and save to test HMR -

-
-

Click on the Vite and Solid logos to learn more

- - ); -}; diff --git a/src/Layout.tsx b/src/Layout.tsx new file mode 100644 index 0000000..40c6cdf --- /dev/null +++ b/src/Layout.tsx @@ -0,0 +1,11 @@ +import type { ParentComponent } from 'solid-js'; +import { Sidebar } from '@/components/organisms'; + +export const Layout: ParentComponent = ({ children }) => { + return ( + <> + + {children} + + ); +}; diff --git a/src/Router.tsx b/src/Router.tsx new file mode 100644 index 0000000..17e6691 --- /dev/null +++ b/src/Router.tsx @@ -0,0 +1,17 @@ +import type { VoidComponent } from 'solid-js'; +import { Router as SolidRouter, Route } from '@solidjs/router'; +import { Home, NotFound, About, Skill, Work, Contact } from '@/pages'; +import { Layout } from './Layout'; + +export const Router: VoidComponent = () => { + return ( + + + + + + + + + ); +}; diff --git a/src/assets/home.svg b/src/assets/home.svg new file mode 100644 index 0000000..23cc09f --- /dev/null +++ b/src/assets/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/atoms/Box.ts b/src/components/atoms/Box.ts new file mode 100644 index 0000000..45b5370 --- /dev/null +++ b/src/components/atoms/Box.ts @@ -0,0 +1,7 @@ +import { styled } from 'solid-styled-components'; + +interface Props { + width?: string; +} + +export const Box = styled.div``; diff --git a/src/components/atoms/Button.ts b/src/components/atoms/Button.ts index 0a2e47a..27068fb 100644 --- a/src/components/atoms/Button.ts +++ b/src/components/atoms/Button.ts @@ -1,3 +1,16 @@ import { styled } from 'solid-styled-components'; -export const Button = styled.button``; +interface Props { + backgroundColor?: string; + color?: string; + size?: number; + fontSize?: number; +} + +export const Button = styled.button` + color: #000; + background: ${({ backgroundColor }) => backgroundColor || '#FF0000'} + padding: 0.5rem 1rem; + border-radius: 5px; + font-size: ${({ fontSize }) => fontSize}; +`; diff --git a/src/components/atoms/Image.ts b/src/components/atoms/Image.ts new file mode 100644 index 0000000..1a3570b --- /dev/null +++ b/src/components/atoms/Image.ts @@ -0,0 +1,16 @@ +import { styled } from 'solid-styled-components'; + +interface Props { + width?: string | number; + height?: string | number; +} + +/** + * Image component. + * @param {string | number} width - Image width. + * @param {string | number} height - Image height. + */ +export const Image = styled.img` + width: ${({ width = '100%' }) => (typeof width === 'number' ? `${width}px` : width)}; + height: ${({ height = 'auto' }) => (typeof height === 'number' ? `${height}px` : height)}; +`; diff --git a/src/components/atoms/Logo.tsx b/src/components/atoms/Logo.tsx new file mode 100644 index 0000000..019d645 --- /dev/null +++ b/src/components/atoms/Logo.tsx @@ -0,0 +1,13 @@ +import type { Component } from 'solid-js'; +import home from '@/assets/home.svg'; +import { name } from '@/package'; +import { Image } from './Image'; + +interface Props { + width?: string | number; + height?: string | number; +} + +export const Logo: Component = ({ width = 120, height = 30 }) => { + return {name}; +}; diff --git a/src/components/atoms/Menu.ts b/src/components/atoms/Menu.ts new file mode 100644 index 0000000..fd743a8 --- /dev/null +++ b/src/components/atoms/Menu.ts @@ -0,0 +1,20 @@ +import { styled } from 'solid-styled-components'; + +interface Props { + href?: string; +} + +export const Menu = styled.a` + display: flex; + justify-content: center; + flex-direction: row; + padding: 0.5rem 1rem; + color: black; + &:hover { + color: #a0f; + background-color: #f0f; + transition: + color 0.5s, + background-color 0.5s; + } +`; diff --git a/src/components/atoms/Stack.ts b/src/components/atoms/Stack.ts new file mode 100644 index 0000000..e753f65 --- /dev/null +++ b/src/components/atoms/Stack.ts @@ -0,0 +1,26 @@ +import type { ParentProps } from 'solid-js'; +import { styled } from 'solid-styled-components'; +import type { Style } from '@/types'; + +interface Props extends Style, ParentProps { + direction?: 'column-reverse' | 'column' | 'row-reverse' | 'row'; + spacing?: number | string; + useFlexGap?: boolean; +} +/** + * Stack 컴포넌트는 자식 요소를 상하 또는 좌우로 나열하는 레이아웃을 구현할 때 사용하는 컴포넌트입니다. + * + * @param {Props} props - Stack 컴포넌트에서 사용되는 Props입니다. + * @param {ParentProps} [props.children] - Stack에 포함될 자식 요소입니다. + * @param {'column-reverse' | 'column' | 'row-reverse' | 'row'} [props.direction='column'] - Stack 내 자식 요소들의 나열 방향입니다. + * @param {number | string} [props.spacing=0] - Stack 내 자식 요소들 간의 간격입니다. + * @param {boolean} [props.useFlexGap=false] - CSS flexbox 속성인 gap을 사용할지 여부입니다. + * @returns {JSX.Element} Stack 컴포넌트의 JSX.Element를 반환합니다. + */ +export const Stack = styled.div` + display: flex; + width: 100%; + flex-direction: ${(props) => props.direction || 'column'}; + ${(props) => (props.useFlexGap ? `gap: ${props.spacing || 0}px; ` : `margin-top: ${props.spacing || 0}px;`)} + ${({ sx }) => sx} +`; diff --git a/src/components/atoms/Text.ts b/src/components/atoms/Text.ts new file mode 100644 index 0000000..4be9e91 --- /dev/null +++ b/src/components/atoms/Text.ts @@ -0,0 +1,11 @@ +import { styled } from 'solid-styled-components'; + +interface Props { + color?: string; + fontSize?: string; +} + +export const Text = styled.span` + color: ${({ color }) => color || 'black'}; + font-size: ${({ fontSize }) => fontSize || '16px'}; +`; diff --git a/src/components/atoms/index.ts b/src/components/atoms/index.ts index 8b166a8..5268518 100644 --- a/src/components/atoms/index.ts +++ b/src/components/atoms/index.ts @@ -1 +1,7 @@ export * from './Button'; +export * from './Text'; +export * from './Menu'; +export * from './Box'; +export * from './Logo'; +export * from './Image'; +export * from './Stack'; diff --git a/src/components/molecules/index.ts b/src/components/molecules/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/components/organisms/Sidebar.tsx b/src/components/organisms/Sidebar.tsx new file mode 100644 index 0000000..db90420 --- /dev/null +++ b/src/components/organisms/Sidebar.tsx @@ -0,0 +1,16 @@ +import type { Component } from 'solid-js'; +import { Menu, Logo, Stack } from '@/components/atoms'; + +export const Sidebar: Component = () => { + return ( + + + + About + Skill + Work + Contact + + + ); +}; diff --git a/src/components/organisms/index.ts b/src/components/organisms/index.ts new file mode 100644 index 0000000..c167c49 --- /dev/null +++ b/src/components/organisms/index.ts @@ -0,0 +1 @@ +export * from './Sidebar'; diff --git a/src/components/templates/AboutTemplate.tsx b/src/components/templates/AboutTemplate.tsx new file mode 100644 index 0000000..f1c0de5 --- /dev/null +++ b/src/components/templates/AboutTemplate.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const AboutTemplate: Component = () => { + return
Home
; +}; diff --git a/src/components/templates/ContactTemplate.tsx b/src/components/templates/ContactTemplate.tsx new file mode 100644 index 0000000..12ef3ba --- /dev/null +++ b/src/components/templates/ContactTemplate.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const ContactTemplate: Component = () => { + return
ContactTemplate
; +}; diff --git a/src/components/templates/HomeTemplate.tsx b/src/components/templates/HomeTemplate.tsx new file mode 100644 index 0000000..d70db9d --- /dev/null +++ b/src/components/templates/HomeTemplate.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const HomeTemplate: Component = () => { + return
HomeTemplate
; +}; diff --git a/src/components/templates/SkillTemplate.tsx b/src/components/templates/SkillTemplate.tsx new file mode 100644 index 0000000..4dfec07 --- /dev/null +++ b/src/components/templates/SkillTemplate.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const SkillTemplate: Component = () => { + return
SkillTemplate
; +}; diff --git a/src/components/templates/WorkTemplate.tsx b/src/components/templates/WorkTemplate.tsx new file mode 100644 index 0000000..d6d101a --- /dev/null +++ b/src/components/templates/WorkTemplate.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const WorkTemplate: Component = () => { + return
WorkTemplate
; +}; diff --git a/src/components/templates/index.ts b/src/components/templates/index.ts new file mode 100644 index 0000000..afc77cc --- /dev/null +++ b/src/components/templates/index.ts @@ -0,0 +1,5 @@ +export * from './HomeTemplate'; +export * from './AboutTemplate'; +export * from './SkillTemplate'; +export * from './WorkTemplate'; +export * from './ContactTemplate'; diff --git a/src/constants/index.ts b/src/constants/index.ts new file mode 100644 index 0000000..a38910e --- /dev/null +++ b/src/constants/index.ts @@ -0,0 +1 @@ +export * from './query'; diff --git a/src/constants/Query.ts b/src/constants/query.ts similarity index 100% rename from src/constants/Query.ts rename to src/constants/query.ts diff --git a/src/index.tsx b/src/index.tsx index a08e7b5..1bc812b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,6 +1,5 @@ import { render } from 'solid-js/web'; -import { App } from './App'; +import { Router } from './Router'; +import 'normalize.css'; -const root = document.getElementById('root'); - -render(() => , root!); +render(() => , document.getElementById('root')!); diff --git a/src/pages/About.tsx b/src/pages/About.tsx new file mode 100644 index 0000000..d58e076 --- /dev/null +++ b/src/pages/About.tsx @@ -0,0 +1,6 @@ +import type { Component } from 'solid-js'; +import { AboutTemplate } from '@/components/templates'; + +export const About: Component = () => { + return ; +}; diff --git a/src/pages/Contact.tsx b/src/pages/Contact.tsx new file mode 100644 index 0000000..5b25fb6 --- /dev/null +++ b/src/pages/Contact.tsx @@ -0,0 +1,6 @@ +import type { Component } from 'solid-js'; +import { ContactTemplate } from '@/components/templates'; + +export const Contact: Component = () => { + return ; +}; diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 0000000..06b4842 --- /dev/null +++ b/src/pages/Home.tsx @@ -0,0 +1,6 @@ +import type { Component } from 'solid-js'; +import { HomeTemplate } from '@/components/templates'; + +export const Home: Component = () => { + return ; +}; diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx new file mode 100644 index 0000000..0f34825 --- /dev/null +++ b/src/pages/NotFound.tsx @@ -0,0 +1,5 @@ +import type { Component } from 'solid-js'; + +export const NotFound: Component = () => { + return
NotFound
; +}; diff --git a/src/pages/Skill.tsx b/src/pages/Skill.tsx new file mode 100644 index 0000000..71d8285 --- /dev/null +++ b/src/pages/Skill.tsx @@ -0,0 +1,6 @@ +import type { Component } from 'solid-js'; +import { SkillTemplate } from '@/components/templates'; + +export const Skill: Component = () => { + return ; +}; diff --git a/src/pages/Work.tsx b/src/pages/Work.tsx new file mode 100644 index 0000000..6572a20 --- /dev/null +++ b/src/pages/Work.tsx @@ -0,0 +1,6 @@ +import type { Component } from 'solid-js'; +import { WorkTemplate } from '@/components/templates'; + +export const Work: Component = () => { + return ; +}; diff --git a/src/pages/index.ts b/src/pages/index.ts new file mode 100644 index 0000000..77bf7ed --- /dev/null +++ b/src/pages/index.ts @@ -0,0 +1,6 @@ +export * from './Home'; +export * from './About'; +export * from './Skill'; +export * from './Work'; +export * from './Contact'; +export * from './NotFound'; diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..54fcd80 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1 @@ +export * from './style'; diff --git a/src/types/style.ts b/src/types/style.ts new file mode 100644 index 0000000..ea83ced --- /dev/null +++ b/src/types/style.ts @@ -0,0 +1,3 @@ +export interface Style { + sx?: string; +} diff --git a/tsconfig.json b/tsconfig.json index 92fff62..9f02ad1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,8 @@ "allowJs": false, "baseUrl": ".", "paths": { - "@/*": ["./*"] + "@/*": ["src/*"], + "@/package": ["package.json"] }, /* Bundler mode */ diff --git a/vite.config.ts b/vite.config.ts index ee871a8..da018b0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'vite'; import solid from 'vite-plugin-solid'; +import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ - plugins: [solid()], + plugins: [solid(), tsconfigPaths()], });