feat(frontend): 实现新手引导功能
- 添加 Guide 组件和引导步骤配置 - 实现 useOnboardingTour 和 useTourStepDescription composables - 添加 onboarding store 管理引导状态 - 更新多个视图和组件以支持引导功能 - 添加国际化支持(中英文) - 删除旧的实现指南文档
This commit is contained in:
247
frontend/src/styles/onboarding.css
Normal file
247
frontend/src/styles/onboarding.css
Normal file
@@ -0,0 +1,247 @@
|
||||
/* Sub2API Interactive Tour Styles - DOM Restructured Version */
|
||||
|
||||
/* 1. Overlay & Highlight */
|
||||
.driver-overlay {
|
||||
position: fixed !important;
|
||||
inset: 0 !important;
|
||||
z-index: 99999998 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.driver-active-element {
|
||||
position: relative !important;
|
||||
z-index: 99999999 !important;
|
||||
outline: 4px solid rgba(20, 184, 166, 0.2) !important;
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
|
||||
/* 2. Popover Container */
|
||||
.driver-popover.theme-tour-popover {
|
||||
position: fixed !important;
|
||||
z-index: 100000000 !important;
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important;
|
||||
border-radius: 12px !important;
|
||||
padding: 0 !important;
|
||||
max-width: min(440px, 90vw) !important; /* Responsive on small screens */
|
||||
color: #1f2937 !important;
|
||||
font-family: ui-sans-serif, system-ui, sans-serif !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
|
||||
.dark .driver-popover.theme-tour-popover {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #334155 !important;
|
||||
color: #f3f4f6 !important;
|
||||
}
|
||||
|
||||
/* 3. Header Area */
|
||||
.theme-tour-popover .driver-popover-title {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
padding: 20px 24px 12px 24px !important;
|
||||
margin: 0 !important;
|
||||
background-color: transparent !important;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
.driver-popover-title-text {
|
||||
font-size: 18px !important;
|
||||
font-weight: 700 !important;
|
||||
color: #111827 !important;
|
||||
line-height: 1.3 !important;
|
||||
padding-right: 100px !important; /* Ensure title doesn't overlap Skip/Close */
|
||||
}
|
||||
.dark .driver-popover-title-text { color: #ffffff !important; }
|
||||
|
||||
/* Skip Button */
|
||||
.header-skip-btn {
|
||||
position: absolute !important;
|
||||
top: 18px !important;
|
||||
right: 60px !important;
|
||||
font-size: 12px !important;
|
||||
color: #9ca3af !important;
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
padding: 4px 8px !important;
|
||||
cursor: pointer !important;
|
||||
border-radius: 4px !important;
|
||||
transition: all 0.2s !important;
|
||||
white-space: nowrap !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
height: 28px !important;
|
||||
max-width: 120px !important;
|
||||
overflow: hidden !important;
|
||||
text-overflow: ellipsis !important;
|
||||
}
|
||||
.header-skip-btn:hover {
|
||||
background-color: rgba(239, 68, 68, 0.1) !important;
|
||||
color: #ef4444 !important;
|
||||
}
|
||||
.dark .header-skip-btn:hover {
|
||||
background-color: rgba(248, 113, 113, 0.1) !important;
|
||||
color: #f87171 !important;
|
||||
}
|
||||
|
||||
/* Close Button */
|
||||
.theme-tour-popover .driver-popover-close-btn {
|
||||
position: absolute !important;
|
||||
top: 18px !important;
|
||||
right: 20px !important;
|
||||
width: 28px !important;
|
||||
height: 28px !important;
|
||||
padding: 0 !important;
|
||||
color: #9ca3af !important;
|
||||
background-color: transparent !important;
|
||||
border: none !important;
|
||||
z-index: 20 !important;
|
||||
border-radius: 4px !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-close-btn:hover { background-color: #f3f4f6 !important; color: #4b5563 !important; }
|
||||
.dark .theme-tour-popover .driver-popover-close-btn:hover { background-color: #334155 !important; }
|
||||
|
||||
/* 4. Body Content */
|
||||
.theme-tour-popover .driver-popover-description {
|
||||
display: block !important;
|
||||
font-size: 14px !important;
|
||||
font-weight: 400 !important;
|
||||
color: #4b5563 !important;
|
||||
padding: 0 24px 24px 24px !important;
|
||||
margin: 0 !important;
|
||||
line-height: 1.6 !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-description { color: #cbd5e1 !important; }
|
||||
|
||||
/* 5. Footer Area - Flex Row with Left/Right Containers */
|
||||
.theme-tour-popover .driver-popover-footer {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: space-between !important; /* Push Left and Right apart */
|
||||
padding: 16px 24px !important;
|
||||
background-color: #f9fafb !important;
|
||||
border-top: 1px solid #f3f4f6 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-footer {
|
||||
background-color: #0f172a !important;
|
||||
border-top-color: #1e293b !important;
|
||||
}
|
||||
|
||||
/* Left Container: Progress + Shortcuts */
|
||||
.footer-left {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 16px !important;
|
||||
}
|
||||
|
||||
/* Right Container: Buttons */
|
||||
.footer-right {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 8px !important;
|
||||
}
|
||||
|
||||
/* Progress */
|
||||
.theme-tour-popover .driver-popover-progress-text {
|
||||
font-size: 13px !important;
|
||||
color: #6b7280 !important;
|
||||
margin: 0 !important;
|
||||
font-weight: 500 !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
.dark .theme-tour-popover .driver-popover-progress-text { color: #9ca3af !important; }
|
||||
|
||||
/* Shortcuts (Divider + Keys) */
|
||||
.footer-shortcuts {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 12px !important;
|
||||
padding-left: 16px !important;
|
||||
border-left: 1px solid #e5e7eb !important;
|
||||
height: 20px !important;
|
||||
}
|
||||
.dark .footer-shortcuts { border-left-color: #334155 !important; }
|
||||
|
||||
.shortcut-item {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 4px !important;
|
||||
font-size: 12px !important;
|
||||
color: #6b7280 !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
.dark .shortcut-item { color: #94a3b8 !important; }
|
||||
|
||||
.shortcut-item kbd {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, monospace !important;
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
border-radius: 4px !important;
|
||||
padding: 1px 6px !important;
|
||||
font-size: 11px !important;
|
||||
font-weight: 600 !important;
|
||||
color: #4b5563 !important;
|
||||
box-shadow: 0 1px 0 rgba(0,0,0,0.05) !important;
|
||||
min-width: 20px !important;
|
||||
text-align: center !important;
|
||||
display: inline-block !important;
|
||||
}
|
||||
.dark .shortcut-item kbd {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #475569 !important;
|
||||
color: #cbd5e1 !important;
|
||||
}
|
||||
|
||||
/* Nav Buttons */
|
||||
.theme-tour-popover button {
|
||||
display: inline-flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
padding: 8px 16px !important;
|
||||
font-size: 13px !important;
|
||||
font-weight: 500 !important;
|
||||
border-radius: 6px !important;
|
||||
cursor: pointer !important;
|
||||
transition: all 0.2s !important;
|
||||
border: 1px solid transparent !important;
|
||||
line-height: 1.2 !important;
|
||||
white-space: nowrap !important; /* Force no wrap */
|
||||
}
|
||||
|
||||
.theme-tour-popover .driver-popover-next-btn {
|
||||
background-color: #14b8a6 !important;
|
||||
color: #ffffff !important;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-next-btn:hover { background-color: #0d9488 !important; }
|
||||
|
||||
.theme-tour-popover .driver-popover-prev-btn {
|
||||
background-color: white !important;
|
||||
color: #6b7280 !important;
|
||||
border: 1px solid #e5e7eb !important;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
|
||||
}
|
||||
.theme-tour-popover .driver-popover-prev-btn:hover { background-color: #f9fafb !important; color: #374151 !important; }
|
||||
.dark .theme-tour-popover .driver-popover-prev-btn {
|
||||
background-color: #1e293b !important;
|
||||
border-color: #475569 !important;
|
||||
color: #9ca3af !important;
|
||||
}
|
||||
|
||||
/* Arrows */
|
||||
.driver-popover-arrow { z-index: 100000001 !important; }
|
||||
.driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #ffffff !important; }
|
||||
.driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #ffffff !important; }
|
||||
|
||||
.dark .driver-popover-arrow-side-left.driver-popover-arrow { border-left-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-right.driver-popover-arrow { border-right-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-top.driver-popover-arrow { border-top-color: #1e293b !important; }
|
||||
.dark .driver-popover-arrow-side-bottom.driver-popover-arrow { border-bottom-color: #1e293b !important; }
|
||||
Reference in New Issue
Block a user