1+ // components/HelpModal.ts
2+ import { createElement } from '../utils/dom.js' ;
3+
4+ export function HelpModal ( ) : { toggleButton : HTMLElement ; overlay : HTMLElement } {
5+ const toggleButton = createElement (
6+ 'button' ,
7+ 'fixed top-4 right-4 bg-black text-white p-3 rounded-full hover:bg-gray-900 transition-colors z-50' ,
8+ ) ;
9+ toggleButton . innerHTML = `
10+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
11+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
12+ </svg>
13+ ` ;
14+
15+ const overlay = createElement (
16+ 'div' ,
17+ 'fixed inset-0 bg-black/50 z-40 hidden transition-opacity duration-300' ,
18+ ) ;
19+
20+ const panel = createElement (
21+ 'div' ,
22+ 'fixed right-0 top-0 h-full w-80 bg-white shadow-2xl p-6 overflow-y-auto z-50 transform translate-x-full transition-transform duration-300' ,
23+ ) ;
24+ panel . innerHTML = `
25+ <button class="absolute top-4 right-4 text-gray-500 hover:text-black" onclick="document.querySelector('.fixed.inset-0').classList.add('hidden'); this.parentElement.classList.add('translate-x-full')">
26+ <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
27+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
28+ </svg>
29+ </button>
30+ <h2 class="text-xl font-bold mb-4">📖 이용 안내</h2>
31+ <div class="mb-6">
32+ <h3 class="text-base font-bold mb-3">💰 할인 정책</h3>
33+ <div class="space-y-3">
34+ <div class="bg-gray-100 rounded-lg p-3">
35+ <p class="font-semibold text-sm mb-1">개별 상품</p>
36+ <p class="text-gray-700 text-xs pl-2">
37+ • 키보드 10개↑: 10%<br>
38+ • 마우스 10개↑: 15%<br>
39+ • 모니터암 10개↑: 20%<br>
40+ • 스피커 10개↑: 25%
41+ </p>
42+ </div>
43+ <div class="bg-gray-100 rounded-lg p-3">
44+ <p class="font-semibold text-sm mb-1">전체 수량</p>
45+ <p class="text-gray-700 text-xs pl-2">• 30개 이상: 25%</p>
46+ </div>
47+ <div class="bg-gray-100 rounded-lg p-3">
48+ <p class="font-semibold text-sm mb-1">특별 할인</p>
49+ <p class="text-gray-700 text-xs pl-2">
50+ • 화요일: +10%<br>
51+ • ⚡번개세일: 20%<br>
52+ • 💝추천할인: 5%
53+ </p>
54+ </div>
55+ </div>
56+ </div>
57+ <div class="mb-6">
58+ <h3 class="text-base font-bold mb-3">🎁 포인트 적립</h3>
59+ <div class="space-y-3">
60+ <div class="bg-gray-100 rounded-lg p-3">
61+ <p class="font-semibold text-sm mb-1">기본</p>
62+ <p class="text-gray-700 text-xs pl-2">• 구매액의 0.1%</p>
63+ </div>
64+ <div class="bg-gray-100 rounded-lg p-3">
65+ <p class="font-semibold text-sm mb-1">추가</p>
66+ <p class="text-gray-700 text-xs pl-2">
67+ • 화요일: 2배<br>
68+ • 키보드+마우스: +50p<br>
69+ • 풀세트: +100p<br>
70+ • 10개↑: +20p / 20개↑: +50p / 30개↑: +100p
71+ </p>
72+ </div>
73+ </div>
74+ </div>
75+ <div class="border-t border-gray-200 pt-4 mt-4">
76+ <p class="text-xs font-bold mb-1">💡 TIP</p>
77+ <p class="text-2xs text-gray-600 leading-relaxed">
78+ • 화요일 대량구매 = MAX 혜택<br>
79+ • ⚡+💝 중복 가능<br>
80+ • 상품4 = 품절
81+ </p>
82+ </div>
83+ ` ;
84+
85+ // 이벤트 핸들러
86+ toggleButton . onclick = function ( ) {
87+ overlay . classList . toggle ( 'hidden' ) ;
88+ panel . classList . toggle ( 'translate-x-full' ) ;
89+ } ;
90+
91+ overlay . onclick = function ( e ) {
92+ if ( e . target === overlay ) {
93+ overlay . classList . add ( 'hidden' ) ;
94+ panel . classList . add ( 'translate-x-full' ) ;
95+ }
96+ } ;
97+
98+ overlay . appendChild ( panel ) ;
99+
100+ return { toggleButton, overlay } ;
101+ }
0 commit comments