+
-
- JobDri
-
+
@@ -53,9 +52,9 @@ export default function BusinessFooter({
- 본 웹사이트에 명시된 모든 기업의 로고 및 상표에 대한 권리는 각 해당
- 상표권자에게 귀속됩니다. 해당 로고는 합격자 취업 현황 등 단순 정보
- 제공의 목적으로만 사용되며, 상표권 침해 의도는 없습니다.
+ 본 웹사이트에 명시된 모든 기업의 로고 및 상표에 대한 권리는 각
+ 해당 상표권자에게 귀속됩니다. 해당 로고는 합격자 취업 현황 등 단순
+ 정보 제공의 목적으로만 사용되며, 상표권 침해 의도는 없습니다.
diff --git a/jobdri/src/components/common/footer/Footer.tsx b/jobdri/src/components/common/footer/Footer.tsx
index ee23461..9d6fc07 100644
--- a/jobdri/src/components/common/footer/Footer.tsx
+++ b/jobdri/src/components/common/footer/Footer.tsx
@@ -60,7 +60,7 @@ export default function Footer({
return (
diff --git a/jobdri/src/components/common/header/Header.tsx b/jobdri/src/components/common/header/Header.tsx
index 05d6949..b76a194 100644
--- a/jobdri/src/components/common/header/Header.tsx
+++ b/jobdri/src/components/common/header/Header.tsx
@@ -46,7 +46,7 @@ function HeaderAction({
return (
["onClick"] = (event) => {
- leftActionOnClick?.(event);
+ const handleLeftActionClick: ButtonHTMLAttributes["onClick"] =
+ (event) => {
+ leftActionOnClick?.(event);
- if (!event.defaultPrevented) {
- router.push(MOCK_APPLICATION_HOME_PATH);
- }
- };
+ if (!event.defaultPrevented) {
+ router.push(MOCK_APPLICATION_HOME_PATH);
+ }
+ };
return (
diff --git a/jobdri/src/components/common/icons/Icon.tsx b/jobdri/src/components/common/icons/Icon.tsx
index c0ad81e..18d7a8a 100644
--- a/jobdri/src/components/common/icons/Icon.tsx
+++ b/jobdri/src/components/common/icons/Icon.tsx
@@ -20,6 +20,7 @@ import IC_ARROW_R_N from "@/assets/ic_Arrow_Right_M.svg";
import IC_DOTS_M from "@/assets/ic_Dots_M.svg";
import IC_KABAB from "@/assets/ic_Kabab.svg";
import IC_CLOSE_M from "@/assets/ic_Close_M.svg";
+import IC_CLOSE_S from "@/assets/ic_Close_S.svg";
import IC_SIDEBAR from "@/assets/ic_SidebarToggle.svg";
import IC_HOME_S from "@/assets/ic_Home_s.svg";
import IC_APPLY from "@/assets/ic_Apply.svg";
@@ -35,6 +36,7 @@ import IC_LIGHTBULB from "@/assets/ic_Lightbulb.svg";
import IC_CHECK_M from "@/assets/ic_Check_M.svg";
import IC_CHECK_COMPLETE from "@/assets/ic_Check_Complete.svg";
import IC_EDIT from "@/assets/ic_Edit.svg";
+import IC_EMAIL from "@/assets/ic_Email.svg";
import IC_LINK from "@/assets/ic_Link.svg";
import IC_POLYGON_1 from "@/assets/ic_Polygon_1.svg";
import IC_POLYGON_2 from "@/assets/ic_Polygon_2.svg";
@@ -63,13 +65,13 @@ const iconMap = {
DOTS_M: IC_DOTS_M,
KABAB: IC_KABAB,
CLOSE_M: IC_CLOSE_M,
+ CLOSE_S: IC_CLOSE_S,
SIDEBAR: IC_SIDEBAR,
HOME_S: IC_HOME_S,
APPLY: IC_APPLY,
EX_S: IC_EX_S,
ARROW_R_N_S: IC_ARROW_R_N_S,
DOT_S: IC_DOT_S,
- CLOSE: IC_CLOSE,
EX_LINK: IC_EX_LINK,
TOKEN: IC_TOKEN,
SPARKLE: IC_SPARKLE,
@@ -78,6 +80,7 @@ const iconMap = {
CHECK_M: IC_CHECK_M,
CHECK_COMPLETE: IC_CHECK_COMPLETE,
EDIT: IC_EDIT,
+ EMAIL: IC_EMAIL,
LINK: IC_LINK,
POLYGON_1: IC_POLYGON_1,
POLYGON_2: IC_POLYGON_2,
diff --git a/jobdri/src/components/common/icons/IconBox.tsx b/jobdri/src/components/common/icons/IconBox.tsx
index 809c9d6..06fdb27 100644
--- a/jobdri/src/components/common/icons/IconBox.tsx
+++ b/jobdri/src/components/common/icons/IconBox.tsx
@@ -69,12 +69,15 @@ export default function IconBox({
"flex shrink-0 items-center justify-center gap-2.5 rounded-icon-default transition-colors",
sizeStyles[size],
selected
- ? "bg-fill-system-fail-strong"
- : "bg-icon-neutral-weak hover:bg-fill-system-fail-hover",
+ ? "bg-[#F01818]"
+ : "bg-icon-neutral-weak hover:bg-fill-system-fail-strong",
className,
)}
>
-
+
);
}
diff --git a/jobdri/src/components/common/input/InputMain.tsx b/jobdri/src/components/common/input/InputMain.tsx
index 024952b..ddc3bbd 100644
--- a/jobdri/src/components/common/input/InputMain.tsx
+++ b/jobdri/src/components/common/input/InputMain.tsx
@@ -20,7 +20,7 @@ interface InputMainProps {
error?: string;
rightContent?: React.ReactNode;
className?: string;
- type?: "ID" | "PASSWORD";
+ type?: "ID" | "PASSWORD" | "EMAIL";
}
export function InputMain({
@@ -44,7 +44,13 @@ export function InputMain({
const [focused, setFocused] = useState(false);
const value = externalValue ?? internalValue;
- const iconType = type === "PASSWORD" ? "PASSWORD" : "PROFILE";
+
+ const iconMap = {
+ ID: "PROFILE",
+ PASSWORD: "PASSWORD",
+ EMAIL: "EMAIL",
+ } as const;
+
const resolvedInputType =
inputType ?? (type === "PASSWORD" ? "password" : "text");
const isError = hasError || !!error;
@@ -67,7 +73,7 @@ export function InputMain({
{!focused && !value && (
)}
diff --git a/jobdri/src/components/common/lnb/Lnb.tsx b/jobdri/src/components/common/lnb/Lnb.tsx
index f5eccb0..9041ed7 100644
--- a/jobdri/src/components/common/lnb/Lnb.tsx
+++ b/jobdri/src/components/common/lnb/Lnb.tsx
@@ -6,6 +6,7 @@ import { createPortal } from "react-dom";
import Icon, { type IconType } from "@/components/common/icons/Icon";
import { ModalNotice } from "@/components/common/modal";
import { AUTH_STORAGE_KEYS, getStoredAuthEmail } from "@/lib/auth";
+import Logo from "@/assets/ic_LOGO_minimum.svg";
type LnbItemKey = "experience" | "apply";
@@ -33,7 +34,7 @@ const navItems: LnbNavItem[] = [
];
const navItemBaseClassName =
- "flex h-9 items-center gap-2 rounded-cta-l p-3 text-sub14-med";
+ "flex h-9 items-center gap-2 rounded-cta-l py-3 px-2 text-sub14-med";
const defaultEmail = "jobdri@gmail.com";
@@ -97,32 +98,24 @@ export default function Lnb({
return (
<>
-
- {!isFold && (
-
- JobDri
-
- )}
+
+ {!isFold && }
setIsFold((prevIsFold) => !prevIsFold)}
>
-
+
{navItems.map((item) => {
const isActive = item.key === activeItem;
@@ -131,8 +124,9 @@ export default function Lnb({
key={item.key}
type="button"
onClick={() => handleNavItemClick(item)}
- className={`${navItemBaseClassName} ${
- isFold ? "w-[30px] justify-center px-0" : "w-full"
+ // 변경된 부분: isFold일 때 gap-0을 적용하여 간격 없애기
+ className={`${navItemBaseClassName} w-full ${
+ isFold ? "pl-2 gap-0" : ""
} ${
isActive
? "bg-fill-primary-assistive text-text-primary-strong"
@@ -141,59 +135,69 @@ export default function Lnb({
>
- {!isFold && {item.label} }
+
+ {item.label}
+
);
})}
-
- {!isFold && (
- <>
-
-
- 크레딧
-
-
-
-
-
-
- {creditCount}회
-
-
+
+
+
+
router.push("/credit")}
+ className="flex items-center gap-[3px] text-label14-med text-icon-neutral-default [font-feature-settings:'liga'_off,'clig'_off] hover:text-text-neutral-title"
+ >
+ 크레딧
+
+
+
+
+
+ {creditCount}회
+
-
-
- >
- )}
+
+
+
{emailInitial}
- {!isFold && (
-
- {displayEmail}
-
- )}
+
+ {displayEmail}
+
diff --git a/jobdri/src/components/common/toast/Toast.tsx b/jobdri/src/components/common/toast/Toast.tsx
index 31dadb6..b930914 100644
--- a/jobdri/src/components/common/toast/Toast.tsx
+++ b/jobdri/src/components/common/toast/Toast.tsx
@@ -24,7 +24,7 @@ export default function Toast({
) => {
+ const handleVerificationSubmit = async (
+ event: FormEvent
,
+ ) => {
event.preventDefault();
if (isVerificationSubmitting || !isVerificationReady) {
@@ -432,204 +433,206 @@ export default function EmailLoginScreen() {
) : (
<>
-
- {authMode === "login" ? (
- <>
-
-
-
-
- handleInputChange(value, setEmail)
- }
- />
-
+ JobDri
+
+
+
+
+ 인사담당자가 보는 내 자소서는 몇점?
+
+
+ 내 경험을 살린 합격 자소서를 완성해보세요
+
+
+
+
+ {authMode === "login" ? (
+ <>
+
+
+
+
+ handleInputChange(value, setEmail)
+ }
+ />
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- handleModeChange("signup")}
- />
-
- >
- ) : (
- <>
-
-
-
-
- handleInputChange(value, setName)
- }
- />
-
- handleInputChange(value, setEmail)
- }
+
+
- handleModeChange("signup")}
/>
-
+ >
+ ) : (
+ <>
+
+
+
+
+ handleInputChange(value, setName)
+ }
+ />
+
+ handleInputChange(value, setEmail)
+ }
+ />
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- 이미 계정이 있으신가요?
-
- handleModeChange("login")}
- />
-
- >
- )}
+
+
+ 이미 계정이 있으신가요?
+
+ handleModeChange("login")}
+ />
+
+ >
+ )}
- {authMode === "login" && showCreditTooltip && (
-
-
-
- )}
+ {authMode === "login" && showCreditTooltip && (
+
+
+
+ )}
>
)}
@@ -655,10 +658,7 @@ interface EmailVerificationContentProps {
index: number,
event: KeyboardEvent
,
) => void;
- onCodePaste: (
- index: number,
- event: ClipboardEvent,
- ) => void;
+ onCodePaste: (index: number, event: ClipboardEvent) => void;
onResend: () => void;
}
diff --git a/jobdri/src/lib/api/questions.ts b/jobdri/src/lib/api/questions.ts
index 6e3a9ad..469c84a 100644
--- a/jobdri/src/lib/api/questions.ts
+++ b/jobdri/src/lib/api/questions.ts
@@ -37,15 +37,6 @@ export interface AnswerItem {
answer: string;
}
-function getAuthHeaders(): Record {
- const token =
- typeof window !== "undefined"
- ? window.localStorage.getItem(AUTH_STORAGE_KEYS.accessToken)
- : null;
-
- return token ? { Authorization: `Bearer ${token}` } : {};
-}
-
async function parseApiResponse(
response: Response,
fallbackMessage: string,