From 740acb21d3a0274d4efb5d929b451e4bb67fb8e9 Mon Sep 17 00:00:00 2001 From: sangwon Date: Fri, 14 Aug 2026 21:04:46 +0900 Subject: [PATCH 1/9] onboarding pages and components --- .../onboarding/OnboardingComponent1.tsx | 39 +++++++ .../onboarding/OnboardingComponent2.tsx | 50 +++++++++ .../onboarding/OnboardingComponent3.tsx | 105 ++++++++++++++++++ .../onboarding/OnboardingComponentChange.tsx | 11 ++ .../onboarding/OnboardingHeader.tsx | 38 +++++++ src/pages/Onboarding.tsx | 32 ++++++ 6 files changed, 275 insertions(+) create mode 100644 src/components/onboarding/OnboardingComponent1.tsx create mode 100644 src/components/onboarding/OnboardingComponent2.tsx create mode 100644 src/components/onboarding/OnboardingComponent3.tsx create mode 100644 src/components/onboarding/OnboardingComponentChange.tsx create mode 100644 src/components/onboarding/OnboardingHeader.tsx create mode 100644 src/pages/Onboarding.tsx diff --git a/src/components/onboarding/OnboardingComponent1.tsx b/src/components/onboarding/OnboardingComponent1.tsx new file mode 100644 index 0000000..87b24ab --- /dev/null +++ b/src/components/onboarding/OnboardingComponent1.tsx @@ -0,0 +1,39 @@ +export default function OnboardingComponent1() { + + return ( +
+ {/* nine blocks */} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* content */} +
가치관을 묻지 않아요
+
대신 지금 고민 중인 선택 하나만 물어볼게요.
'당신의 가치'는 무엇인가는 묻지 않지만,
구체적인 갈림길 앞에서는 누구나 이유를 둘 수 있으니까요.
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/onboarding/OnboardingComponent2.tsx b/src/components/onboarding/OnboardingComponent2.tsx new file mode 100644 index 0000000..3948227 --- /dev/null +++ b/src/components/onboarding/OnboardingComponent2.tsx @@ -0,0 +1,50 @@ +export default function OnboardingComponent2() { + return ( +
+

고르고, 이유를 남기면

+
+
+
+
+
+
+
+

고민

+

지금 하는 갈림길 하나를 이름 붙인다

+
+
+
+
+
+
+
+
+

오늘의 판단

+

오늘, 어느 쪽으로 마음이 갔는지

+
+
+
+
+
+
+
+
+

이유

+

한 줄이면 충분하다

+
+
+
+
+
+
+
+
+

가치

+

가장 가까운 것 하나만 고른다

+
+
+
+

쌓일수록, 당신의 선택이 보여요.

+
+ ); +} \ No newline at end of file diff --git a/src/components/onboarding/OnboardingComponent3.tsx b/src/components/onboarding/OnboardingComponent3.tsx new file mode 100644 index 0000000..51b8227 --- /dev/null +++ b/src/components/onboarding/OnboardingComponent3.tsx @@ -0,0 +1,105 @@ +import { useState, type ChangeEvent } from 'react' + +import RecordValueButton from '@/components/common/button/RecordValueButton' +import TextArea from '@/components/common/input/TextArea' +import CategoryButton from '@/components/common/button/CategoryButton' + +import { VALUE_LABELS, type ValueKey } from '@/constants/insights' +import { VALUE_DESCRIPTIONS } from '@/constants/values' + + + +const VALUE_KEYS = Object.keys(VALUE_LABELS) as ValueKey[] + +const CATEGORY_OPTIONS = [ + { value: 'work', title: '일·진로', description: '취업, 이직, 업무 판단' }, + { + value: 'relationship', + title: '관계', + description: '친구, 연인, 가족, 동료', + }, + { value: 'money', title: '돈', description: '소비, 저축, 투자' }, + { value: 'health', title: '건강·몸', description: '운동, 수면, 컨디션' }, + { value: 'self', title: '나 자신', description: '성격, 원칙, 새로운 시도' }, + { value: 'etc', title: '기타', description: '위 어디에도 해당 없음' }, +] as const + +type CategoryValue = (typeof CATEGORY_OPTIONS)[number]['value'] + + +export default function OnboardingComponent3() { + + const [topic, setTopic] = useState(''); + const [selectedValue, setSelectedValue] = useState(null) + const [selectedCategory, setSelectedCategory] = + useState(null) + + return ( + <> +
+

지금 고민,
하나씩 적어볼까요?

+

아직 연습이예요. 편하게 가볍게 한 번 써볼까요?

+
고민은 취업, 관계, 돈, 건강처럼 영역으로 나눠서 적어볼 수 있어요. 아래에서 골라보세요.
+
+
+