feat(manual): 사용자 매뉴얼 팝업 기능 추가

- 퀵 메뉴에 '사용자 매뉴얼' 버튼 추가 (위성영상 아래)
- UserManualPopup 컴포넌트 신규 생성 (77개 화면, 8개 챕터)
- 각 화면별 스크린샷 이미지 77장 포함 (/public/manual/)
- 라이트박스 이미지 확대, 전체 열기/닫기, 챕터 네비게이션
This commit is contained in:
Nan Kyung Lee 2026-03-12 10:30:14 +09:00
부모 ed3758645c
커밋 d9a51d2101
79개의 변경된 파일1634개의 추가작업 그리고 0개의 파일을 삭제

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 415 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 301 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 436 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 476 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 743 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 906 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 448 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  크기: 551 KiB

파일 보기

@ -3,6 +3,7 @@ import type { MainTab } from '../../types/navigation'
import { useAuthStore } from '../../store/authStore' import { useAuthStore } from '../../store/authStore'
import { useMenuStore } from '../../store/menuStore' import { useMenuStore } from '../../store/menuStore'
import { useMapStore } from '../../store/mapStore' import { useMapStore } from '../../store/mapStore'
import UserManualPopup from '../ui/UserManualPopup'
interface TopBarProps { interface TopBarProps {
activeTab: MainTab activeTab: MainTab
@ -11,6 +12,7 @@ interface TopBarProps {
export function TopBar({ activeTab, onTabChange }: TopBarProps) { export function TopBar({ activeTab, onTabChange }: TopBarProps) {
const [showQuickMenu, setShowQuickMenu] = useState(false) const [showQuickMenu, setShowQuickMenu] = useState(false)
const [showManual, setShowManual] = useState(false)
const quickMenuRef = useRef<HTMLDivElement>(null) const quickMenuRef = useRef<HTMLDivElement>(null)
const { hasPermission, user, logout } = useAuthStore() const { hasPermission, user, logout } = useAuthStore()
const { menuConfig, isLoaded } = useMenuStore() const { menuConfig, isLoaded } = useMenuStore()
@ -173,10 +175,26 @@ export function TopBar({ activeTab, onTabChange }: TopBarProps) {
</div> </div>
</button> </button>
))} ))}
<div className="my-1.5 border-t border-border" />
{/* 매뉴얼 */}
<button
onClick={() => {
setShowManual(true)
setShowQuickMenu(false)
}}
className="w-full px-3 py-2 flex items-center gap-2.5 text-[12px] text-text-2 hover:bg-[rgba(255,255,255,0.06)] hover:text-text-1 transition-all"
>
<span className="text-[13px]">&#x1F4D6;</span>
</button>
</div> </div>
)} )}
</div> </div>
</div> </div>
{/* 사용자 매뉴얼 팝업 */}
<UserManualPopup isOpen={showManual} onClose={() => setShowManual(false)} />
</div> </div>
) )
} }

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다. Load Diff