diff --git a/.prettierrc b/.prettierrc index 79d3218..7eb5bce 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,6 +1,6 @@ { "singleQuote": true, - "semi": false, + "semi": true, "tabWidth": 2, "trailingComma": "all" } diff --git a/package.json b/package.json index 1221581..615a685 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "vite build", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "format": "prettier --write ./src" }, "dependencies": { "axios": "^1.7.4", diff --git a/src/App.jsx b/src/App.jsx index 94916ce..c80710c 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -3,40 +3,49 @@ // padding 같은 추가적인 작업이 없다면 내용이 내비바보다 더 높은 위치에서부터 표시되어 일부 내용이 보이지 않습니다. // 내비바의 높이는 60px입니다. -import { Routes, Route } from "react-router-dom"; +import { Routes, Route } from 'react-router-dom'; -import { GlobalStyle } from "./styles/global"; -import { MainLayout } from "./components/layouts/MainLayout"; -import "./styles/font.css"; +import { GlobalStyle } from './styles/global'; +import { MainLayout } from './components/layouts/MainLayout'; +import './styles/font.css'; -import MainPage from "./pages/MainPage"; -import NotFound from "./pages/NotFound"; +import MainPage from './pages/MainPage'; +import NotFound from './pages/NotFound'; -import { DashboardLayout } from "./components/layouts/DashboardLayout"; -import {DashboardAdmin, DashboardHome, DashboardHistory, DashboardExecutive ,DashboardUsers} from "./components/display/dashboard"; -import DevDocument from "./pages/DevDocument"; -import Board from "./pages/Board"; +import { DashboardLayout } from './components/layouts/DashboardLayout'; +import { + DashboardAdmin, + DashboardHome, + DashboardHistory, + DashboardExecutive, + DashboardUsers, +} from './components/display/dashboard'; +import DevDocument from './pages/DevDocument'; +import Board from './pages/Board'; export default function App() { - return ( - <> - - - }> - } /> - } /> - } /> - } /> - }> - } /> - } /> - } /> - } /> - } /> - } /> - - - - - ) + return ( + <> + + + }> + } /> + } /> + } /> + } /> + }> + } /> + } /> + } + /> + } /> + } /> + } /> + + + + + ); } diff --git a/src/components/display/dashboard/Admin.jsx b/src/components/display/dashboard/Admin.jsx index 7f0b164..c8f9514 100644 --- a/src/components/display/dashboard/Admin.jsx +++ b/src/components/display/dashboard/Admin.jsx @@ -1,21 +1,21 @@ -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../../../stores/dashboard"; +import useDashboard from '../../../stores/dashboard'; export default function DashboardAdmin() { - const { moveAdmin } = useDashboard(); + const { moveAdmin } = useDashboard(); - useEffect(() => { - moveAdmin(); - }, []); + useEffect(() => { + moveAdmin(); + }, []); - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); + const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - return ( - <> - {ScrollTestPTag.map(number => ( -

ADMIN {number}

- ))} - - ) -} \ No newline at end of file + return ( + <> + {ScrollTestPTag.map((number) => ( +

ADMIN {number}

+ ))} + + ); +} diff --git a/src/components/display/dashboard/Dashboard.styled.js b/src/components/display/dashboard/Dashboard.styled.js index f85e341..3298939 100644 --- a/src/components/display/dashboard/Dashboard.styled.js +++ b/src/components/display/dashboard/Dashboard.styled.js @@ -1,75 +1,73 @@ -import styled from "styled-components"; +import styled from 'styled-components'; export const RowFlex = styled.div` - display: flex; - flex-direction: row; - gap: ${(props) => props.$gap}; -` + display: flex; + flex-direction: row; + gap: ${(props) => props.$gap}; +`; export const ColumnFlex = styled.div` - display: flex; - flex-direction: column; - gap: ${(props) => props.$gap}; -` + display: flex; + flex-direction: column; + gap: ${(props) => props.$gap}; +`; export const Container = styled.div` - width: ${(props) => { - if (props.$width) { - return props.$width; - } - else { - return "fit-content;"; - } - }}; + width: ${(props) => { + if (props.$width) { + return props.$width; + } else { + return 'fit-content;'; + } + }}; - height: ${(props) => { - if (props.$height) { - return props.$height; - } - else { - return "fit-content"; - } - }}; + height: ${(props) => { + if (props.$height) { + return props.$height; + } else { + return 'fit-content'; + } + }}; - display: flex; - flex-direction: column; - gap: 30px; + display: flex; + flex-direction: column; + gap: 30px; - padding: 30px; - box-sizing: border-box; - border-radius: 20px; + padding: 30px; + box-sizing: border-box; + border-radius: 20px; - border: 1px solid #21272E; -` + border: 1px solid #21272e; +`; export const SectionTitle = styled.h2` - margin: 0px 0px 20px 10px; - font-size: ${(props) => props.$size ?? "25px"}; - font-weight: 800; -` + margin: 0px 0px 20px 10px; + font-size: ${(props) => props.$size ?? '25px'}; + font-weight: 800; +`; export const Title = styled.h3` - margin: 0; - font-size: ${(props) => props.$size ?? "18px"}; - font-weight: ${(props) => props.$weight ?? "normal"}; - color: ${(props) => props.$color ?? "#ffffff"}; -` + margin: 0; + font-size: ${(props) => props.$size ?? '18px'}; + font-weight: ${(props) => props.$weight ?? 'normal'}; + color: ${(props) => props.$color ?? '#ffffff'}; +`; export const Button = styled.button` - transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; - &:hover { - background-color: #ffffff1f - } + &:hover { + background-color: #ffffff1f; + } + + outline: none; + border: none; + + width: ${(props) => props.$width ?? 'fit-content'}; + padding: 12px 20px; - outline: none; - border: none; + background-color: #ffffff10; + font-size: 14px; + font-weight: lighter; - width: ${(props) => props.$width ?? "fit-content"}; - padding: 12px 20px; - - background-color: #ffffff10; - font-size: 14px; - font-weight: lighter; - - border-radius: 100px; -` \ No newline at end of file + border-radius: 100px; +`; diff --git a/src/components/display/dashboard/Executive.jsx b/src/components/display/dashboard/Executive.jsx index 237b66c..3bc2abb 100644 --- a/src/components/display/dashboard/Executive.jsx +++ b/src/components/display/dashboard/Executive.jsx @@ -1,21 +1,21 @@ -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../../../stores/dashboard"; +import useDashboard from '../../../stores/dashboard'; export default function DashboardExecutive() { - const { moveExecutive } = useDashboard(); + const { moveExecutive } = useDashboard(); - useEffect(() => { - moveExecutive(); - }, []); + useEffect(() => { + moveExecutive(); + }, []); - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); + const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - return ( - <> - {ScrollTestPTag.map(number => ( -

EXECUTIVES {number}

- ))} - - ) -} \ No newline at end of file + return ( + <> + {ScrollTestPTag.map((number) => ( +

EXECUTIVES {number}

+ ))} + + ); +} diff --git a/src/components/display/dashboard/History.jsx b/src/components/display/dashboard/History.jsx index 6eda72d..ef4a046 100644 --- a/src/components/display/dashboard/History.jsx +++ b/src/components/display/dashboard/History.jsx @@ -1,21 +1,21 @@ -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../../../stores/dashboard"; +import useDashboard from '../../../stores/dashboard'; export default function DashboardHistory() { - const { moveHistory } = useDashboard(); + const { moveHistory } = useDashboard(); - useEffect(() => { - moveHistory(); - }, []); + useEffect(() => { + moveHistory(); + }, []); - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); + const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - return ( - <> - {ScrollTestPTag.map(number => ( -

HISTORY {number}

- ))} - - ) -} \ No newline at end of file + return ( + <> + {ScrollTestPTag.map((number) => ( +

HISTORY {number}

+ ))} + + ); +} diff --git a/src/components/display/dashboard/Home.jsx b/src/components/display/dashboard/Home.jsx index a92a278..3b56fbe 100644 --- a/src/components/display/dashboard/Home.jsx +++ b/src/components/display/dashboard/Home.jsx @@ -1,129 +1,136 @@ -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../../../stores/dashboard"; -import * as DS from "./Dashboard.styled"; +import useDashboard from '../../../stores/dashboard'; +import * as DS from './Dashboard.styled'; -const HistoryInfo = ({ historyCount=0, yearCount=0 }) => { - return ( - - 연혁 - - - - 전체 연혁 개수 - {historyCount} - - - 연도 개수 - {yearCount} - - - 연혁 추가/제거로 이동 - - - ) -} +const HistoryInfo = ({ historyCount = 0, yearCount = 0 }) => { + return ( + + 연혁 + + + + 전체 연혁 개수 + {historyCount} + + + 연도 개수 + {yearCount} + + + 연혁 추가/제거로 이동 + + + ); +}; -const UsersInfo = ({ userCount=0 }) => { - return ( - - 회원 - - - 전체 회원 수 - {userCount} - - 회원 관리로 이동 - - - ) -} +const UsersInfo = ({ userCount = 0 }) => { + return ( + + 회원 + + + 전체 회원 수 + {userCount} + + 회원 관리로 이동 + + + ); +}; -const ExecutiveInfo = ({ allExecutiveCount=0, currentExecutiveCount=0 }) => { - return ( - - 임원진 - - - - 역대 임원진 수 - {allExecutiveCount} - - - 현재 임원진 수 - {currentExecutiveCount} - - - 임원진 추가/제거로 이동 - - - ) -} +const ExecutiveInfo = ({ + allExecutiveCount = 0, + currentExecutiveCount = 0, +}) => { + return ( + + 임원진 + + + + 역대 임원진 수 + {allExecutiveCount} + + + 현재 임원진 수 + {currentExecutiveCount} + + + 임원진 추가/제거로 이동 + + + ); +}; -const AdminInfo = ({ AdminCount=0 }) => { - return ( - - 관리자 - - - 등록된 관리자 수 - {AdminCount} - - 관리자 추가/제거로 이동 - - - ) -} +const AdminInfo = ({ AdminCount = 0 }) => { + return ( + + 관리자 + + + 등록된 관리자 수 + {AdminCount} + + 관리자 추가/제거로 이동 + + + ); +}; -const PostInfo = ({ allPostCount=0, monthPostCount=0 }) => { - return ( - - 소식지 - - - - - 전체 기간 - 게시한 소식지 수 - - {allPostCount} - - - - 지난 28일 - 게시한 소식지 수 - - {monthPostCount} - - +const PostInfo = ({ allPostCount = 0, monthPostCount = 0 }) => { + return ( + + 소식지 + + + + + + 전체 기간 + + 게시한 소식지 수 - - ) -} + {allPostCount} + + + + + 지난 28일 + + 게시한 소식지 수 + + {monthPostCount} + + + + + ); +}; export default function DashboardHome() { - const { moveHome } = useDashboard(); + const { moveHome } = useDashboard(); - useEffect(() => { - moveHome(); - }, []); + useEffect(() => { + moveHome(); + }, []); - return ( - - - - - - - - - - - - - - - + return ( + + + + + + - ) -} \ No newline at end of file + + + + + + + + + + ); +} diff --git a/src/components/display/dashboard/Users.jsx b/src/components/display/dashboard/Users.jsx index 1219388..2ab49cb 100644 --- a/src/components/display/dashboard/Users.jsx +++ b/src/components/display/dashboard/Users.jsx @@ -1,21 +1,21 @@ -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../../../stores/dashboard"; +import useDashboard from '../../../stores/dashboard'; export default function DashboardUsers() { - const { moveUsers } = useDashboard(); + const { moveUsers } = useDashboard(); - useEffect(() => { - moveUsers(); - }, []); + useEffect(() => { + moveUsers(); + }, []); - const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); + const ScrollTestPTag = Array.from({ length: 200 }, (_, i) => i + 1); - return ( - <> - {ScrollTestPTag.map(number => ( -

USERS {number}

- ))} - - ) -} \ No newline at end of file + return ( + <> + {ScrollTestPTag.map((number) => ( +

USERS {number}

+ ))} + + ); +} diff --git a/src/components/display/dashboard/index.js b/src/components/display/dashboard/index.js index 6354db8..86784a3 100644 --- a/src/components/display/dashboard/index.js +++ b/src/components/display/dashboard/index.js @@ -1,5 +1,5 @@ -export { default as DashboardAdmin } from './Admin' -export { default as DashboardExecutive } from './Executive' -export { default as DashboardHistory } from './History' -export { default as DashboardHome } from './Home' -export { default as DashboardUsers } from './Users' +export { default as DashboardAdmin } from './Admin'; +export { default as DashboardExecutive } from './Executive'; +export { default as DashboardHistory } from './History'; +export { default as DashboardHome } from './Home'; +export { default as DashboardUsers } from './Users'; diff --git a/src/components/forms/Button.jsx b/src/components/forms/Button.jsx index 075fda6..91bd491 100644 --- a/src/components/forms/Button.jsx +++ b/src/components/forms/Button.jsx @@ -2,11 +2,10 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import -import styled from "styled-components" +import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import - /** * Flat / Outline / Translucent * 위 버튼들의 부모로 사용되는 요소입니다. @@ -14,136 +13,132 @@ import styled from "styled-components" * @type {styled.button} */ const IButton = styled.button` - position: relative; - cursor: pointer; - overflow: hidden; + position: relative; + cursor: pointer; + overflow: hidden; - width: ${(props) => props.$width ?? "fit-content"}; - height: ${(props) => props.$height ?? "fit-content"}; - padding: 15px 30px; - border-radius: 12px; + width: ${(props) => props.$width ?? 'fit-content'}; + height: ${(props) => props.$height ?? 'fit-content'}; + padding: 15px 30px; + border-radius: 12px; - border: none; - outline: none; - color: ${(props) => { - if (props.$text_color?.startsWith("--")) { - return `var(${props.$text_color});`; - } - else { - return props.$text_color ?? "white"; - } - }}; - font-weight: 700; + border: none; + outline: none; + color: ${(props) => { + if (props.$text_color?.startsWith('--')) { + return `var(${props.$text_color});`; + } else { + return props.$text_color ?? 'white'; + } + }}; + font-weight: 700; - box-sizing: border-box; + box-sizing: border-box; - &:after { - z-index: 10; - position: absolute; - content: ""; - top: 0; left: 0; - width: 100%; - height: 100%; - transition: background-color 0.2s ease-out; - background-color: #ffffff00; - } + &:after { + z-index: 10; + position: absolute; + content: ''; + top: 0; + left: 0; + width: 100%; + height: 100%; + transition: background-color 0.2s ease-out; + background-color: #ffffff00; + } - &:hover:after { - background-color: #ffffff10; - } + &:hover:after { + background-color: #ffffff10; + } - &:active:after { - background-color: #ffffff20; - } -` + &:active:after { + background-color: #ffffff20; + } +`; /** * 플랫 버튼입니다. * @type {styled.button} */ const FlatButton = styled(IButton)` - background-color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--transparent-button-background)"; - } - }}; -` + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--transparent-button-background)'; + } + }}; +`; /** * 라운드 버튼입니다. * @type {styled.button} */ const RoundedButton = styled(IButton)` - border-radius: 1000px; - background-color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-color)"; - } - }}; -` + border-radius: 1000px; + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } + }}; +`; /** * 아웃 라인 버튼입니다. * @type {styled.button} */ const OutlineButton = styled(IButton)` - background-color: transparent; - border: 2px solid ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-color)"; - } - }}; - color: ${(props) => { - if (props.$text_color?.startsWith("--")) { - return `var(${props.$text_color});`; - } - else { - return props.$text_color ?? "var(--primary-color)"; - } + background-color: transparent; + border: 2px solid + ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } }}; -` + color: ${(props) => { + if (props.$text_color?.startsWith('--')) { + return `var(${props.$text_color});`; + } else { + return props.$text_color ?? 'var(--primary-color)'; + } + }}; +`; /** * 아웃 라인 버튼입니다. * @type {styled.button} */ const TranslucentButton = styled(IButton)` - &:before { - z-index: 10; - position: absolute; - content: ""; - top: 0; left: 0; - width: 100%; - height: 100%; - background-color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-text-color)"; - } - }}; - opacity: 0.05; - } - background-color: transparent; - color: ${(props) => { - if (props.$text_color?.startsWith("--")) { - return `var(${props.$text_color});`; - } - else { - return props.$text_color ?? "var(--primary-text-color)"; - } + &:before { + z-index: 10; + position: absolute; + content: ''; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-text-color)'; + } }}; -` + opacity: 0.05; + } + background-color: transparent; + color: ${(props) => { + if (props.$text_color?.startsWith('--')) { + return `var(${props.$text_color});`; + } else { + return props.$text_color ?? 'var(--primary-text-color)'; + } + }}; +`; /** * 폼 작성용 버튼 컴포넌트 @@ -152,18 +147,66 @@ const TranslucentButton = styled(IButton)` * @param {string} height fit-content | 16px | string * @param {any} children 버튼에 표시될 요소 */ -export const Button = ({ type="flat", width, height, color, text_color, onClick, children }) => { - switch (type) { - case "flat": - return {children}; - case "rounded": - return {children}; - case "outline": - return {children}; - case "translucent": - return {children}; - default: - console.warn("[Button.jsx] 알 수 없는 버튼 타입입니다."); - return {children}; - } -} +export const Button = ({ + type = 'flat', + width, + height, + color, + text_color, + onClick, + children, +}) => { + switch (type) { + case 'flat': + return ( + + {children} + + ); + case 'rounded': + return ( + + {children} + + ); + case 'outline': + return ( + + {children} + + ); + case 'translucent': + return ( + + {children} + + ); + default: + console.warn('[Button.jsx] 알 수 없는 버튼 타입입니다.'); + return {children}; + } +}; diff --git a/src/components/forms/Checkbox.jsx b/src/components/forms/Checkbox.jsx index cd3196e..017fc18 100644 --- a/src/components/forms/Checkbox.jsx +++ b/src/components/forms/Checkbox.jsx @@ -2,7 +2,7 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import -import styled from "styled-components"; +import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import import Checkmark from '/icon/checked.svg'; @@ -18,54 +18,55 @@ import Checkmark from '/icon/checked.svg'; * @property {function} onChange */ const ICheckbox = styled.input.attrs((props) => ({ - type: "checkbox", - checked: props.checked, - onChange: props.onChange, + type: 'checkbox', + checked: props.checked, + onChange: props.onChange, }))` - appearance: none; - transition: border 0.2s ease-in-out, background-color 0.2s ease-in-out; - outline: none; - cursor: pointer; + appearance: none; + transition: + border 0.2s ease-in-out, + background-color 0.2s ease-in-out; + outline: none; + cursor: pointer; - padding: 0; - border-radius: 4px; + padding: 0; + border-radius: 4px; - ${(props) => { - switch (props.$size) { - case "s": - return "width: 16px; height: 16px;"; - case "m": - return "width: 20px; height: 20px;"; - case "l": - return "width: 24px; height: 24px;"; - default: - return `width: ${props.$size}; height: ${props.$size};`; - } - }} - - background-color: transparent; - border: 2px solid var(--secondary-text-color); - - &:checked { - background-color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-color)"; - } - }}; - background-image: url(${Checkmark}); - background-size: cover; - border: 2px solid ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-color)"; - } - }}; + ${(props) => { + switch (props.$size) { + case 's': + return 'width: 16px; height: 16px;'; + case 'm': + return 'width: 20px; height: 20px;'; + case 'l': + return 'width: 24px; height: 24px;'; + default: + return `width: ${props.$size}; height: ${props.$size};`; } + }} + + background-color: transparent; + border: 2px solid var(--secondary-text-color); + + &:checked { + background-color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } + }}; + background-image: url(${Checkmark}); + background-size: cover; + border: 2px solid + ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } + }}; + } `; /** @@ -78,8 +79,18 @@ const ICheckbox = styled.input.attrs((props) => ({ * 스타일링된 input[type="checkbox"]를 생성합니다. * @param {ICheckbox} props */ -export const Checkbox = ({ size="m", color="--primary-color", checked, onChange=()=>{} }) => { - return ( - - ) -} \ No newline at end of file +export const Checkbox = ({ + size = 'm', + color = '--primary-color', + checked, + onChange = () => {}, +}) => { + return ( + + ); +}; diff --git a/src/components/forms/Container.jsx b/src/components/forms/Container.jsx index 9e5e364..670981e 100644 --- a/src/components/forms/Container.jsx +++ b/src/components/forms/Container.jsx @@ -1,16 +1,18 @@ -import styled from "styled-components" +import styled from 'styled-components'; /** * props 속성으로 bg_color를 입력 받습니다. 기본 컬러는 #0b1520입니다. */ export const Container = styled.div` - width: fit-content; - height: fit-content; - margin: 20px; - padding: 40px; - border-radius: 30px; - box-sizing: border-box; - - background-color: ${(props) => props.$bg_color ?? "var(--container-primary-background)"}; - border: ${(props) => props.$bg_color ?? "var(--container-border-width)"} solid var(--container-border); -` \ No newline at end of file + width: fit-content; + height: fit-content; + margin: 20px; + padding: 40px; + border-radius: 30px; + box-sizing: border-box; + + background-color: ${(props) => + props.$bg_color ?? 'var(--container-primary-background)'}; + border: ${(props) => props.$bg_color ?? 'var(--container-border-width)'} solid + var(--container-border); +`; diff --git a/src/components/forms/Toggle.jsx b/src/components/forms/Toggle.jsx index ec136c1..d02009e 100644 --- a/src/components/forms/Toggle.jsx +++ b/src/components/forms/Toggle.jsx @@ -18,29 +18,31 @@ import styled from 'styled-components'; */ // IToogle이라는 이름으로 새로운 컴포넌트를 생성합니다. const IToggle = styled.label` - position: relative; - display: inline-block; + position: relative; + display: inline-block; - ${(props) => { - switch (props.$size) { - case "s": - return "width: 40px; height: 20px;"; - case "m": - return "width: 48px; height: 24px;"; - case "l": - return "width: 56px; height: 28px;"; - default: - console.warn("[Toggle.jsx] 정의되지 않은 사이즈입니다. 기본값으로 적용됩니다."); - return `width: 48px; height: 24px;`; - } - }} + ${(props) => { + switch (props.$size) { + case 's': + return 'width: 40px; height: 20px;'; + case 'm': + return 'width: 48px; height: 24px;'; + case 'l': + return 'width: 56px; height: 28px;'; + default: + console.warn( + '[Toggle.jsx] 정의되지 않은 사이즈입니다. 기본값으로 적용됩니다.', + ); + return `width: 48px; height: 24px;`; + } + }} `; // Checkbox를 통해 토글 버튼이 활성화 상태인지 판단합니다. -const Checkbox = styled.input.attrs({ type: "checkbox" })` - opacity: 0; - width: 0; - height: 0; +const Checkbox = styled.input.attrs({ type: 'checkbox' })` + opacity: 0; + width: 0; + height: 0; `; // 토글 버튼 본체 :before가 좌우로 움직이는 동그란 버튼입니다. @@ -54,16 +56,16 @@ const Slider = styled.span` background-color: var(--secondary-text-color); transition: 0.4s ease-out; border-radius: ${(props) => { - switch (props.$size) { - case "s": - return "20px;"; - case "m": - return "24px;"; - case "l": - return "28px;"; - default: - return `24px;`; - } + switch (props.$size) { + case 's': + return '20px;'; + case 'm': + return '24px;'; + case 'l': + return '28px;'; + default: + return `24px;`; + } }}; &:before { @@ -72,17 +74,17 @@ const Slider = styled.span` width: 16px; height: 16px; ${(props) => { - switch (props.$size) { - case "s": - return "width: 12px; height: 12px;"; - case "m": - return "width: 16px; height: 16px;"; - case "l": - return "width: 20px; height: 20px;"; - default: - return `width: 48px; height: 24px;`; - } - }} + switch (props.$size) { + case 's': + return 'width: 12px; height: 12px;'; + case 'm': + return 'width: 16px; height: 16px;'; + case 'l': + return 'width: 20px; height: 20px;'; + default: + return `width: 48px; height: 24px;`; + } + }} left: 4px; bottom: 4px; background-color: #ffffff; @@ -92,29 +94,28 @@ const Slider = styled.span` ${Checkbox}:checked + & { background-color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-color)"; - } + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-color)'; + } }};; }}; } ${Checkbox}:checked + &:before { transform: translateX(${(props) => { - switch (props.$size) { - case "s": - return "20px"; - case "m": - return "24px"; - case "l": - return "28px"; - default: - return `24px`; - } - }}); + switch (props.$size) { + case 's': + return '20px'; + case 'm': + return '24px'; + case 'l': + return '28px'; + default: + return `24px`; + } + }}); background-color: #ffffff; } `; @@ -128,11 +129,16 @@ const Slider = styled.span` * 토글 버튼 처럼 스타일링된 input[type="checkbox"]를 생성합니다. * @param {IToggle} props */ -export const Toggle = ({ size="m", color="--primary-color", checked, onChange=()=>{} }) => { - return ( - - - - - ); -} +export const Toggle = ({ + size = 'm', + color = '--primary-color', + checked, + onChange = () => {}, +}) => { + return ( + + + + + ); +}; diff --git a/src/components/layouts/DashboardLayout.jsx b/src/components/layouts/DashboardLayout.jsx index bbe68af..77195bf 100644 --- a/src/components/layouts/DashboardLayout.jsx +++ b/src/components/layouts/DashboardLayout.jsx @@ -1,43 +1,43 @@ -import { Outlet, useLocation } from "react-router-dom"; +import { Outlet, useLocation } from 'react-router-dom'; -import styled from "styled-components"; -import { DashboardNav } from "../navigation/DashboardNav"; +import styled from 'styled-components'; +import { DashboardNav } from '../navigation/DashboardNav'; const NavSection = styled.section` - position: fixed; - top: 80px; - left: 0; - - width: 250px; - height: calc(100vh - 80px); - - border-right: 1px solid #ffffff10; -` - + position: fixed; + top: 80px; + left: 0; + + width: 250px; + height: calc(100vh - 80px); + + border-right: 1px solid #ffffff10; +`; + const Content = styled.section` - overflow: scroll; + overflow: scroll; - position: fixed; - top: 80px; - left: 250px; + position: fixed; + top: 80px; + left: 250px; - width: calc(100% - 250px); - height: calc(100% - 80px); + width: calc(100% - 250px); + height: calc(100% - 80px); - padding: 40px; + padding: 40px; - box-sizing: border-box; -` + box-sizing: border-box; +`; export const DashboardLayout = () => { - return ( - <> - - - - - - - - ); -}; \ No newline at end of file + return ( + <> + + + + + + + + ); +}; diff --git a/src/components/layouts/MainLayout.jsx b/src/components/layouts/MainLayout.jsx index 621455b..3e5708e 100644 --- a/src/components/layouts/MainLayout.jsx +++ b/src/components/layouts/MainLayout.jsx @@ -1,21 +1,20 @@ -import { Outlet, useLocation } from "react-router-dom"; - -import styled from "styled-components"; -import { Navigation } from "../navigation/Navigation"; +import { Outlet, useLocation } from 'react-router-dom'; +import styled from 'styled-components'; +import { Navigation } from '../navigation/Navigation'; export const Main = styled.main` - width: 100vw; - margin: 0px auto; + width: 100vw; + margin: 0px auto; `; export const MainLayout = () => { - return ( - <> - -
- -
- - ); -}; \ No newline at end of file + return ( + <> + +
+ +
+ + ); +}; diff --git a/src/components/navigation/DashboardNav.jsx b/src/components/navigation/DashboardNav.jsx index 7d95f8b..2f559dd 100644 --- a/src/components/navigation/DashboardNav.jsx +++ b/src/components/navigation/DashboardNav.jsx @@ -1,63 +1,125 @@ -import HomeIcon from "/src/assets/icons/menu/Home.png"; -import HistoryIcon from "/src/assets/icons/menu/History.png"; -import ExecutiveIcon from "/src/assets/icons/menu/Executive.png"; -import AdminIcon from "/src/assets/icons/menu/Admin.png"; -import ManageUserIcon from "/src/assets/icons/menu/ManageUser.png"; +import HomeIcon from '/src/assets/icons/menu/Home.png'; +import HistoryIcon from '/src/assets/icons/menu/History.png'; +import ExecutiveIcon from '/src/assets/icons/menu/Executive.png'; +import AdminIcon from '/src/assets/icons/menu/Admin.png'; +import ManageUserIcon from '/src/assets/icons/menu/ManageUser.png'; -import styled from "styled-components" +import styled from 'styled-components'; -import { Menu } from "./Menu"; -import { useNavigate } from "react-router-dom"; +import { Menu } from './Menu'; +import { useNavigate } from 'react-router-dom'; const DashboardNavBox = styled.div` - position: fixed; - width: 250px; + position: fixed; + width: 250px; - padding: 40px 14px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 40px; + padding: 40px 14px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 40px; - box-sizing: border-box; -` + box-sizing: border-box; +`; const Title = styled.div` - width: 100%; + width: 100%; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 20px; -` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 20px; +`; const Menus = styled.div` - width: 100%; -` + width: 100%; +`; export const DashboardNav = () => { - const navigate = useNavigate(); - - // 여기에 토큰 유효 검사해서 관리자 아니면 메인으로 내보내기 - - return ( - - - <img width="82px" src="/dashboard_nav_logo.png" alt="관리자 페이지용 글자 없는 로고" /> - <div> - <p style={{ fontWeight: "bold", fontSize: "15px", textAlign: "center", marginBottom: "6px" }}>KERT 대시보드</p> - <p style={{ fontWeight: "normal", fontSize: "12px", textAlign: "center", color: "#ffffff88" }}>Management System</p> - </div> - - - {navigate("/dashboard")}} icon={HomeIcon} name="home" >홈 - {navigate("/dashboard/history")}} icon={HistoryIcon} name="history" >연혁 추가/제거 - {navigate("/dashboard/executive")}} icon={ExecutiveIcon} name="executive" >임원진 추가/제거 - {navigate("/dashboard/admin")}} icon={AdminIcon} name="admin" >관리자 추가/제거 - {navigate("/dashboard/users")}} icon={ManageUserIcon} name="users">회원 관리 - - - ) -} \ No newline at end of file + const navigate = useNavigate(); + + // 여기에 토큰 유효 검사해서 관리자 아니면 메인으로 내보내기 + + return ( + + + <img + width="82px" + src="/dashboard_nav_logo.png" + alt="관리자 페이지용 글자 없는 로고" + /> + <div> + <p + style={{ + fontWeight: 'bold', + fontSize: '15px', + textAlign: 'center', + marginBottom: '6px', + }} + > + KERT 대시보드 + </p> + <p + style={{ + fontWeight: 'normal', + fontSize: '12px', + textAlign: 'center', + color: '#ffffff88', + }} + > + Management System + </p> + </div> + + + { + navigate('/dashboard'); + }} + icon={HomeIcon} + name="home" + > + 홈 + + { + navigate('/dashboard/history'); + }} + icon={HistoryIcon} + name="history" + > + 연혁 추가/제거 + + { + navigate('/dashboard/executive'); + }} + icon={ExecutiveIcon} + name="executive" + > + 임원진 추가/제거 + + { + navigate('/dashboard/admin'); + }} + icon={AdminIcon} + name="admin" + > + 관리자 추가/제거 + + { + navigate('/dashboard/users'); + }} + icon={ManageUserIcon} + name="users" + > + 회원 관리 + + + + ); +}; diff --git a/src/components/navigation/Menu.jsx b/src/components/navigation/Menu.jsx index 0f3d19b..f41a7fd 100644 --- a/src/components/navigation/Menu.jsx +++ b/src/components/navigation/Menu.jsx @@ -1,65 +1,68 @@ -import useDashboard from "../../stores/dashboard" +import useDashboard from '../../stores/dashboard'; -import styled from "styled-components" +import styled from 'styled-components'; -let fadeSpeed = "0.2s"; +let fadeSpeed = '0.2s'; const MenuBox = styled.button` - transition: background-color ${fadeSpeed} ease-in-out; + transition: background-color ${fadeSpeed} ease-in-out; - display: flex; - justify-content: start; - align-items: center; - gap: 10px; + display: flex; + justify-content: start; + align-items: center; + gap: 10px; - width: 100%; - height: 44px; - padding: 10px; - border-radius: 6px; + width: 100%; + height: 44px; + padding: 10px; + border-radius: 6px; - box-sizing: border-box; + box-sizing: border-box; - background-color: transparent; - outline: none; - border: none; + background-color: transparent; + outline: none; + border: none; - &:hover { - cursor: pointer; - background-color: #ffffff08; - } + &:hover { + cursor: pointer; + background-color: #ffffff08; + } - & > p { - transition: color ${fadeSpeed} ease-in-out; - color: #465566; - font-size: 14px; - } - - & > img { - transition: opacity ${fadeSpeed} ease-in-out; - opacity: 0.3; - } + & > p { + transition: color ${fadeSpeed} ease-in-out; + color: #465566; + font-size: 14px; + } - &.selected { - background-color: #112337; - color: white; - } - - &.selected > p { - color: white; - } + & > img { + transition: opacity ${fadeSpeed} ease-in-out; + opacity: 0.3; + } - &.selected > img { - opacity: 1; - } -` + &.selected { + background-color: #112337; + color: white; + } -export const Menu = ({ children={}, onClick={}, icon, name="menu" }) => { - const { SelectedDashboardMenu } = useDashboard(); + &.selected > p { + color: white; + } - return ( - - -

{children}

-
- ) -} \ No newline at end of file + &.selected > img { + opacity: 1; + } +`; + +export const Menu = ({ children = {}, onClick = {}, icon, name = 'menu' }) => { + const { SelectedDashboardMenu } = useDashboard(); + + return ( + + +

{children}

+
+ ); +}; diff --git a/src/components/navigation/Navigation.jsx b/src/components/navigation/Navigation.jsx index 25b2775..810798f 100644 --- a/src/components/navigation/Navigation.jsx +++ b/src/components/navigation/Navigation.jsx @@ -1,62 +1,70 @@ -import styled from "styled-components" +import styled from 'styled-components'; -import useTheme from "../../hooks/useTheme" +import useTheme from '../../hooks/useTheme'; -import { Link } from "react-router-dom" -import { Toggle } from "../forms/Toggle" +import { Link } from 'react-router-dom'; +import { Toggle } from '../forms/Toggle'; const Nav = styled.div` - position: fixed; - z-index: 100; - top: 0; + position: fixed; + z-index: 100; + top: 0; - width: 100%; - height: 80px; - padding: 0px 100px; - box-sizing: border-box; + width: 100%; + height: 80px; + padding: 0px 100px; + box-sizing: border-box; - display: flex; - justify-content: space-between; - align-items: center; + display: flex; + justify-content: space-between; + align-items: center; - background-color: var(--nav-background); -` + background-color: var(--nav-background); +`; const Logo = styled.div` - background-image: var(--vertical-logo-url); - background-size: cover; - width: 130px; - height: 30px; -` + background-image: var(--vertical-logo-url); + background-size: cover; + width: 130px; + height: 30px; +`; -const menu_style = { textDecoration: "none", color: "var(--primary-text-color)" }; +const menu_style = { + textDecoration: 'none', + color: 'var(--primary-text-color)', +}; const Menus = styled.div` - width: 500px; + width: 500px; - display: flex; - justify-content: space-between; - align-items: center; + display: flex; + justify-content: space-between; + align-items: center; - font-size: 16px; - font-weight: lighter; -` + font-size: 16px; + font-weight: lighter; +`; export const Navigation = () => { - const { theme, toggleTheme } = useTheme(); - - return ( - - ) -} \ No newline at end of file + const { theme, toggleTheme } = useTheme(); + + return ( + + ); +}; diff --git a/src/components/typograph/Text.jsx b/src/components/typograph/Text.jsx index 5d718d8..7b1d83c 100644 --- a/src/components/typograph/Text.jsx +++ b/src/components/typograph/Text.jsx @@ -2,8 +2,8 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import -import React from "react"; -import styled from "styled-components"; +import React from 'react'; +import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import @@ -18,51 +18,50 @@ import styled from "styled-components"; * @property {Color} color */ export const Span = styled.span` - display: block; - font-size: ${(props) => { - switch (props.$size) { - case "xs": - return "12px"; - case "s": - return "14px"; - case "m": - return "16px"; - case "l": - return "20px"; - case "xl": - return "24px"; - case "sxl": - return "28px"; - default: - return props.$size ?? "16px"; - } - }}; + display: block; + font-size: ${(props) => { + switch (props.$size) { + case 'xs': + return '12px'; + case 's': + return '14px'; + case 'm': + return '16px'; + case 'l': + return '20px'; + case 'xl': + return '24px'; + case 'sxl': + return '28px'; + default: + return props.$size ?? '16px'; + } + }}; - font-weight: ${(props) => { - switch (props.$weight) { - case 'light': - return "300"; - case 'regular': - return "400"; - case 'bold': - return "700"; - case 'extrabold': - return "800"; - case 'heavy': - return "900"; - default: - return props.$weight ?? "regular"; - } - }}; + font-weight: ${(props) => { + switch (props.$weight) { + case 'light': + return '300'; + case 'regular': + return '400'; + case 'bold': + return '700'; + case 'extrabold': + return '800'; + case 'heavy': + return '900'; + default: + return props.$weight ?? 'regular'; + } + }}; - color: ${(props) => { - if (props.$color?.startsWith("--")) { - return `var(${props.$color});`; - } - else { - return props.$color ?? "var(--primary-text-color)"; - } - }}; + color: ${(props) => { + if (props.$color?.startsWith('--')) { + return `var(${props.$color});`; + } else { + return props.$color ?? 'var(--primary-text-color)'; + } + }}; `; /** @@ -76,11 +75,15 @@ export const Span = styled.span` * 스타일링된 span을 생성합니다. * @param {IText & IChildren} props */ -export const Text = ({ size="m", weight="regular", color="--primary-text-color", children="" }) => { - return ( - - {children} - - ) -} \ No newline at end of file +export const Text = ({ + size = 'm', + weight = 'regular', + color = '--primary-text-color', + children = '', +}) => { + return ( + + {children} + + ); +}; diff --git a/src/font/main_font.css b/src/font/main_font.css index 5583019..e8a5c07 100644 --- a/src/font/main_font.css +++ b/src/font/main_font.css @@ -1,93 +1,101 @@ -/* main_font.css */ -@font-face { - font-family: 'NanumSquare'; - font-weight: 400; - src: url(NanumSquareR.eot); - src: local('☺'), - url(NanumSquareR.eot?#iefix) format('embedded-opentype'), - url(NanumSquareR.woff2) format('woff2'), - url(NanumSquareR.woff) format('woff'), - url(NanumSquareR.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquare'; - font-weight: 700; - src: url(NanumSquareB.eot); - src: local('☺'), - url(NanumSquareB.eot?#iefix) format('embedded-opentype'), - url(NanumSquareB.woff2) format('woff2'), - url(NanumSquareB.woff) format('woff'), - url(NanumSquareB.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquare'; - font-weight: 800; - src: url(NanumSquareEB.eot); - src: local('☺'), - url(NanumSquareEB.eot?#iefix) format('embedded-opentype'), - url(NanumSquareEB.woff2) format('woff2'), - url(NanumSquareEB.woff) format('woff'), - url(NanumSquareEB.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquare'; - font-weight: 300; - src: url(NanumSquareL.eot); - src: local('☺'), - url(NanumSquareL.eot?#iefix) format('embedded-opentype'), - url(NanumSquareL.woff2) format('woff2'), - url(NanumSquareL.woff) format('woff'), - url(NanumSquareL.ttf) format('truetype'); -} - -/* AC fonts */ -@font-face { - font-family: 'NanumSquareAc'; - font-weight: 400; - src: url(NanumSquareAcR.eot); - src: local('☺'), - url(NanumSquareAcR.eot?#iefix) format('embedded-opentype'), - url(NanumSquareAcR.woff2) format('woff2'), - url(NanumSquareAcR.woff) format('woff'), - url(NanumSquareAcR.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquareAc'; - font-weight: 700; - src: url(NanumSquareAcB.eot); - src: local('☺'), - url(NanumSquareAcB.eot?#iefix) format('embedded-opentype'), - url(NanumSquareAcB.woff2) format('woff2'), - url(NanumSquareAcB.woff) format('woff'), - url(NanumSquareAcB.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquareAc'; - font-weight: 800; - src: url(NanumSquareAcEB.eot); - src: local('☺'), - url(NanumSquareAcEB.eot?#iefix) format('embedded-opentype'), - url(NanumSquareAcEB.woff2) format('woff2'), - url(NanumSquareAcEB.woff) format('woff'), - url(NanumSquareAcEB.ttf) format('truetype'); -} - -@font-face { - font-family: 'NanumSquareAc'; - font-weight: 300; - src: url(NanumSquareAcL.eot); - src: local('☺'), - url(NanumSquareAcL.eot?#iefix) format('embedded-opentype'), - url(NanumSquareAcL.woff2) format('woff2'), - url(NanumSquareAcL.woff) format('woff'), - url(NanumSquareAcL.ttf) format('truetype'); -} - -body { - font-family: 'NanumSquare', sans-serif; /* Use your preferred font family */ -} +/* main_font.css */ +@font-face { + font-family: 'NanumSquare'; + font-weight: 400; + src: url(NanumSquareR.eot); + src: + local('☺'), + url(NanumSquareR.eot?#iefix) format('embedded-opentype'), + url(NanumSquareR.woff2) format('woff2'), + url(NanumSquareR.woff) format('woff'), + url(NanumSquareR.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquare'; + font-weight: 700; + src: url(NanumSquareB.eot); + src: + local('☺'), + url(NanumSquareB.eot?#iefix) format('embedded-opentype'), + url(NanumSquareB.woff2) format('woff2'), + url(NanumSquareB.woff) format('woff'), + url(NanumSquareB.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquare'; + font-weight: 800; + src: url(NanumSquareEB.eot); + src: + local('☺'), + url(NanumSquareEB.eot?#iefix) format('embedded-opentype'), + url(NanumSquareEB.woff2) format('woff2'), + url(NanumSquareEB.woff) format('woff'), + url(NanumSquareEB.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquare'; + font-weight: 300; + src: url(NanumSquareL.eot); + src: + local('☺'), + url(NanumSquareL.eot?#iefix) format('embedded-opentype'), + url(NanumSquareL.woff2) format('woff2'), + url(NanumSquareL.woff) format('woff'), + url(NanumSquareL.ttf) format('truetype'); +} + +/* AC fonts */ +@font-face { + font-family: 'NanumSquareAc'; + font-weight: 400; + src: url(NanumSquareAcR.eot); + src: + local('☺'), + url(NanumSquareAcR.eot?#iefix) format('embedded-opentype'), + url(NanumSquareAcR.woff2) format('woff2'), + url(NanumSquareAcR.woff) format('woff'), + url(NanumSquareAcR.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquareAc'; + font-weight: 700; + src: url(NanumSquareAcB.eot); + src: + local('☺'), + url(NanumSquareAcB.eot?#iefix) format('embedded-opentype'), + url(NanumSquareAcB.woff2) format('woff2'), + url(NanumSquareAcB.woff) format('woff'), + url(NanumSquareAcB.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquareAc'; + font-weight: 800; + src: url(NanumSquareAcEB.eot); + src: + local('☺'), + url(NanumSquareAcEB.eot?#iefix) format('embedded-opentype'), + url(NanumSquareAcEB.woff2) format('woff2'), + url(NanumSquareAcEB.woff) format('woff'), + url(NanumSquareAcEB.ttf) format('truetype'); +} + +@font-face { + font-family: 'NanumSquareAc'; + font-weight: 300; + src: url(NanumSquareAcL.eot); + src: + local('☺'), + url(NanumSquareAcL.eot?#iefix) format('embedded-opentype'), + url(NanumSquareAcL.woff2) format('woff2'), + url(NanumSquareAcL.woff) format('woff'), + url(NanumSquareAcL.ttf) format('truetype'); +} + +body { + font-family: 'NanumSquare', sans-serif; /* Use your preferred font family */ +} diff --git a/src/hooks/useTheme.js b/src/hooks/useTheme.js index 561732a..00f5f7e 100644 --- a/src/hooks/useTheme.js +++ b/src/hooks/useTheme.js @@ -7,7 +7,9 @@ const useTheme = () => { if (savedTheme) { return savedTheme; } - const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + const systemPrefersDark = window.matchMedia( + '(prefers-color-scheme: dark)', + ).matches; return systemPrefersDark ? 'dark' : 'light'; }; diff --git a/src/main.jsx b/src/main.jsx index e01370d..3f3fd14 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,9 +1,9 @@ -import { BrowserRouter } from 'react-router-dom' -import ReactDOM from 'react-dom/client' -import App from './App.jsx' +import { BrowserRouter } from 'react-router-dom'; +import ReactDOM from 'react-dom/client'; +import App from './App.jsx'; ReactDOM.createRoot(document.getElementById('root')).render( - -) + , +); diff --git a/src/pages/Board.jsx b/src/pages/Board.jsx index cf789b8..39a63ce 100644 --- a/src/pages/Board.jsx +++ b/src/pages/Board.jsx @@ -1,5 +1,5 @@ -import styled from "styled-components"; -import { Button } from "../components/forms/Button"; +import styled from 'styled-components'; +import { Button } from '../components/forms/Button'; const Container = styled.div` width: 100%; @@ -25,45 +25,47 @@ const Container = styled.div` `; const TitleBox = styled.div` - width: 100%; - display: flex; - flex-direction: column; - align-items: center; - margin-bottom: 1rem; - gap: 1rem; -` + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 1rem; + gap: 1rem; +`; const Title = styled.h1` - font-size: 42px; - font-weight: 800; - margin-bottom: 1rem; - color: var(--primary-text-color); + font-size: 42px; + font-weight: 800; + margin-bottom: 1rem; + color: var(--primary-text-color); `; const Description = styled.div` - font-size: 20px; - font-weight: 700; - color: var(--secondary-text-color); -` + font-size: 20px; + font-weight: 700; + color: var(--secondary-text-color); +`; const ButtonGroup = styled.div` - display: flex; - flex-direction: row; - gap: 1rem; - margin-top: 2rem; -` + display: flex; + flex-direction: row; + gap: 1rem; + margin-top: 2rem; +`; export default function Board() { - return ( - - - KERT 소식지 - 열심히 소통하는 KERT, 자세히 알아볼 수 있어요 - - - - - - - ); + return ( + + + KERT 소식지 + 열심히 소통하는 KERT, 자세히 알아볼 수 있어요 + + + + + + + ); } diff --git a/src/pages/DevDocument.jsx b/src/pages/DevDocument.jsx index 604983a..5f158b1 100644 --- a/src/pages/DevDocument.jsx +++ b/src/pages/DevDocument.jsx @@ -2,191 +2,301 @@ // 코드 작성자 : GiHhub @whitedev77773 // 외부 라이브러리에서 import -import React from "react"; -import styled from "styled-components"; +import React from 'react'; +import styled from 'styled-components'; // 사용자가 생성한 컴포넌트 및 JS파일 import - -import { Container } from "../components/forms/Container"; -import { Text, Span } from "../components/typograph/Text"; -import { Checkbox } from "../components/forms/Checkbox"; -import { Toggle } from "../components/forms/Toggle"; -import { Button } from "../components/forms/Button"; - +import { Container } from '../components/forms/Container'; +import { Text, Span } from '../components/typograph/Text'; +import { Checkbox } from '../components/forms/Checkbox'; +import { Toggle } from '../components/forms/Toggle'; +import { Button } from '../components/forms/Button'; const Section = styled(Container)` - display: flex; - flex-direction: column; - justify-content: space-between; - gap: 50px; - - box-sizing: border-box; - width: 100%; - max-width: 1000px; - margin: auto; - margin-bottom: 30px; -` + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 50px; + + box-sizing: border-box; + width: 100%; + max-width: 1000px; + margin: auto; + margin-bottom: 30px; +`; -const Header = styled.div.attrs({ id: "header" })``; -const Title = styled(Span).attrs({ id: "title", $size: "sxl", $weight: "heavy", $color: "--primary-text-color" })` - margin-bottom: 12px; +const Header = styled.div.attrs({ id: 'header' })``; +const Title = styled(Span).attrs({ + id: 'title', + $size: 'sxl', + $weight: 'heavy', + $color: '--primary-text-color', +})` + margin-bottom: 12px; `; -const TextLabel = styled(Span).attrs({ id: "desc", $size: "s", $weight: "regular", $color: "--secondary-text-color" })` - margin-bottom: 5px; +const TextLabel = styled(Span).attrs({ + id: 'desc', + $size: 's', + $weight: 'regular', + $color: '--secondary-text-color', +})` + margin-bottom: 5px; `; -const Description = styled(Span).attrs({ id: "desc", $size: "m", $weight: "regular", $color: "--secondary-text-color" })` - margin: 2px 0; +const Description = styled(Span).attrs({ + id: 'desc', + $size: 'm', + $weight: 'regular', + $color: '--secondary-text-color', +})` + margin: 2px 0; `; const Demo = styled.div` - width: 100%; + width: 100%; - &:not(&:last-child) { - margin-bottom: 20px; - } + &:not(&:last-child) { + margin-bottom: 20px; + } - & > *:not(*:last-child) { - margin-bottom: 4px; - } + & > *:not(*:last-child) { + margin-bottom: 4px; + } `; const SubTitle = styled(Span).attrs({ - $size: "l", $weight: "bold" + $size: 'l', + $weight: 'bold', })` - margin-bottom: 10px; + margin-bottom: 10px; `; const Code = styled(Span)` - display: block; - width: 100%; - font-family: consolas, sans-serif; - box-sizing: border-box; - padding: 10px; - margin: 10px 0; - background-color: var(--container-secondary-background); - border: 1px solid var(--container-border); - color: var(--secondary-text-color); - border-radius: 10px; + display: block; + width: 100%; + font-family: consolas, sans-serif; + box-sizing: border-box; + padding: 10px; + margin: 10px 0; + background-color: var(--container-secondary-background); + border: 1px solid var(--container-border); + color: var(--secondary-text-color); + border-radius: 10px; `; export default function DevDocument() { - return ( -
-
-
- src/component/typograph/Text.jsx - {"<Text />"} - {'<Text />'} - 텍스트를 추가할 때 사용하는 컴포넌트입니다. size, weight, color를 속성로 받습니다. -
-
- 인자 및 상세 설명 - props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 참고) - 색상 관련 props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 참고) - size : xs || s || m || l || xl || string ?? m - weight : light || regular || bold || extrabold || heavy ?? regular - color : --primary-text-color || #ffffff || white || string ?? --primary-text-color -
-
- 코드 사용 예시 - {"xs 사이즈 및 bold 굵기의 텍스트입니다."} - {"l 사이즈의 텍스트입니다."} - {"xl 사이즈 및 색이 #000000인 텍스트입니다."} - {'xs 사이즈 및 bold 굵기의 텍스트입니다.'} - {'l 사이즈의 텍스트입니다.'} - {'xl 사이즈 및 색이 #000000인 텍스트입니다.'} -
-
- 실행 예시 -
- - [12px] 이건 xs 사이즈입니다. - [14px] 이건 s 사이즈입니다. - [16px] 이건 m 사이즈입니다. - [20px] 이건 l 사이즈입니다. - [24px] 이건 xl 사이즈입니다. - [28px] 이건 sxl 사이즈입니다. - - - [Light] 이건 light 굵기입니다. - [Regular] 이건 regular 굵기입니다. - [Bold] 이건 bold 굵기입니다. - [ExtraBold] 이건 extrabold 굵기입니다. - [Heavy] 이건 heavy 굵기입니다. - -
-
-
-
-
- src/component/forms/Checkbox.jsx - {"<Checkbox />"} - 폼 작성용 체크박스입니다. size, color를 속성로 받습니다. -
-
- 인자 및 상세 설명 - props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 참고) - size : s || m || l || string ?? m - color : --primary-color || #ffffff || white || string ?? --primary-color -
-
- 코드 사용 예시 - {""} - {""} - {" alert(\"체크 박스가 \" + e.target.checked + \"로 변한 것도 감지해요.\")} />"} -
-
- 실행 예시 -
- - - - - alert("체크 박스가 " + e.target.checked + "로 변한 것도 감지할 수 있어요.")} /> - - - - - - -
-
-
-
-
- src/component/forms/Toggle.jsx - {"<Toggle />"} - 폼 작성용 토글 버튼입니다. size, color를 속성로 받습니다. -
-
- 인자 및 상세 설명 - props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 참고) - size : s || m || l || string ?? m - color : --primary-color || #ffffff || white || string ?? --primary-color -
-
- 코드 사용 예시 - {""} - {""} - {" alert(\"토글 버튼이 \" + e.target.checked + \"로 변한 것도 감지해요.\")} />"} -
-
- 실행 예시 -
- - - - - alert("토글 버튼이 " + e.target.checked + "로 변한 것도 감지할 수 있어요.")} /> - - - - - - -
-
-
+ return ( +
+
+
+ src/component/typograph/Text.jsx + {'<Text />'} + {'<Text />'} + + 텍스트를 추가할 때 사용하는 컴포넌트입니다. size, weight, color를 + 속성로 받습니다. + +
+
+ 인자 및 상세 설명 + + props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 + 참고) + + + 색상 관련 props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 + 컴포넌트 참고) + + + size : xs || s || m || l || xl || string ?? m + + + weight : light || regular || bold || extrabold || heavy ?? regular + + + color : --primary-text-color || #ffffff || white || string ?? + --primary-text-color + +
+
+ 코드 사용 예시 + + { + 'xs 사이즈 및 bold 굵기의 텍스트입니다.' + } + + {'l 사이즈의 텍스트입니다.'} + + { + 'xl 사이즈 및 색이 #000000인 텍스트입니다.' + } + + + { + 'xs 사이즈 및 bold 굵기의 텍스트입니다.' + } + + {'l 사이즈의 텍스트입니다.'} + + { + 'xl 사이즈 및 색이 #000000인 텍스트입니다.' + } + +
+
+ 실행 예시 +
+ + + [12px] 이건 xs 사이즈입니다. + + + [14px] 이건 s 사이즈입니다. + + + [16px] 이건 m 사이즈입니다. + + + [20px] 이건 l 사이즈입니다. + + + [24px] 이건 xl 사이즈입니다. + + + [28px] 이건 sxl 사이즈입니다. + + + + + [Light] 이건 light 굵기입니다. + + + [Regular] 이건 regular 굵기입니다. + + + [Bold] 이건 bold 굵기입니다. + + + [ExtraBold] 이건 extrabold 굵기입니다. + + + [Heavy] 이건 heavy 굵기입니다. + + +
+
+
+
+
+ src/component/forms/Checkbox.jsx + {'<Checkbox />'} + + 폼 작성용 체크박스입니다. size, color를 속성로 받습니다. + +
+
+ 인자 및 상세 설명 + + props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 + 참고) + + size : s || m || l || string ?? m + + color : --primary-color || #ffffff || white || string ?? + --primary-color + +
+
+ 코드 사용 예시 + {''} + {''} + + { + ' alert("체크 박스가 " + e.target.checked + "로 변한 것도 감지해요.")} />' + } + +
+
+ 실행 예시 +
+ + + + + + alert( + '체크 박스가 ' + + e.target.checked + + '로 변한 것도 감지할 수 있어요.', + ) + } + /> + + + + + + +
+
+
+
+
+ src/component/forms/Toggle.jsx + {'<Toggle />'} + + 폼 작성용 토글 버튼입니다. size, color를 속성로 받습니다. + +
+
+ 인자 및 상세 설명 + + props의 값이 --로 시작하면 css 변수로 감지합니다. (다른 컴포넌트 + 참고) + + size : s || m || l || string ?? m + + color : --primary-color || #ffffff || white || string ?? + --primary-color + +
+
+ 코드 사용 예시 + {''} + {''} + + { + ' alert("토글 버튼이 " + e.target.checked + "로 변한 것도 감지해요.")} />' + } + +
+
+ 실행 예시 +
+ + + + + + alert( + '토글 버튼이 ' + + e.target.checked + + '로 변한 것도 감지할 수 있어요.', + ) + } + /> + + + + + + +
- ) +
+
+ ); } diff --git a/src/pages/MainPage.jsx b/src/pages/MainPage.jsx index 1ff031a..0f62056 100644 --- a/src/pages/MainPage.jsx +++ b/src/pages/MainPage.jsx @@ -1,6 +1,6 @@ import React, { useEffect, useState, useRef } from 'react'; -import bg_img from "../assets/background_img.png"; -import kert_logo from "../assets/kert_logos/White_Icon.png"; +import bg_img from '../assets/background_img.png'; +import kert_logo from '../assets/kert_logos/White_Icon.png'; import Section2 from './Section2.jsx'; import Section1 from './Section1.jsx'; import Section3 from './Section3.jsx'; @@ -12,159 +12,166 @@ import '../font/main_font.css'; const DIVIDER_HEIGHT = 5; const back_first_Style = { - width: '100vw', - height: '100vh', - position: 'relative', - overflow: 'hidden', + width: '100vw', + height: '100vh', + position: 'relative', + overflow: 'hidden', }; const pageStyle = { - width: '100vw', - height: '100vh', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - fontSize: '3em', - color: '#fff', + width: '100vw', + height: '100vh', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + fontSize: '3em', + color: '#fff', }; const dividerStyle = { - height: `${DIVIDER_HEIGHT}px`, - backgroundColor: 'transparent', + height: `${DIVIDER_HEIGHT}px`, + backgroundColor: 'transparent', }; export default function MainPage() { - const outerDivRef = useRef(); - const [scrollIndex, setScrollIndex] = useState(1); + const outerDivRef = useRef(); + const [scrollIndex, setScrollIndex] = useState(1); - useEffect(() => { - const wheelHandler = (e) => { - e.preventDefault(); - const { deltaY } = e; - const { scrollTop } = outerDivRef.current; - const pageHeight = window.innerHeight; + useEffect(() => { + const wheelHandler = (e) => { + e.preventDefault(); + const { deltaY } = e; + const { scrollTop } = outerDivRef.current; + const pageHeight = window.innerHeight; - if (deltaY > 0) { - // Scroll down - if (scrollTop >= 0 && scrollTop < pageHeight) { - outerDivRef.current.scrollTo({ - top: pageHeight + DIVIDER_HEIGHT, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(2); - } else if (scrollTop >= pageHeight && scrollTop < pageHeight * 2) { - outerDivRef.current.scrollTo({ - top: pageHeight * 2 + DIVIDER_HEIGHT * 2, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(3); - } else if (scrollTop >= pageHeight * 2 && scrollTop < pageHeight * 3) { - outerDivRef.current.scrollTo({ - top: pageHeight * 3 + DIVIDER_HEIGHT * 3, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(4); - } else if (scrollTop >= pageHeight * 3 && scrollTop < pageHeight * 4) { - outerDivRef.current.scrollTo({ - top: pageHeight * 4 + DIVIDER_HEIGHT * 4, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(5); - } else if (scrollTop >= pageHeight * 4 && scrollTop < pageHeight * 5) { - outerDivRef.current.scrollTo({ - top: pageHeight * 5 + DIVIDER_HEIGHT * 5, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(6); - } else if (scrollTop >= pageHeight * 5 && scrollTop < pageHeight * 6) { - outerDivRef.current.scrollTo({ - top: pageHeight * 6 + DIVIDER_HEIGHT * 6, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(7); - } - } else { - // Scroll up - if (scrollTop >= pageHeight * 6 && scrollTop < pageHeight * 7) { - outerDivRef.current.scrollTo({ - top: pageHeight * 5 + DIVIDER_HEIGHT * 5, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(6); - } else if (scrollTop >= pageHeight * 5 && scrollTop < pageHeight * 6) { - outerDivRef.current.scrollTo({ - top: pageHeight * 4 + DIVIDER_HEIGHT * 4, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(5); - } else if (scrollTop >= pageHeight * 4 && scrollTop < pageHeight * 5) { - outerDivRef.current.scrollTo({ - top: pageHeight * 3 + DIVIDER_HEIGHT * 3, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(4); - } else if (scrollTop >= pageHeight * 3 && scrollTop < pageHeight * 4) { - outerDivRef.current.scrollTo({ - top: pageHeight * 2 + DIVIDER_HEIGHT * 2, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(3); - } else if (scrollTop >= pageHeight * 2 && scrollTop < pageHeight * 3) { - outerDivRef.current.scrollTo({ - top: pageHeight + DIVIDER_HEIGHT, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(2); - } else if (scrollTop >= pageHeight && scrollTop < pageHeight * 2) { - outerDivRef.current.scrollTo({ - top: 0, - left: 0, - behavior: 'smooth', - }); - setScrollIndex(1); - } - } - }; + if (deltaY > 0) { + // Scroll down + if (scrollTop >= 0 && scrollTop < pageHeight) { + outerDivRef.current.scrollTo({ + top: pageHeight + DIVIDER_HEIGHT, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(2); + } else if (scrollTop >= pageHeight && scrollTop < pageHeight * 2) { + outerDivRef.current.scrollTo({ + top: pageHeight * 2 + DIVIDER_HEIGHT * 2, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(3); + } else if (scrollTop >= pageHeight * 2 && scrollTop < pageHeight * 3) { + outerDivRef.current.scrollTo({ + top: pageHeight * 3 + DIVIDER_HEIGHT * 3, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(4); + } else if (scrollTop >= pageHeight * 3 && scrollTop < pageHeight * 4) { + outerDivRef.current.scrollTo({ + top: pageHeight * 4 + DIVIDER_HEIGHT * 4, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(5); + } else if (scrollTop >= pageHeight * 4 && scrollTop < pageHeight * 5) { + outerDivRef.current.scrollTo({ + top: pageHeight * 5 + DIVIDER_HEIGHT * 5, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(6); + } else if (scrollTop >= pageHeight * 5 && scrollTop < pageHeight * 6) { + outerDivRef.current.scrollTo({ + top: pageHeight * 6 + DIVIDER_HEIGHT * 6, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(7); + } + } else { + // Scroll up + if (scrollTop >= pageHeight * 6 && scrollTop < pageHeight * 7) { + outerDivRef.current.scrollTo({ + top: pageHeight * 5 + DIVIDER_HEIGHT * 5, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(6); + } else if (scrollTop >= pageHeight * 5 && scrollTop < pageHeight * 6) { + outerDivRef.current.scrollTo({ + top: pageHeight * 4 + DIVIDER_HEIGHT * 4, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(5); + } else if (scrollTop >= pageHeight * 4 && scrollTop < pageHeight * 5) { + outerDivRef.current.scrollTo({ + top: pageHeight * 3 + DIVIDER_HEIGHT * 3, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(4); + } else if (scrollTop >= pageHeight * 3 && scrollTop < pageHeight * 4) { + outerDivRef.current.scrollTo({ + top: pageHeight * 2 + DIVIDER_HEIGHT * 2, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(3); + } else if (scrollTop >= pageHeight * 2 && scrollTop < pageHeight * 3) { + outerDivRef.current.scrollTo({ + top: pageHeight + DIVIDER_HEIGHT, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(2); + } else if (scrollTop >= pageHeight && scrollTop < pageHeight * 2) { + outerDivRef.current.scrollTo({ + top: 0, + left: 0, + behavior: 'smooth', + }); + setScrollIndex(1); + } + } + }; - const outerDivRefCurrent = outerDivRef.current; - outerDivRefCurrent.addEventListener('wheel', wheelHandler); - return () => { - outerDivRefCurrent.removeEventListener('wheel', wheelHandler); - }; - }, []); + const outerDivRefCurrent = outerDivRef.current; + outerDivRefCurrent.addEventListener('wheel', wheelHandler); + return () => { + outerDivRefCurrent.removeEventListener('wheel', wheelHandler); + }; + }, []); - return ( -
- -
- -
- -
- -
-
- Page 5 -
-
-
- Page 6 -
-
-
- Page 7 -
-
- ); + return ( +
+ +
+ +
+ +
+ +
+
+ Page 5 +
+
+
+ Page 6 +
+
+
+ Page 7 +
+
+ ); } diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx index c2fd55b..6bba396 100644 --- a/src/pages/NotFound.jsx +++ b/src/pages/NotFound.jsx @@ -1,18 +1,14 @@ // 정의되지 않은 페이지를 접속했을 때 보이는 페이지입니다. -import { useEffect } from "react"; +import { useEffect } from 'react'; -import useDashboard from "../stores/dashboard"; +import useDashboard from '../stores/dashboard'; export default function NotFound() { - const { notFound } = useDashboard(); + const { notFound } = useDashboard(); - useEffect(() => { - notFound(); - }, []); + useEffect(() => { + notFound(); + }, []); - return ( - <> - 찾을 수 없는 페이지 - - ) -} \ No newline at end of file + return <>찾을 수 없는 페이지; +} diff --git a/src/pages/Section1.jsx b/src/pages/Section1.jsx index c847eaf..4c3ba5d 100644 --- a/src/pages/Section1.jsx +++ b/src/pages/Section1.jsx @@ -1,90 +1,94 @@ -import React from 'react'; -import bg_img from "../assets/background_img.png"; -import kert_logo from "../assets/kert_logos/White_Icon.png"; -import '../font/main_font.css'; -import styled from 'styled-components'; - -const back_first_Style = { - width: '100vw', - height: '100vh', - position: 'relative', - overflow: 'hidden', -}; - -const BackFirst = styled.div` - width: 100vw; - height: 100vh; - position: relative; - overflow: hidden; -` - -const backgroundStyle = { - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - backgroundImage: `linear-gradient(to bottom, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 1)), url(${bg_img})`, - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - backgroundPosition: 'center center', - filter: 'blur(12px)', - zIndex: -1, -}; - -const contentStyle = { - position: 'relative', - zIndex: 1, - textAlign: 'center', - paddingTop: '100px', -}; - -const logoContainerStyle = { - position: 'absolute', - bottom: '0', - left: '50%', - transform: 'translateX(-50%)', - width: '400px', - height: '200px', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - zIndex: 1, -}; - -const blurredLogoStyle = { - width: '100%', - height: 'auto', - filter: 'brightness(30%) blur(6px)', - mixBlendMode: 'multiply', -}; - -const headerStyle = { - fontFamily: 'NanumSquareNeo', - fontWeight: 700, - color: '#fff', - fontSize: '2em', -}; - -const subtitleStyle = { - fontFamily: 'NanumSquareNeo', - fontWeight: 600, - color: '#fff', - fontSize: '1em', - paddingTop: '15px', -}; - -export default function Section1() { - return ( - -
-
-

KERT

-

KNU Computer Emergency Response Team

-
-
- KERT Logo -
-
- ); -} +import React from 'react'; +import bg_img from '../assets/background_img.png'; +import kert_logo from '../assets/kert_logos/White_Icon.png'; +import '../font/main_font.css'; +import styled from 'styled-components'; + +const back_first_Style = { + width: '100vw', + height: '100vh', + position: 'relative', + overflow: 'hidden', +}; + +const BackFirst = styled.div` + width: 100vw; + height: 100vh; + position: relative; + overflow: hidden; +`; + +const backgroundStyle = { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + backgroundImage: `linear-gradient(to bottom, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 1)), url(${bg_img})`, + backgroundSize: 'cover', + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center center', + filter: 'blur(12px)', + zIndex: -1, +}; + +const contentStyle = { + position: 'relative', + zIndex: 1, + textAlign: 'center', + paddingTop: '100px', +}; + +const logoContainerStyle = { + position: 'absolute', + bottom: '0', + left: '50%', + transform: 'translateX(-50%)', + width: '400px', + height: '200px', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1, +}; + +const blurredLogoStyle = { + width: '100%', + height: 'auto', + filter: 'brightness(30%) blur(6px)', + mixBlendMode: 'multiply', +}; + +const headerStyle = { + fontFamily: 'NanumSquareNeo', + fontWeight: 700, + color: '#fff', + fontSize: '2em', +}; + +const subtitleStyle = { + fontFamily: 'NanumSquareNeo', + fontWeight: 600, + color: '#fff', + fontSize: '1em', + paddingTop: '15px', +}; + +export default function Section1() { + return ( + +
+
+
+

KERT

+
+
+

KNU Computer Emergency Response Team

+
+
+
+ KERT Logo +
+
+ ); +} diff --git a/src/pages/Section2.jsx b/src/pages/Section2.jsx index 305af51..4714870 100644 --- a/src/pages/Section2.jsx +++ b/src/pages/Section2.jsx @@ -1,156 +1,161 @@ -import React from 'react'; -import bg_img from "../assets/Section2_bg_img.png"; -import lock_icon from "../assets/kert_logos/White_incline_Lock.png"; -import "../font/main_font.css"; -import styled from "styled-components"; -import { Container } from "../components/forms/Container"; -import { Text, Span } from "../components/typograph/Text"; -import { Checkbox } from "../components/forms/Checkbox"; -import { Toggle } from "../components/forms/Toggle"; - -const bg_Style = { - width: '100vw', - height: '100vh', - display: 'flex', - alignItems: 'center', - fontSize: '2em', - opacity: 0.9, - backgroundImage: `url(${bg_img})`, - backgroundSize: 'cover', - backgroundRepeat: 'no-repeat', - backgroundPosition: 'center center', - position: 'relative', -}; - -const overlayStyle = { - position: 'absolute', - top: 0, - left: 0, - width: '100%', - height: '100%', - backgroundColor: 'rgba(0, 0, 0, 0.78)', - zIndex: 1, -}; - -const Title = styled(Span).attrs({ id: "title", $size: "sxl", $weight: "heavy", $color: "--primary-text-color" })` - margin-bottom: 12px; -`; - -const contentStyle = { - position: 'relative', - zIndex: 1, - textAlign: 'flex-start', - color: '#fff', - fontFamily: 'NanumSquareNeo', - padding: '20px', -}; - -const lockIconStyle = { - width: '100%', - height: '100%', - objectFit: 'contain', // Maintains aspect ratio -}; - -const lockIconOverlayStyle = { - position: 'absolute', - bottom: 0, - left: 0, - width: '100%', - height: '50%', // Adjust as necessary - background: 'linear-gradient(to bottom, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.7) 100%)', -}; - -const textStyle = { - marginBottom: '20px', - lineHeight: '1.5', - transform: 'translateX(65%)', - fontFamily:'NanumSquareNeo', - fontWeight:'extrabold', -}; - -const minitextStyle = { - marginBottom: '1px', - lineHeight: '1.5', - transform: 'translateX(65%)', - fontFamily:'NanumSquareNeo', - fontWeight:'extrabold', -}; - -const statItemStyle = { - margin: '30px', // Adjust margin for spacing between items - textAlign: 'center', - fontFamily:'NanumSquareNeo', - opacity: 0.6, - justifyContent: 'center', -}; - -const DateStyle = { - fontSize: '3em', - backgroundImage: 'linear-gradient(to right, #FFFFFF, #6F8CB8)', - WebkitBackgroundClip: 'text', - backgroundClip: 'text', - color: 'transparent', - fontWeight: 'bold', -}; - -const containerStyle = { - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - marginTop: '20px', - transform: 'translateX(50%)', -}; - -const lockIconContainerStyle = { - position: 'absolute', - bottom: '-60px', //이미지 아래로 - left: '50%', - transform: 'translateX(85%)', - width: '500px', - height: '500px', - display: 'flex', - zIndex: 1, - opacity: 0.9, - overflow: 'hidden', // This ensures the gradient overlay is properly contained -}; - -const statsStyle = { - display: 'flex', - justifyContent: 'center', - alignItems: 'flex-start', - fontSize: '0.5em', - marginTop: '20px', // Adjust margin to fit layout - transform: 'translateX(65%)', - opacity: 0.6 -}; - -export default function MainPage() { - return ( -
-
-
-
보안에 진심인 사람들이 모여,
-
경북대학교의 보안을 지킵니다.
- -
- Lock Icon -
-
-
-
-
- KERT가 개설된 지 -
-
27년
-
-
-
- 가입한 인원 -
-
61명
-
-
-
-
- ); -} +import React from 'react'; +import bg_img from '../assets/Section2_bg_img.png'; +import lock_icon from '../assets/kert_logos/White_incline_Lock.png'; +import '../font/main_font.css'; +import styled from 'styled-components'; +import { Container } from '../components/forms/Container'; +import { Text, Span } from '../components/typograph/Text'; +import { Checkbox } from '../components/forms/Checkbox'; +import { Toggle } from '../components/forms/Toggle'; + +const bg_Style = { + width: '100vw', + height: '100vh', + display: 'flex', + alignItems: 'center', + fontSize: '2em', + opacity: 0.9, + backgroundImage: `url(${bg_img})`, + backgroundSize: 'cover', + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center center', + position: 'relative', +}; + +const overlayStyle = { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + backgroundColor: 'rgba(0, 0, 0, 0.78)', + zIndex: 1, +}; + +const Title = styled(Span).attrs({ + id: 'title', + $size: 'sxl', + $weight: 'heavy', + $color: '--primary-text-color', +})` + margin-bottom: 12px; +`; + +const contentStyle = { + position: 'relative', + zIndex: 1, + textAlign: 'flex-start', + color: '#fff', + fontFamily: 'NanumSquareNeo', + padding: '20px', +}; + +const lockIconStyle = { + width: '100%', + height: '100%', + objectFit: 'contain', // Maintains aspect ratio +}; + +const lockIconOverlayStyle = { + position: 'absolute', + bottom: 0, + left: 0, + width: '100%', + height: '50%', // Adjust as necessary + background: + 'linear-gradient(to bottom, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.7) 100%)', +}; + +const textStyle = { + marginBottom: '20px', + lineHeight: '1.5', + transform: 'translateX(65%)', + fontFamily: 'NanumSquareNeo', + fontWeight: 'extrabold', +}; + +const minitextStyle = { + marginBottom: '1px', + lineHeight: '1.5', + transform: 'translateX(65%)', + fontFamily: 'NanumSquareNeo', + fontWeight: 'extrabold', +}; + +const statItemStyle = { + margin: '30px', // Adjust margin for spacing between items + textAlign: 'center', + fontFamily: 'NanumSquareNeo', + opacity: 0.6, + justifyContent: 'center', +}; + +const DateStyle = { + fontSize: '3em', + backgroundImage: 'linear-gradient(to right, #FFFFFF, #6F8CB8)', + WebkitBackgroundClip: 'text', + backgroundClip: 'text', + color: 'transparent', + fontWeight: 'bold', +}; + +const containerStyle = { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + marginTop: '20px', + transform: 'translateX(50%)', +}; + +const lockIconContainerStyle = { + position: 'absolute', + bottom: '-60px', //이미지 아래로 + left: '50%', + transform: 'translateX(85%)', + width: '500px', + height: '500px', + display: 'flex', + zIndex: 1, + opacity: 0.9, + overflow: 'hidden', // This ensures the gradient overlay is properly contained +}; + +const statsStyle = { + display: 'flex', + justifyContent: 'center', + alignItems: 'flex-start', + fontSize: '0.5em', + marginTop: '20px', // Adjust margin to fit layout + transform: 'translateX(65%)', + opacity: 0.6, +}; + +export default function MainPage() { + return ( +
+
+
+
+ 보안에 진심인 사람들이 모여, +
+
+
경북대학교의 보안을 지킵니다.
+ +
+ Lock Icon +
+
+
+
+
KERT가 개설된 지
+
27년
+
+
+
가입한 인원
+
61명
+
+
+
+
+ ); +} diff --git a/src/pages/Section3.jsx b/src/pages/Section3.jsx index f461d0d..e96ecda 100644 --- a/src/pages/Section3.jsx +++ b/src/pages/Section3.jsx @@ -1,173 +1,186 @@ -import React from 'react'; -import bg_img from "../assets/Section3_bg_img.png"; -import Hspace from "../assets/HSpace.png"; -import KUCIS from "../assets/KUCIS.png"; -import CCA from "../assets/CCA.png"; -import Computer from "../assets/Computer.png" -import GroupCard from "../assets/GroupCard.png" -import styled from "styled-components"; -import { Text, Span } from "../components/typograph/Text"; -import "../font/main_font.css"; - -//Dev문서 타이틀 양식 가져오기 -const Title = styled(Span).attrs({ id: "title", $size: "sxl", $weight: "heavy", $color: "--primary-text-color" })` - margin-bottom: 12px; -`; - -//Dev문서 서브타이틀 양식 가져오기 -const SubTitle = styled(Span).attrs({ - $size: "l", $weight: "bold" -})` - margin-bottom: 10px; -`; - -//MainPage 양식과 호환될 수 있도록 바탕 설정 -const back_first_Style = { - width: '100vw', - height: '100vh', - position: 'relative', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - backgroundPosition: 'center center', - backgroundImage: `url(${bg_img})`, - backgroundSize: 'cover', // Ensure background covers entire area -}; - -//배경 중 작성될 텍스트 컨테이너 스타일 설정 -const textContainerStyle = { - fontFamily: 'NanumSquareNeo', - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - textAlign: 'center', - paddingTop: '9%', - position: 'absolute', - top: '0', - color: '#FFFFFF', -}; - - -//그룹카드 grid 배치 설정 -const groupCardsContainerStyle = { - display: 'grid', - gridTemplateColumns: 'repeat(2, 1fr)', // 2열 그리드 유지 - gridGap: '40px', // 카드 사이의 간격을 40px로 설정 - width: '85%', - maxWidth: '2000px', - marginTop: '4em', -}; - -//GroupCard Image 크기 및 스타일 설정 -const groupCardStyle = { - position: 'relative', - display: 'flex', - alignItems: 'center', - gap: 20, - backgroundImage: `url(${GroupCard})`, - backgroundSize: 'cover', - padding: '35px 25px 15px 25px', // 패딩을 25px로 확대하여 카드 내 공간을 더 넓게 설정 - height: 155, - width: 250, - backdropFilter: 'blur(10px)', -}; - -//각 그룹카드에 넣을 로고 이미지 양식 -const GroupCardLogo = { - width: 72, - height: 72, - marginRight: '10px', - display: 'flex', - alignItems: 'center', - justifyContent: 'flex-start', -}; - -//그룹카드 상단에 있는 이름 양식. Figma에서 들고왔어영 -const GroupCardName = { - fontFamily: 'NanumSquareNeo', - fontSize: 15, - fontWeight: 300, - marginBottom: '0.7em', - position: 'absolute', - top: 10, - left: 20, -}; - -const groupCardContent = { - display: 'flex', - flexDirection: 'column', - textAlign: 'left', - alignItems: 'flex-start', - justifyContent: 'center', -}; - -//그룹카드안에 가입날짜 양식! Figma에서 들고왔어영 -const GroupCardDate = { - fontFamily: 'NanumSquareNeo', - fontWeight: 300, - fontSize: '0.5em', - color: 'rgba(255, 255, 255, 0.5)', - marginTop:'0.8em', - marginBottom: '3em', -}; - -//그룹카드안에 해시태그 양식. Figma에서 들고왔어영 -const GroupCardHashTag = { - fontFamily: 'NanumSquareNeo', - fontSize: '0.35em', - color: 'rgba(255, 255, 255, 0.5)', -}; - -export default function Section1() { - return ( -
-
- 우리 모두 함께해요 - KERT는 HSpace와 KUCIS/CCA의 소속으로 가입되어 수준 높은 활동을 외부에서 체험할 수 있어요. -
-
-
HSpace
- HSpace Logo -
- HSpace -
가입일자: 2024.7.6 (D+20)
-
#Hackers #space
-
-
-
-
KUCIS
- KUCIS Logo -
- KUCIS -
가입일자: 2024.7.6 (D+20)
-
#대학생정보보호동아리 #KISA
-
-
-
-
CCA
- CCA Logo -
- CCA -
가입일자: 2024.7.6 (D+20)
-
#전국사이버보안동아리연합
-
- -
-
-
컴퓨터학부
- CCA Logo -
- 컴퓨터학부 -
가입일자: 2024.7.6 (D+20)
-
#IT대학 #천재들의모임
-
- -
-
-
-
- ); -} - - +import React from 'react'; +import bg_img from '../assets/Section3_bg_img.png'; +import Hspace from '../assets/HSpace.png'; +import KUCIS from '../assets/KUCIS.png'; +import CCA from '../assets/CCA.png'; +import Computer from '../assets/Computer.png'; +import GroupCard from '../assets/GroupCard.png'; +import styled from 'styled-components'; +import { Text, Span } from '../components/typograph/Text'; +import '../font/main_font.css'; + +//Dev문서 타이틀 양식 가져오기 +const Title = styled(Span).attrs({ + id: 'title', + $size: 'sxl', + $weight: 'heavy', + $color: '--primary-text-color', +})` + margin-bottom: 12px; +`; + +//Dev문서 서브타이틀 양식 가져오기 +const SubTitle = styled(Span).attrs({ + $size: 'l', + $weight: 'bold', +})` + margin-bottom: 10px; +`; + +//MainPage 양식과 호환될 수 있도록 바탕 설정 +const back_first_Style = { + width: '100vw', + height: '100vh', + position: 'relative', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + backgroundPosition: 'center center', + backgroundImage: `url(${bg_img})`, + backgroundSize: 'cover', // Ensure background covers entire area +}; + +//배경 중 작성될 텍스트 컨테이너 스타일 설정 +const textContainerStyle = { + fontFamily: 'NanumSquareNeo', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + textAlign: 'center', + paddingTop: '9%', + position: 'absolute', + top: '0', + color: '#FFFFFF', +}; + +//그룹카드 grid 배치 설정 +const groupCardsContainerStyle = { + display: 'grid', + gridTemplateColumns: 'repeat(2, 1fr)', // 2열 그리드 유지 + gridGap: '40px', // 카드 사이의 간격을 40px로 설정 + width: '85%', + maxWidth: '2000px', + marginTop: '4em', +}; + +//GroupCard Image 크기 및 스타일 설정 +const groupCardStyle = { + position: 'relative', + display: 'flex', + alignItems: 'center', + gap: 20, + backgroundImage: `url(${GroupCard})`, + backgroundSize: 'cover', + padding: '35px 25px 15px 25px', // 패딩을 25px로 확대하여 카드 내 공간을 더 넓게 설정 + height: 155, + width: 250, + backdropFilter: 'blur(10px)', +}; + +//각 그룹카드에 넣을 로고 이미지 양식 +const GroupCardLogo = { + width: 72, + height: 72, + marginRight: '10px', + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-start', +}; + +//그룹카드 상단에 있는 이름 양식. Figma에서 들고왔어영 +const GroupCardName = { + fontFamily: 'NanumSquareNeo', + fontSize: 15, + fontWeight: 300, + marginBottom: '0.7em', + position: 'absolute', + top: 10, + left: 20, +}; + +const groupCardContent = { + display: 'flex', + flexDirection: 'column', + textAlign: 'left', + alignItems: 'flex-start', + justifyContent: 'center', +}; + +//그룹카드안에 가입날짜 양식! Figma에서 들고왔어영 +const GroupCardDate = { + fontFamily: 'NanumSquareNeo', + fontWeight: 300, + fontSize: '0.5em', + color: 'rgba(255, 255, 255, 0.5)', + marginTop: '0.8em', + marginBottom: '3em', +}; + +//그룹카드안에 해시태그 양식. Figma에서 들고왔어영 +const GroupCardHashTag = { + fontFamily: 'NanumSquareNeo', + fontSize: '0.35em', + color: 'rgba(255, 255, 255, 0.5)', +}; + +export default function Section1() { + return ( +
+
+ 우리 모두 함께해요 + + {' '} + KERT는 HSpace와 KUCIS/CCA의 소속으로 가입되어 수준 높은 활동을 + 외부에서 체험할 수 있어요. + +
+
+
HSpace
+ HSpace Logo +
+ + HSpace + +
가입일자: 2024.7.6 (D+20)
+
#Hackers #space
+
+
+
+
KUCIS
+ KUCIS Logo +
+ + KUCIS + +
가입일자: 2024.7.6 (D+20)
+
#대학생정보보호동아리 #KISA
+
+
+
+
CCA
+ CCA Logo +
+ + CCA + +
가입일자: 2024.7.6 (D+20)
+
#전국사이버보안동아리연합
+
+
+
+
컴퓨터학부
+ CCA Logo +
+ + 컴퓨터학부 + +
가입일자: 2024.7.6 (D+20)
+
#IT대학 #천재들의모임
+
+
+
+
+
+ ); +} diff --git a/src/pages/Section4.jsx b/src/pages/Section4.jsx index 8bee9f1..ece1169 100644 --- a/src/pages/Section4.jsx +++ b/src/pages/Section4.jsx @@ -1,157 +1,172 @@ -import React from 'react'; -import bg_img from "../assets/Section4_bg_img.png"; -import styled from "styled-components"; -import { Text, Span } from "../components/typograph/Text"; -import web from "../assets/icons/Web.png"; -import Crypto from "../assets/icons/Crypto.png"; -import Reversing from "../assets/icons/Reversing.png"; -import Linux from "../assets/icons/Linux.png"; -import "../font/main_font.css"; - -// Dev문서 타이틀 양식 가져오기 -const Title = styled(Span).attrs({ id: "title", $size: "sxl", $weight: "heavy", $color: "--primary-text-color" })` - margin-bottom: 12px; -`; - -// Container for the left content -const LeftContentContainr = styled.div` - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: center; - padding: 0 50px; -`; - -// Container to wrap the left and right content containers -const ContentWrapper = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - width: 100%; - padding: 0 10%; -`; - -// MainPage 양식과 호환될 수 있도록 바탕 설정 -const BackFirstStyle = styled.div` - width: 100vw; - height: 100vh; - position: relative; - display: flex; - justify-content: center; - align-items: center; - background-position: center center; - background-image: url(${bg_img}); - background-size: cover; -`; - -// Container for the right content boxes -const RightContentContainer = styled.div` - display: flex; - flex-wrap: wrap; - align-items: flex-start; - justify-content: flex-start; - margin-left: 100px; - gap: 20px; /* GroupBox 간의 간격을 설정 */ - margin-top: 20px; /* 상단 간격 추가 */ - margin-bottom: 20px; /* 하단 간격 추가 */ -`; - -const GroupBox = styled.div` - box-sizing: border-box; - display: flex; - flex-direction: column; - align-items: flex-start; - padding: 20px; - gap: 20px; - width: 250px; - height: auto; - - background: rgba(255, 255, 255, 0.1); - box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.25); - backdrop-filter: blur(5px); - border-radius: 20px; - - flex: none; - order: 0; - flex-grow: 0; -`; - -const HeaderIcon = styled.img` - display: block; - width: 50px; - height: 50px; - margin-bottom: 30px; /* HeaderIcon과 GroupTitle 사이의 간격 설정 */ -`; - -const GroupTitle = styled.div` - width: 100%; - font-family: 'NanumSquare'; - font-style: normal; - font-weight: 800; - font-size: 20px; - line-height: 29px; - color: #FFFFFF; - text-align: left; -`; - -const GroupContent = styled.div` - width: 100%; - font-family: 'NanumSquare'; - font-style: normal; - font-weight: 400; - font-size: 13px; - line-height: 18px; - color: rgba(255, 255, 255, 0.5); - text-align: left; -`; - -export default function Section1() { - return ( - - - - Education Content of KERT - KERT, 이런 걸 배워요 - - KERT는 보안과 관련된 다양한 활동이 준비돼있어요. - 가입 후 다양한 분야 지식을 습득할 수 있어요. - - - - - - Web 기초 - - 웹 서버 코드를 작성/수정하고 브라우저 개발자 도구로 분석해요. - 통신 프로토콜, 쿠키, 세션 등 Web 동작 방식을 배워요. - - - - - 암호학 Crypto - - AES, 비/대칭키 등 유저와 서버 간의 통신에서 사용하는 암호화 방식을 배우고, - 암호화된 데이터를 복호화해요. - - - - - 리버싱 Reversing - - IDA, Ghidra 등의 도구로 소프트웨어의 동작 원리를 분석하고 - 발생할 수 있는 보안 취약점을 찾는 기술을 배워요. - - - - - 리눅스 Linux - - WSL를 이용한 Netcat 연습, 리눅스의 명령어를 습득하여 - 다양한 모의 해킹, CTF의 문제를 풀어볼 수 있어요. - - - - - - ); -} +import React from 'react'; +import bg_img from '../assets/Section4_bg_img.png'; +import styled from 'styled-components'; +import { Text, Span } from '../components/typograph/Text'; +import web from '../assets/icons/Web.png'; +import Crypto from '../assets/icons/Crypto.png'; +import Reversing from '../assets/icons/Reversing.png'; +import Linux from '../assets/icons/Linux.png'; +import '../font/main_font.css'; + +// Dev문서 타이틀 양식 가져오기 +const Title = styled(Span).attrs({ + id: 'title', + $size: 'sxl', + $weight: 'heavy', + $color: '--primary-text-color', +})` + margin-bottom: 12px; +`; + +// Container for the left content +const LeftContentContainr = styled.div` + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + padding: 0 50px; +`; + +// Container to wrap the left and right content containers +const ContentWrapper = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 0 10%; +`; + +// MainPage 양식과 호환될 수 있도록 바탕 설정 +const BackFirstStyle = styled.div` + width: 100vw; + height: 100vh; + position: relative; + display: flex; + justify-content: center; + align-items: center; + background-position: center center; + background-image: url(${bg_img}); + background-size: cover; +`; + +// Container for the right content boxes +const RightContentContainer = styled.div` + display: flex; + flex-wrap: wrap; + align-items: flex-start; + justify-content: flex-start; + margin-left: 100px; + gap: 20px; /* GroupBox 간의 간격을 설정 */ + margin-top: 20px; /* 상단 간격 추가 */ + margin-bottom: 20px; /* 하단 간격 추가 */ +`; + +const GroupBox = styled.div` + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 20px; + gap: 20px; + width: 250px; + height: auto; + + background: rgba(255, 255, 255, 0.1); + box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.25); + backdrop-filter: blur(5px); + border-radius: 20px; + + flex: none; + order: 0; + flex-grow: 0; +`; + +const HeaderIcon = styled.img` + display: block; + width: 50px; + height: 50px; + margin-bottom: 30px; /* HeaderIcon과 GroupTitle 사이의 간격 설정 */ +`; + +const GroupTitle = styled.div` + width: 100%; + font-family: 'NanumSquare'; + font-style: normal; + font-weight: 800; + font-size: 20px; + line-height: 29px; + color: #ffffff; + text-align: left; +`; + +const GroupContent = styled.div` + width: 100%; + font-family: 'NanumSquare'; + font-style: normal; + font-weight: 400; + font-size: 13px; + line-height: 18px; + color: rgba(255, 255, 255, 0.5); + text-align: left; +`; + +export default function Section1() { + return ( + + + + + Education Content of KERT + + KERT, 이런 걸 배워요 + + KERT는 보안과 관련된 다양한 활동이 준비돼있어요. 가입 후 다양한 분야 + 지식을 습득할 수 있어요. + + + + + + + Web 기초 + + + 웹 서버 코드를 작성/수정하고 브라우저 개발자 도구로 분석해요. 통신 + 프로토콜, 쿠키, 세션 등 Web 동작 방식을 배워요. + + + + + + 암호학 Crypto + + + AES, 비/대칭키 등 유저와 서버 간의 통신에서 사용하는 암호화 방식을 + 배우고, 암호화된 데이터를 복호화해요. + + + + + + 리버싱 Reversing + + + IDA, Ghidra 등의 도구로 소프트웨어의 동작 원리를 분석하고 발생할 + 수 있는 보안 취약점을 찾는 기술을 배워요. + + + + + + 리눅스 Linux + + + WSL를 이용한 Netcat 연습, 리눅스의 명령어를 습득하여 다양한 모의 + 해킹, CTF의 문제를 풀어볼 수 있어요. + + + + + + ); +} diff --git a/src/pages/SignUp.jsx b/src/pages/SignUp.jsx index 3e715aa..89e2243 100644 --- a/src/pages/SignUp.jsx +++ b/src/pages/SignUp.jsx @@ -2,15 +2,15 @@ import { useState } from 'react'; import axios from 'axios'; // import { useNavigate } from 'react-router-dom'; -import "../styles/SignUp.css"; +import '../styles/SignUp.css'; -export default function SignUp () { - const [username, setUsername] = useState(""); - const [mail, setMail] = useState(""); - const [password, setPassword] = useState(""); - const [student, setStudenet] = useState(""); - const [major, setMajor] = useState(""); - const [generation, setGE] = useState(""); +export default function SignUp() { + const [username, setUsername] = useState(''); + const [mail, setMail] = useState(''); + const [password, setPassword] = useState(''); + const [student, setStudenet] = useState(''); + const [major, setMajor] = useState(''); + const [generation, setGE] = useState(''); // const navigate = useNavigate(); const handleSignUp = async () => { @@ -25,18 +25,18 @@ export default function SignUp () { }; // 서버로 회원가입 정보를 전송합니다. - const response = await axios.post("155.230.118.35", userData); - console.log("Sign up successful:", response.data); + const response = await axios.post('155.230.118.35', userData); + console.log('Sign up successful:', response.data); // 회원가입 성공 시 ~page로 이동합니다. // navigate("/page"); } catch (error) { - console.error("Error:", error); + console.error('Error:', error); } - alert("회원가입 요청이 완료되었습니다!"); + alert('회원가입 요청이 완료되었습니다!'); }; - - return ( + + return (
@@ -45,69 +45,70 @@ export default function SignUp () { {/* name */}
setUsername(e.target.value)} + className="input-name" + type="text" + placeholder="이름" + value={username} + onChange={(e) => setUsername(e.target.value)} />
{/* e-mail */} -
+
setMail(e.target.value)} + className="input-mail" + type="mail" + placeholder="mail" + value={mail} + onChange={(e) => setMail(e.target.value)} />
{/* pw */}
setPassword(e.target.value)} + className="input-pw" + type="password" + placeholder="비밀번호" + value={password} + onChange={(e) => setPassword(e.target.value)} />
{/* student number */}
setStudenet(e.target.value)} + className="input-sn" + type="student" + placeholder="학번" + value={student} + onChange={(e) => setStudenet(e.target.value)} />
- {/* major */} + {/* major */}
setMajor(e.target.value)} + className="input-major" + type="major" + placeholder="전공" + value={major} + onChange={(e) => setMajor(e.target.value)} />
- {/* generation */} + {/* generation */}
setGE(e.target.value)} + className="input-ge" + type="generation" + placeholder="기수" + value={generation} + onChange={(e) => setGE(e.target.value)} />
- - + +
); } - diff --git a/src/stores/dashboard.js b/src/stores/dashboard.js index 22430be..7c99513 100644 --- a/src/stores/dashboard.js +++ b/src/stores/dashboard.js @@ -1,14 +1,13 @@ import { create } from 'zustand'; - const useDashboard = create((set) => ({ - SelectedDashboardMenu: "", - moveHome: () => set((state) => ({ SelectedDashboardMenu: "home" })), - moveHistory: () => set((state) => ({ SelectedDashboardMenu: "history" })), - moveExecutive: () => set((state) => ({ SelectedDashboardMenu: "executive" })), - moveAdmin: () => set((state) => ({ SelectedDashboardMenu: "admin" })), - moveUsers: () => set((state) => ({ SelectedDashboardMenu: "users" })), - notFound: () => set((state) => ({ SelectedDashboardMenu: "" })), + SelectedDashboardMenu: '', + moveHome: () => set((state) => ({ SelectedDashboardMenu: 'home' })), + moveHistory: () => set((state) => ({ SelectedDashboardMenu: 'history' })), + moveExecutive: () => set((state) => ({ SelectedDashboardMenu: 'executive' })), + moveAdmin: () => set((state) => ({ SelectedDashboardMenu: 'admin' })), + moveUsers: () => set((state) => ({ SelectedDashboardMenu: 'users' })), + notFound: () => set((state) => ({ SelectedDashboardMenu: '' })), })); - -export default useDashboard; \ No newline at end of file + +export default useDashboard; diff --git a/src/styles/SignUp.css b/src/styles/SignUp.css index d0193fd..193e1f9 100644 --- a/src/styles/SignUp.css +++ b/src/styles/SignUp.css @@ -1,293 +1,292 @@ .SignUp { - background-color: #ffffff; - display: flex; - flex-direction: row; - justify-content: center; - width: 100%; + background-color: #ffffff; + display: flex; + flex-direction: row; + justify-content: center; + width: 100%; } .SignUp .div { - background-color: #ffffff; - height: 1080px; - /* overflow: hidden; */ - position: relative; - width: 1920px; + background-color: #ffffff; + height: 1080px; + /* overflow: hidden; */ + position: relative; + width: 1920px; } .SignUp .middleSide { - background-color: #ffffff; - height: 980px; - left: 0; - /* position: absolute; */ - top: 0px; - width: 1920px; + background-color: #ffffff; + height: 980px; + left: 0; + /* position: absolute; */ + top: 0px; + width: 1920px; } .SignUp .view { - background-color: #ffffff; - height: 939px; - left: 727px; - position: relative; - top: 0px; - width: 466px; + background-color: #ffffff; + height: 939px; + left: 727px; + position: relative; + top: 0px; + width: 466px; } .SignUp .text-signup { - color: #000000; - font-family: "Inter-Bold", Helvetica; - font-size: 55px; - font-weight: 650; - left: 89px; - letter-spacing: 0; - line-height: normal; - position: absolute; - text-align: center; - top: 150px; - width: 288px; + color: #000000; + font-family: 'Inter-Bold', Helvetica; + font-size: 55px; + font-weight: 650; + left: 89px; + letter-spacing: 0; + line-height: normal; + position: absolute; + text-align: center; + top: 150px; + width: 288px; } .SignUp .input-name { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - left: 52px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - position: absolute; - top: 290px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + left: 52px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + position: absolute; + top: 290px; + width: 350px; + font-size: 30px; } .SignUp .input-name::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .input-mail { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 380px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 380px; + width: 350px; + font-size: 30px; } - .SignUp .input-mail::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .input-pw { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 470px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 470px; + width: 350px; + font-size: 30px; } .SignUp .input-pw::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .input-sn { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 560px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 560px; + width: 350px; + font-size: 30px; } .SignUp .input-sn::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .input-major { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 650px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 650px; + width: 350px; + font-size: 30px; } .SignUp .input-major::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .input-ge { - align-items: flex-start; - background-color: #ffffff; - border: 2px solid; - border-color: #000000; - border-radius: 15px; - display: flex; - gap: 10px; - height: 50px; - opacity: 0.3; - overflow: hidden; - padding: 10px; - left: 52px; - position: absolute; - top: 740px; - width: 350px; - font-size: 30px; + align-items: flex-start; + background-color: #ffffff; + border: 2px solid; + border-color: #000000; + border-radius: 15px; + display: flex; + gap: 10px; + height: 50px; + opacity: 0.3; + overflow: hidden; + padding: 10px; + left: 52px; + position: absolute; + top: 740px; + width: 350px; + font-size: 30px; } .SignUp .input-ge::placeholder { - font-size: 25px; - padding: 10px; + font-size: 25px; + padding: 10px; } .SignUp .click-button { - background-color: #000000; - border-radius: 50px; - border: none; - height: 70px; - left: 52px; - position: absolute; - top: 880px; - width: 375px; + background-color: #000000; + border-radius: 50px; + border: none; + height: 70px; + left: 52px; + position: absolute; + top: 880px; + width: 375px; - color: #ffffff; - font-family: "Inter-Thin", Helvetica; - font-size: 25px; - font-weight: 500; + color: #ffffff; + font-family: 'Inter-Thin', Helvetica; + font-size: 25px; + font-weight: 500; } .SignUp .click-button:hover { - border: 2px solid #000000; - transition: all 0.2s ease-out; - cursor: pointer; + border: 2px solid #000000; + transition: all 0.2s ease-out; + cursor: pointer; } .SignUp .signUp { - width: 150px; - height: 40px; - top: 720px; - left: 160px; - position: absolute; + width: 150px; + height: 40px; + top: 720px; + left: 160px; + position: absolute; } .SignUp .text-signUp { - color: #373737; - font-family: "Inter-Thin", Helvetica; - font-size: 23px; - font-weight: 100; - width: 150px; - height: 40px; - left: 0; - letter-spacing: 0; - line-height: normal; - position: absolute; - text-align: center; - text-decoration: underline; - top: -1px; + color: #373737; + font-family: 'Inter-Thin', Helvetica; + font-size: 23px; + font-weight: 100; + width: 150px; + height: 40px; + left: 0; + letter-spacing: 0; + line-height: normal; + position: absolute; + text-align: center; + text-decoration: underline; + top: -1px; } .SignUp .text-signUp:hover { - cursor: pointer; + cursor: pointer; } .SignUp .view-right { - height: 22px; - left: 1583px; - position: absolute; - top: 39px; - width: 244px; + height: 22px; + left: 1583px; + position: absolute; + top: 39px; + width: 244px; } .SignUp .SignUp { - height: 22px; - left: 177px; - position: absolute; - top: 0; - width: 67px; + height: 22px; + left: 177px; + position: absolute; + top: 0; + width: 67px; } .SignUp .text-sign { - color: #373737; - font-family: "Inter-Thin", Helvetica; - font-size: 11px; - font-weight: 100; - left: 0; - letter-spacing: 0; - line-height: normal; - position: absolute; + color: #373737; + font-family: 'Inter-Thin', Helvetica; + font-size: 11px; + font-weight: 100; + left: 0; + letter-spacing: 0; + line-height: normal; + position: absolute; } .SignUp .Login { - height: 22px; - left: 90px; - position: absolute; - top: 0; - width: 50px; + height: 22px; + left: 90px; + position: absolute; + top: 0; + width: 50px; } .SignUp .view-middle { - height: 30px; - left: 530px; - position: absolute; - top: 35px; - width: 808px; + height: 30px; + left: 530px; + position: absolute; + top: 35px; + width: 808px; } .SignUp .view-left { - height: 61px; - left: 74px; - position: absolute; - top: 19px; - width: 113px; + height: 61px; + left: 74px; + position: absolute; + top: 19px; + width: 113px; } diff --git a/src/styles/dark.css b/src/styles/dark.css index f3528d9..38049a6 100644 --- a/src/styles/dark.css +++ b/src/styles/dark.css @@ -1,18 +1,18 @@ :root { - /* 이미지 url */ - --vertical-logo-url: url("/logo/white_vertical.png"); - --sqaure-logo-url: url("/logo/white_square.png"); - --text-logo-url: url("/logo/white_text.png"); + /* 이미지 url */ + --vertical-logo-url: url('/logo/white_vertical.png'); + --sqaure-logo-url: url('/logo/white_square.png'); + --text-logo-url: url('/logo/white_text.png'); - /* Figma 참고해서 컬러 사용 */ - --primary-text-color: #FFFFFF; - --secondary-text-color: #83878B; - --body-background: #080F17; - --nav-background: #080F17 !important; - --container-primary-background: #080F17; - --container-secondary-background: #FFFFFF0F; - --container-border: #273341; - --footer-background: #000000; - --transparent-button-background: #FFFFFF0F; - --transparent-button-background-focus: #FFFFFF1C; -} \ No newline at end of file + /* Figma 참고해서 컬러 사용 */ + --primary-text-color: #ffffff; + --secondary-text-color: #83878b; + --body-background: #080f17; + --nav-background: #080f17 !important; + --container-primary-background: #080f17; + --container-secondary-background: #ffffff0f; + --container-border: #273341; + --footer-background: #000000; + --transparent-button-background: #ffffff0f; + --transparent-button-background-focus: #ffffff1c; +} diff --git a/src/styles/font.css b/src/styles/font.css index 4121159..b93622c 100644 --- a/src/styles/font.css +++ b/src/styles/font.css @@ -1,34 +1,64 @@ @font-face { - font-family: 'NanumSquareNeo'; - font-weight: 300; - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.eot); - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.eot?#iefix) format("embedded-opentype"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.woff) format("woff"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.ttf) format("truetype"); + font-family: 'NanumSquareNeo'; + font-weight: 300; + src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.eot); + src: + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.eot?#iefix) + format('embedded-opentype'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.woff) + format('woff'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-aLt.ttf) + format('truetype'); } @font-face { - font-family: 'NanumSquareNeo'; - font-weight: 400; - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.eot); - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.eot?#iefix) format("embedded-opentype"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.woff) format("woff"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.ttf) format("truetype"); + font-family: 'NanumSquareNeo'; + font-weight: 400; + src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.eot); + src: + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.eot?#iefix) + format('embedded-opentype'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.woff) + format('woff'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-bRg.ttf) + format('truetype'); } @font-face { - font-family: 'NanumSquareNeo'; - font-weight: 700; - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.eot); - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.eot?#iefix) format("embedded-opentype"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.woff) format("woff"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.ttf) format("truetype"); + font-family: 'NanumSquareNeo'; + font-weight: 700; + src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.eot); + src: + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.eot?#iefix) + format('embedded-opentype'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.woff) + format('woff'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-cBd.ttf) + format('truetype'); } @font-face { - font-family: 'NanumSquareNeo'; - font-weight: 800; - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.eot); - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.eot?#iefix) format("embedded-opentype"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.woff) format("woff"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.ttf) format("truetype"); + font-family: 'NanumSquareNeo'; + font-weight: 800; + src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.eot); + src: + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.eot?#iefix) + format('embedded-opentype'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.woff) + format('woff'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-dEb.ttf) + format('truetype'); } @font-face { - font-family: 'NanumSquareNeo'; - font-weight: 900; - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.eot); - src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.eot?#iefix) format("embedded-opentype"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.woff) format("woff"), url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.ttf) format("truetype"); + font-family: 'NanumSquareNeo'; + font-weight: 900; + src: url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.eot); + src: + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.eot?#iefix) + format('embedded-opentype'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.woff) + format('woff'), + url(https://hangeul.pstatic.net/hangeul_static/webfont/NanumSquareNeo/NanumSquareNeoTTF-eHv.ttf) + format('truetype'); } diff --git a/src/styles/global.js b/src/styles/global.js index c6a8cba..e814a5f 100644 --- a/src/styles/global.js +++ b/src/styles/global.js @@ -1,4 +1,4 @@ -import { createGlobalStyle } from "styled-components"; +import { createGlobalStyle } from 'styled-components'; export const GlobalStyle = createGlobalStyle` :root { @@ -39,4 +39,4 @@ export const GlobalStyle = createGlobalStyle` *::-webkit-scrollbar-corner { background: transparent; } -`; \ No newline at end of file +`; diff --git a/src/styles/light.css b/src/styles/light.css index 0de0705..17ccc02 100644 --- a/src/styles/light.css +++ b/src/styles/light.css @@ -1,18 +1,18 @@ :root { - /* 이미지 url */ - --vertical-logo-url: url("/logo/black_vertical.png"); - --sqaure-logo-url: url("/logo/black_square.png"); - --text-logo-url: url("/logo/black_text.png"); + /* 이미지 url */ + --vertical-logo-url: url('/logo/black_vertical.png'); + --sqaure-logo-url: url('/logo/black_square.png'); + --text-logo-url: url('/logo/black_text.png'); - /* Figma 참고해서 컬러 사용 */ - --primary-text-color: #000000; - --secondary-text-color: #6F767D; - --body-background: #FFFFFF; - --nav-background: #F6F8FC; - --container-primary-background: #FFFFFF; - --container-secondary-background: #0000000F; - --container-border: #CED1D6; - --footer-background: #EAF1FB; - --transparent-button-background: #0000000F; - --transparent-button-background-focus: #0000001C; -} \ No newline at end of file + /* Figma 참고해서 컬러 사용 */ + --primary-text-color: #000000; + --secondary-text-color: #6f767d; + --body-background: #ffffff; + --nav-background: #f6f8fc; + --container-primary-background: #ffffff; + --container-secondary-background: #0000000f; + --container-border: #ced1d6; + --footer-background: #eaf1fb; + --transparent-button-background: #0000000f; + --transparent-button-background-focus: #0000001c; +}