import { NavigationDeclaration, ScrollContainerDeclaration } from './navigation.types'; const MAIN_SCROLL: ScrollContainerDeclaration[] = [ { name: 'main', direction: 'vertical', description: '主内容区' }, ]; export const NAVIGATION_DECLARATION = { app: 'map', routes: [ // ========================= // Main Tabs // ========================= { path: '/', component: 'ExplorePage', params: {}, entryPoint: 'home', scrollContainers: [], // Map view itself usually isn't a standard scroll container in this context, but maybe bottom sheet is. keeping empty for now or maybe 'bottomSheet' uiStates: [ { id: 'explore.base', search: {}, description: '探索首页-地图视图' }, { id: 'explore.category_search', search: { category: 'string' }, description: '探索-分类搜索结果(如购物)', actions: [ { id: 'placeResults.sheet.close', label: '关闭搜索结果', behavior: 'submit' }, { id: 'placeResults.result.select.item', label: '点击搜索结果', behavior: 'select', scope: 'item', paramsSchema: { itemId: 'string' }, }, ], }, ], queryParams: {}, description: '探索', }, { path: '/me', component: 'MePage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [ { id: 'me.base', search: {}, description: '我-个人页(列表/保存)' }, ], queryParams: {}, description: '我的', }, { path: '/contribute', component: 'ContributePage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [ { id: 'contribute.base', search: {}, description: '贡献首页' }, ], queryParams: {}, description: '贡献', }, // ========================= // Sub Pages // ========================= { path: '/search', component: 'SearchPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [ { id: 'search.base', search: {}, description: '搜索页-历史记录', actions: [ { id: 'search.bar.input', label: '搜索地点', behavior: 'input', paramsSchema: { value: 'string' }, }, { id: 'search.voice.tap', label: '语音搜索', behavior: 'other', // Or just a button that triggers a mock voice UI } ] }, ], queryParams: {}, description: '搜索页', }, // ========================= // Profile & Settings // ========================= { path: '/profile', component: 'ProfilePage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'profile.base', search: {}, description: '个人资料菜单' }], queryParams: {}, description: '个人资料', }, { path: '/settings', component: 'SettingsPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.base', search: {}, description: '设置主页' }], queryParams: {}, description: '设置', }, { path: '/settings/app-display', component: 'AppDisplayPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.app-display.base', search: {}, description: '应用和显示设置' }], queryParams: {}, description: '应用和显示', }, { path: '/settings/app-display/language', component: 'LanguagePage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [ { id: 'settings.app-display.language.base', search: {}, description: '应用语言', actions: [ { id: 'settings.appDisplay.language.select.system', label: '选择系统默认语言', behavior: 'select' }, { id: 'settings.appDisplay.language.select.zhHans', label: '选择中文', behavior: 'select' }, { id: 'settings.appDisplay.language.select.en', label: '选择英文', behavior: 'select' }, ], }, ], queryParams: {}, description: '应用语言', }, { path: '/settings/nav', component: 'NavSettingsPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.nav.base', search: {}, description: '导航设置' }], queryParams: {}, description: '导航设置', }, { path: '/settings/getting-around', component: 'GettingAroundPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.getting-around.base', search: {}, description: '出行设置' }], queryParams: {}, description: '出行', }, { path: '/settings/location-privacy', component: 'LocationPrivacyPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.location-privacy.base', search: {}, description: '位置信息和隐私' }], queryParams: {}, description: '位置信息和隐私', }, { path: '/settings/offline-maps', component: 'OfflineMapsSettingsPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.offline-maps.base', search: {}, description: '离线地图设置' }], queryParams: {}, description: '离线地图', }, { path: '/settings/notifications', component: 'NotificationsPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.notifications.base', search: {}, description: '通知设置' }], queryParams: {}, description: '通知', }, { path: '/settings/notifications/traffic', component: 'TrafficInfoPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.notifications.traffic.base', search: {}, description: '交通信息通知' }], queryParams: {}, description: '交通信息', }, { path: '/settings/notifications/traffic/:subId', component: 'TrafficSubPage', params: { subId: 'string' }, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.notifications.traffic.sub.base', search: {}, description: '交通信息子页' }], queryParams: {}, description: '交通信息详情', }, { path: '/settings/notifications/recommendations', component: 'RecommendationsPage', params: {}, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.notifications.rec.base', search: {}, description: '个性化推荐通知' }], queryParams: {}, description: '个性化推荐', }, { path: '/settings/notifications/recommendations/:subId', component: 'RecommendationSubPage', params: { subId: 'string' }, entryPoint: 'none', scrollContainers: MAIN_SCROLL, uiStates: [{ id: 'settings.notifications.rec.sub.base', search: {}, description: '推荐子页' }], queryParams: {}, description: '推荐详情', }, ], transitions: [ // ========================= // Tab Switching // ========================= { id: 'tab.explore', from: ['/me', '/contribute'], to: '/', search: {}, searchParams: {}, mode: 'replace', params: {}, label: '切换到探索', ui: { placement: 'tabbar', icon: 'tab_explore', gesture: 'tap' }, }, { id: 'tab.me', from: ['/', '/contribute'], to: '/me', search: {}, searchParams: {}, mode: 'replace', params: {}, label: '切换到我', ui: { placement: 'tabbar', icon: 'tab_me', gesture: 'tap' }, }, { id: 'tab.contribute', from: ['/', '/me'], to: '/contribute', search: {}, searchParams: {}, mode: 'replace', params: {}, label: '切换到贡献', ui: { placement: 'tabbar', icon: 'tab_contribute', gesture: 'tap' }, }, // ========================= // Search Flow // ========================= { id: 'search.open', from: '/', to: '/search', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开搜索页', ui: { placement: 'topbar', icon: 'search_bar', gesture: 'tap' }, }, // ========================= // Profile & Settings Flow // ========================= { id: 'profile.open', from: '/', to: '/profile', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开个人资料', ui: { placement: 'topbar', icon: 'avatar', gesture: 'tap' }, }, { id: 'settings.open', from: '/profile', to: '/settings', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开设置', ui: { placement: 'content', icon: 'settings', gesture: 'tap' }, }, { id: 'settings.app-display.open', from: '/settings', to: '/settings/app-display', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开应用和显示', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.app-display.language.open', from: '/settings/app-display', to: '/settings/app-display/language', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开应用语言', ui: { placement: 'content', icon: 'language_item', gesture: 'tap' }, }, { id: 'settings.nav.open', from: '/settings', to: '/settings/nav', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开导航设置', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.getting-around.open', from: '/settings', to: '/settings/getting-around', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开出行设置', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.location-privacy.open', from: '/settings', to: '/settings/location-privacy', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开位置信息和隐私', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.offline-maps.open', from: '/settings', to: '/settings/offline-maps', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开离线地图设置', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.notifications.open', from: '/settings', to: '/settings/notifications', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开通知设置', ui: { placement: 'content', icon: 'settings_item', gesture: 'tap' }, }, { id: 'settings.notifications.traffic.open', from: '/settings/notifications', to: '/settings/notifications/traffic', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开交通信息', ui: { placement: 'content', icon: 'traffic_info', gesture: 'tap' }, }, { id: 'settings.notifications.traffic.sub.open', from: '/settings/notifications/traffic', to: '/settings/notifications/traffic/:subId', search: {}, searchParams: {}, mode: 'push', params: { subId: 'string' }, label: '打开交通信息子页', ui: { placement: 'content', icon: 'traffic_sub_item', gesture: 'tap' }, }, { id: 'settings.notifications.recommendations.open', from: '/settings/notifications', to: '/settings/notifications/recommendations', search: {}, searchParams: {}, mode: 'push', params: {}, label: '打开个性化推荐', ui: { placement: 'content', icon: 'recommendation', gesture: 'tap' }, }, { id: 'settings.notifications.rec.sub.open', from: '/settings/notifications/recommendations', to: '/settings/notifications/recommendations/:subId', search: {}, searchParams: {}, mode: 'push', params: { subId: 'string' }, label: '打开推荐子页', ui: { placement: 'content', icon: 'rec_sub_item', gesture: 'tap' }, }, ], capabilities: { historyBack: true, }, } as const satisfies NavigationDeclaration; export type TransitionId = typeof NAVIGATION_DECLARATION.transitions[number]['id'];