611 lines
21 KiB
TypeScript
611 lines
21 KiB
TypeScript
import type { NavigationDeclaration, ScrollContainerDeclaration } from './navigation.types';
|
|
|
|
const MAIN_SCROLL: ScrollContainerDeclaration[] = [
|
|
{ name: 'main', direction: 'vertical', description: '主内容区' },
|
|
];
|
|
|
|
const NO_SCROLL: ScrollContainerDeclaration[] = [];
|
|
|
|
// Query params are defined per-route to avoid over-expansion in graph generation
|
|
|
|
export const NAVIGATION_DECLARATION = {
|
|
app: 'file_manager',
|
|
|
|
routes: [
|
|
// =========================
|
|
// Main tabs (using pathname routing)
|
|
// =========================
|
|
{
|
|
path: '/',
|
|
component: 'BrowseHomePage',
|
|
params: {},
|
|
entryPoint: 'home',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'browse.base', search: {}, description: '浏览主页' },
|
|
{ id: 'browse.modal.details', search: { modal: 'details' }, description: '浏览主页 - 详情弹窗' },
|
|
{ id: 'browse.modal.rename', search: { modal: 'rename' }, description: '浏览主页 - 重命名弹窗' },
|
|
{ id: 'browse.select', search: { mode: 'select' }, description: '浏览主页 - 选择模式' },
|
|
{ id: 'browse.select.modal.delete', search: { mode: 'select', modal: 'delete' }, description: '浏览主页 - 选择模式 - 删除确认' },
|
|
{ id: 'browse.select.modal.more', search: { mode: 'select', modal: 'more' }, description: '浏览主页 - 选择模式 - 更多菜单' },
|
|
{ id: 'browse.select.modal.transfer', search: { mode: 'select', modal: 'transfer' }, description: '浏览主页 - 选择模式 - 复制/移动目标选择' },
|
|
{ id: 'browse.select.modal.transfer.newFolder', search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' }, description: '浏览主页 - 选择模式 - 复制/移动目标选择 - 新建文件夹' },
|
|
],
|
|
queryParams: {},
|
|
description: '浏览主页',
|
|
},
|
|
{
|
|
path: '/recent',
|
|
component: 'RecentPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'recent.base', search: {}, description: '最近文件' },
|
|
{ id: 'recent.modal.details', search: { modal: 'details' }, description: '最近文件 - 详情弹窗' },
|
|
{ id: 'recent.modal.rename', search: { modal: 'rename' }, description: '最近文件 - 重命名弹窗' },
|
|
{ id: 'recent.select', search: { mode: 'select' }, description: '最近文件 - 选择模式' },
|
|
{ id: 'recent.select.modal.delete', search: { mode: 'select', modal: 'delete' }, description: '最近文件 - 选择模式 - 删除确认' },
|
|
{ id: 'recent.select.modal.more', search: { mode: 'select', modal: 'more' }, description: '最近文件 - 选择模式 - 更多菜单' },
|
|
{ id: 'recent.select.modal.transfer', search: { mode: 'select', modal: 'transfer' }, description: '最近文件 - 选择模式 - 复制/移动目标选择' },
|
|
{ id: 'recent.select.modal.transfer.newFolder', search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' }, description: '最近文件 - 选择模式 - 复制/移动目标选择 - 新建文件夹' },
|
|
],
|
|
queryParams: {},
|
|
description: '最近文件',
|
|
},
|
|
{
|
|
path: '/cloud',
|
|
component: 'CloudPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'cloud.base', search: {}, description: '云盘' },
|
|
],
|
|
queryParams: {},
|
|
description: '云盘',
|
|
},
|
|
|
|
// =========================
|
|
// Folder browser
|
|
// =========================
|
|
{
|
|
path: '/folder',
|
|
component: 'FolderPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'folder.base', search: {}, description: '文件夹浏览' },
|
|
{ id: 'folder.modal.details', search: { modal: 'details' }, description: '文件夹浏览 - 详情弹窗' },
|
|
{ id: 'folder.modal.rename', search: { modal: 'rename' }, description: '文件夹浏览 - 重命名弹窗' },
|
|
{ id: 'folder.modal.newFolder', search: { modal: 'newFolder' }, description: '文件夹浏览 - 新建文件夹' },
|
|
{ id: 'folder.select', search: { mode: 'select' }, description: '文件夹浏览 - 选择模式' },
|
|
{ id: 'folder.select.modal.delete', search: { mode: 'select', modal: 'delete' }, description: '文件夹浏览 - 选择模式 - 删除确认' },
|
|
{ id: 'folder.select.modal.more', search: { mode: 'select', modal: 'more' }, description: '文件夹浏览 - 选择模式 - 更多菜单' },
|
|
{ id: 'folder.select.modal.transfer', search: { mode: 'select', modal: 'transfer' }, description: '文件夹浏览 - 选择模式 - 复制/移动目标选择' },
|
|
{ id: 'folder.select.modal.transfer.newFolder', search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' }, description: '文件夹浏览 - 选择模式 - 复制/移动目标选择 - 新建文件夹' },
|
|
],
|
|
queryParams: { path: 'string' },
|
|
description: '文件夹浏览',
|
|
},
|
|
{
|
|
path: '/text',
|
|
component: 'TextPreviewPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'textPreview.base', search: {}, description: '文本文件预览' },
|
|
],
|
|
queryParams: { path: 'string' },
|
|
description: '文本文件预览',
|
|
},
|
|
{
|
|
path: '/pdf',
|
|
component: 'PdfPreviewPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: NO_SCROLL,
|
|
uiStates: [
|
|
{ id: 'pdfPreview.base', search: {}, description: 'PDF 文件预览' },
|
|
],
|
|
queryParams: { path: 'string' },
|
|
description: 'PDF 文件预览',
|
|
},
|
|
|
|
// =========================
|
|
// Category views
|
|
// =========================
|
|
{
|
|
path: '/category/:category',
|
|
component: 'CategoryPage',
|
|
params: { category: 'string' },
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'category.base', search: {}, description: '分类文件' },
|
|
],
|
|
queryParams: {},
|
|
description: '分类文件(图片/视频/音频/文档)',
|
|
},
|
|
],
|
|
|
|
transitions: [
|
|
// =========================
|
|
// 选择模式 - 浏览页
|
|
// =========================
|
|
{
|
|
id: 'browse.select.enter',
|
|
from: { path: '/', search: { mode: null } },
|
|
to: '/',
|
|
search: { mode: 'select' },
|
|
searchParams: { selected: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '进入浏览选择模式',
|
|
ui: { placement: 'content', icon: 'select_enter', gesture: 'longPress' },
|
|
},
|
|
{
|
|
id: 'browse.select.exit',
|
|
from: { path: '/', search: { mode: 'select' } },
|
|
to: '/',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '退出浏览选择模式',
|
|
ui: { placement: 'content', icon: 'select_exit', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.delete.open',
|
|
from: { path: '/', search: { mode: 'select', modal: null } },
|
|
to: '/',
|
|
search: { mode: 'select', modal: 'delete' },
|
|
searchParams: {},
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开删除确认弹窗',
|
|
ui: { placement: 'content', icon: 'modal_delete', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.more.open',
|
|
from: { path: '/', search: { mode: 'select', modal: null } },
|
|
to: '/',
|
|
search: { mode: 'select', modal: 'more' },
|
|
searchParams: {},
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开更多菜单',
|
|
ui: { placement: 'content', icon: 'modal_more', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.transfer.open',
|
|
from: { path: '/', search: { mode: 'select' } },
|
|
to: '/',
|
|
search: { mode: 'select', modal: 'transfer' },
|
|
searchParams: { operation: 'string' },
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开复制/移动目标选择弹窗',
|
|
ui: { placement: 'content', icon: 'modal_transfer', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.transfer.newFolder.open',
|
|
from: { path: '/', search: { mode: 'select', modal: 'transfer', transferDialog: null } },
|
|
to: '/',
|
|
search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' },
|
|
searchParams: {},
|
|
preserveParams: ['selected', 'operation'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '在复制/移动目标选择中打开新建文件夹弹窗',
|
|
ui: { placement: 'topbar', icon: 'modal_new_folder', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.details.open',
|
|
from: { path: '/', search: { mode: 'select' } },
|
|
to: '/',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.rename.open',
|
|
from: { path: '/', search: { mode: 'select' } },
|
|
to: '/',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.details.open.fromBase',
|
|
from: '/',
|
|
to: '/',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'browse.modal.rename.open.fromBase',
|
|
from: '/',
|
|
to: '/',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// 选择模式 - 最近页
|
|
// =========================
|
|
{
|
|
id: 'recent.select.enter',
|
|
from: { path: '/recent', search: { mode: null } },
|
|
to: '/recent',
|
|
search: { mode: 'select' },
|
|
searchParams: { selected: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '进入最近选择模式',
|
|
ui: { placement: 'content', icon: 'select_enter', gesture: 'longPress' },
|
|
},
|
|
{
|
|
id: 'recent.select.exit',
|
|
from: { path: '/recent', search: { mode: 'select' } },
|
|
to: '/recent',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '退出最近选择模式',
|
|
ui: { placement: 'content', icon: 'select_exit', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.delete.open',
|
|
from: { path: '/recent', search: { mode: 'select', modal: null } },
|
|
to: '/recent',
|
|
search: { mode: 'select', modal: 'delete' },
|
|
searchParams: {},
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开删除确认弹窗',
|
|
ui: { placement: 'content', icon: 'modal_delete', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.more.open',
|
|
from: { path: '/recent', search: { mode: 'select', modal: null } },
|
|
to: '/recent',
|
|
search: { mode: 'select', modal: 'more' },
|
|
searchParams: {},
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开更多菜单',
|
|
ui: { placement: 'content', icon: 'modal_more', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.transfer.open',
|
|
from: { path: '/recent', search: { mode: 'select' } },
|
|
to: '/recent',
|
|
search: { mode: 'select', modal: 'transfer' },
|
|
searchParams: { operation: 'string' },
|
|
preserveParams: ['selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开复制/移动目标选择弹窗',
|
|
ui: { placement: 'content', icon: 'modal_transfer', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.transfer.newFolder.open',
|
|
from: { path: '/recent', search: { mode: 'select', modal: 'transfer', transferDialog: null } },
|
|
to: '/recent',
|
|
search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' },
|
|
searchParams: {},
|
|
preserveParams: ['selected', 'operation'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '在复制/移动目标选择中打开新建文件夹弹窗',
|
|
ui: { placement: 'topbar', icon: 'modal_new_folder', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.details.open',
|
|
from: { path: '/recent', search: { mode: 'select' } },
|
|
to: '/recent',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.rename.open',
|
|
from: { path: '/recent', search: { mode: 'select' } },
|
|
to: '/recent',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.details.open.fromBase',
|
|
from: '/recent',
|
|
to: '/recent',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'recent.modal.rename.open.fromBase',
|
|
from: '/recent',
|
|
to: '/recent',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: [],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// 选择模式 - 文件夹页
|
|
// =========================
|
|
{
|
|
id: 'folder.select.enter',
|
|
from: { path: '/folder', search: { mode: null } },
|
|
to: '/folder',
|
|
search: { mode: 'select' },
|
|
searchParams: { selected: 'string' },
|
|
preserveParams: ['path'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '进入文件夹选择模式',
|
|
ui: { placement: 'content', icon: 'select_enter', gesture: 'longPress' },
|
|
},
|
|
{
|
|
id: 'folder.select.exit',
|
|
from: { path: '/folder', search: { mode: 'select' } },
|
|
to: '/folder',
|
|
search: {},
|
|
searchParams: {},
|
|
preserveParams: ['path'],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '退出文件夹选择模式',
|
|
ui: { placement: 'content', icon: 'select_exit', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.delete.open',
|
|
from: { path: '/folder', search: { mode: 'select', modal: null } },
|
|
to: '/folder',
|
|
search: { mode: 'select', modal: 'delete' },
|
|
searchParams: {},
|
|
preserveParams: ['path', 'selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开删除确认弹窗',
|
|
ui: { placement: 'content', icon: 'modal_delete', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.more.open',
|
|
from: { path: '/folder', search: { mode: 'select', modal: null } },
|
|
to: '/folder',
|
|
search: { mode: 'select', modal: 'more' },
|
|
searchParams: {},
|
|
preserveParams: ['path', 'selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开更多菜单',
|
|
ui: { placement: 'content', icon: 'modal_more', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.transfer.open',
|
|
from: { path: '/folder', search: { mode: 'select' } },
|
|
to: '/folder',
|
|
search: { mode: 'select', modal: 'transfer' },
|
|
searchParams: { operation: 'string' },
|
|
preserveParams: ['path', 'selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开复制/移动目标选择弹窗',
|
|
ui: { placement: 'content', icon: 'modal_transfer', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.transfer.newFolder.open',
|
|
from: { path: '/folder', search: { mode: 'select', modal: 'transfer', transferDialog: null } },
|
|
to: '/folder',
|
|
search: { mode: 'select', modal: 'transfer', transferDialog: 'newFolder' },
|
|
searchParams: {},
|
|
preserveParams: ['path', 'selected', 'operation'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '在复制/移动目标选择中打开新建文件夹弹窗',
|
|
ui: { placement: 'topbar', icon: 'modal_new_folder', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.newFolder.open',
|
|
from: { path: '/folder', search: { modal: null } },
|
|
to: '/folder',
|
|
search: { modal: 'newFolder' },
|
|
searchParams: {},
|
|
preserveParams: ['path', 'mode', 'selected'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开新建文件夹弹窗',
|
|
ui: { placement: 'topbar', icon: 'modal_new_folder', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.details.open',
|
|
from: { path: '/folder', search: { mode: 'select' } },
|
|
to: '/folder',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: ['path'],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.rename.open',
|
|
from: { path: '/folder', search: { mode: 'select' } },
|
|
to: '/folder',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: ['path'],
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.details.open.fromBase',
|
|
from: '/folder',
|
|
to: '/folder',
|
|
search: { modal: 'details' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: ['path'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开详情弹窗',
|
|
ui: { placement: 'content', icon: 'modal_details', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'folder.modal.rename.open.fromBase',
|
|
from: '/folder',
|
|
to: '/folder',
|
|
search: { modal: 'rename' },
|
|
searchParams: { itemId: 'string' },
|
|
preserveParams: ['path'],
|
|
mode: 'push',
|
|
params: {},
|
|
label: '从基础状态打开重命名弹窗',
|
|
ui: { placement: 'content', icon: 'modal_rename', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// 底部 Tab 切换
|
|
// =========================
|
|
{
|
|
id: 'tab.browse',
|
|
from: ['/recent', '/cloud'],
|
|
to: '/',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到浏览',
|
|
ui: { placement: 'tabbar', icon: 'tab_browse', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'tab.recent',
|
|
from: ['/', '/cloud'],
|
|
to: '/recent',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到最近',
|
|
ui: { placement: 'tabbar', icon: 'tab_recent', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'tab.cloud',
|
|
from: ['/', '/recent'],
|
|
to: '/cloud',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '切换到云盘',
|
|
ui: { placement: 'tabbar', icon: 'tab_cloud', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// 分类入口
|
|
// =========================
|
|
{
|
|
id: 'category.open',
|
|
from: ['/'],
|
|
to: '/category/:category',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: { category: 'string' },
|
|
label: '打开分类',
|
|
ui: { placement: 'content', icon: 'category', gesture: 'tap' },
|
|
},
|
|
|
|
// =========================
|
|
// 文件夹浏览
|
|
// =========================
|
|
{
|
|
id: 'folder.open',
|
|
from: ['/', '/folder'],
|
|
to: '/folder',
|
|
search: {},
|
|
searchParams: { path: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开文件夹',
|
|
ui: { placement: 'content', icon: 'folder', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'file.text.open',
|
|
from: ['/', '/folder'],
|
|
to: '/text',
|
|
search: {},
|
|
searchParams: { path: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开文本文件',
|
|
ui: { placement: 'content', icon: 'file_text', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'file.pdf.open',
|
|
from: ['/', '/folder'],
|
|
to: '/pdf',
|
|
search: {},
|
|
searchParams: { path: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开 PDF 文件',
|
|
ui: { placement: 'content', icon: 'file_pdf', gesture: 'tap' },
|
|
},
|
|
],
|
|
|
|
capabilities: {
|
|
historyBack: true,
|
|
},
|
|
} as const satisfies NavigationDeclaration;
|
|
|
|
export type TransitionId = (typeof NAVIGATION_DECLARATION.transitions)[number]['id'];
|