You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
7.0 KiB
TypeScript
264 lines
7.0 KiB
TypeScript
import { computed } from 'vue'
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
|
import type { CMenuEntry } from '@/index'
|
|
|
|
export function useTopNavigation() {
|
|
const route = useRoute()
|
|
const router = useRouter()
|
|
|
|
return computed<CMenuEntry[]>(() => [
|
|
{
|
|
id: 'home',
|
|
label: 'Home',
|
|
icon: '⌂',
|
|
active: route.name === 'home',
|
|
command: () => void router.push({ name: 'home' }),
|
|
},
|
|
{
|
|
id: 'components',
|
|
label: 'Components',
|
|
icon: '▦',
|
|
active: route.path.startsWith('/components'),
|
|
children: [
|
|
{
|
|
id: 'app-bar-menu',
|
|
label: 'AppBar & Menu',
|
|
icon: '☰',
|
|
active: route.name === 'app-bar-menu',
|
|
command: () => void router.push({ name: 'app-bar-menu' }),
|
|
},
|
|
{
|
|
id: 'sidebar',
|
|
label: 'Sidebar',
|
|
icon: '◧',
|
|
active: route.name === 'sidebar',
|
|
command: () => void router.push({ name: 'sidebar' }),
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
id: 'button',
|
|
label: 'Button',
|
|
icon: '▭',
|
|
active: route.name === 'button',
|
|
command: () => void router.push({ name: 'button' }),
|
|
},
|
|
{
|
|
id: 'form-field',
|
|
label: 'Form Field',
|
|
icon: '▤',
|
|
active: route.name === 'form-field',
|
|
command: () => void router.push({ name: 'form-field' }),
|
|
},
|
|
{
|
|
id: 'input',
|
|
label: 'Input',
|
|
icon: '⌨',
|
|
active: route.name === 'input',
|
|
command: () => void router.push({ name: 'input' }),
|
|
},
|
|
{
|
|
id: 'number-input',
|
|
label: 'Number Input',
|
|
icon: '±',
|
|
active: route.name === 'number-input',
|
|
command: () => void router.push({ name: 'number-input' }),
|
|
},
|
|
{
|
|
id: 'input-group',
|
|
label: 'Input Group',
|
|
icon: '⊞',
|
|
active: route.name === 'input-group',
|
|
command: () => void router.push({ name: 'input-group' }),
|
|
},
|
|
{
|
|
id: 'text-area',
|
|
label: 'Text Area',
|
|
icon: '¶',
|
|
active: route.name === 'text-area',
|
|
command: () => void router.push({ name: 'text-area' }),
|
|
},
|
|
{
|
|
id: 'password',
|
|
label: 'Password',
|
|
icon: '🔒',
|
|
active: route.name === 'password',
|
|
command: () => void router.push({ name: 'password' }),
|
|
},
|
|
{
|
|
id: 'checkbox',
|
|
label: 'Checkbox',
|
|
icon: '☑',
|
|
active: route.name === 'checkbox',
|
|
command: () => void router.push({ name: 'checkbox' }),
|
|
},
|
|
{
|
|
id: 'radio',
|
|
label: 'Radio',
|
|
icon: '◉',
|
|
active: route.name === 'radio',
|
|
command: () => void router.push({ name: 'radio' }),
|
|
},
|
|
{
|
|
id: 'select',
|
|
label: 'Select',
|
|
icon: '▾',
|
|
active: route.name === 'select',
|
|
command: () => void router.push({ name: 'select' }),
|
|
},
|
|
{
|
|
id: 'multi-select',
|
|
label: 'Multi Select',
|
|
icon: '☷',
|
|
active: route.name === 'multi-select',
|
|
command: () => void router.push({ name: 'multi-select' }),
|
|
},
|
|
{
|
|
id: 'auto-complete',
|
|
label: 'Auto Complete',
|
|
icon: '⌕',
|
|
active: route.name === 'auto-complete',
|
|
command: () => void router.push({ name: 'auto-complete' }),
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
id: 'icon',
|
|
label: 'Icon',
|
|
icon: '☆',
|
|
active: route.name === 'icon',
|
|
command: () => void router.push({ name: 'icon' }),
|
|
},
|
|
{
|
|
id: 'emoji',
|
|
label: 'Emoji',
|
|
icon: '☺︎',
|
|
active: route.name === 'emoji',
|
|
command: () => void router.push({ name: 'emoji' }),
|
|
},
|
|
],
|
|
},
|
|
])
|
|
}
|
|
|
|
export function useComponentNavigation() {
|
|
const route = useRoute()
|
|
const router = useRouter()
|
|
|
|
return computed<CMenuEntry[]>(() => [
|
|
{
|
|
id: 'app-bar-menu',
|
|
label: 'AppBar & Menu',
|
|
icon: '☰',
|
|
active: route.name === 'app-bar-menu',
|
|
command: () => void router.push({ name: 'app-bar-menu' }),
|
|
},
|
|
{
|
|
id: 'sidebar',
|
|
label: 'Sidebar',
|
|
icon: '◧',
|
|
active: route.name === 'sidebar',
|
|
command: () => void router.push({ name: 'sidebar' }),
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
id: 'button',
|
|
label: 'Button',
|
|
icon: '▭',
|
|
active: route.name === 'button',
|
|
command: () => void router.push({ name: 'button' }),
|
|
},
|
|
{
|
|
id: 'form-field',
|
|
label: 'Form Field',
|
|
icon: '▤',
|
|
active: route.name === 'form-field',
|
|
command: () => void router.push({ name: 'form-field' }),
|
|
},
|
|
{
|
|
id: 'input',
|
|
label: 'Input',
|
|
icon: '⌨',
|
|
active: route.name === 'input',
|
|
command: () => void router.push({ name: 'input' }),
|
|
},
|
|
{
|
|
id: 'number-input',
|
|
label: 'Number Input',
|
|
icon: '±',
|
|
active: route.name === 'number-input',
|
|
command: () => void router.push({ name: 'number-input' }),
|
|
},
|
|
{
|
|
id: 'input-group',
|
|
label: 'Input Group',
|
|
icon: '⊞',
|
|
active: route.name === 'input-group',
|
|
command: () => void router.push({ name: 'input-group' }),
|
|
},
|
|
{
|
|
id: 'text-area',
|
|
label: 'Text Area',
|
|
icon: '¶',
|
|
active: route.name === 'text-area',
|
|
command: () => void router.push({ name: 'text-area' }),
|
|
},
|
|
{
|
|
id: 'password',
|
|
label: 'Password',
|
|
icon: '🔒',
|
|
active: route.name === 'password',
|
|
command: () => void router.push({ name: 'password' }),
|
|
},
|
|
{
|
|
id: 'checkbox',
|
|
label: 'Checkbox',
|
|
icon: '☑',
|
|
active: route.name === 'checkbox',
|
|
command: () => void router.push({ name: 'checkbox' }),
|
|
},
|
|
{
|
|
id: 'radio',
|
|
label: 'Radio',
|
|
icon: '◉',
|
|
active: route.name === 'radio',
|
|
command: () => void router.push({ name: 'radio' }),
|
|
},
|
|
{
|
|
id: 'select',
|
|
label: 'Select',
|
|
icon: '▾',
|
|
active: route.name === 'select',
|
|
command: () => void router.push({ name: 'select' }),
|
|
},
|
|
{
|
|
id: 'multi-select',
|
|
label: 'Multi Select',
|
|
icon: '☷',
|
|
active: route.name === 'multi-select',
|
|
command: () => void router.push({ name: 'multi-select' }),
|
|
},
|
|
{
|
|
id: 'auto-complete',
|
|
label: 'Auto Complete',
|
|
icon: '⌕',
|
|
active: route.name === 'auto-complete',
|
|
command: () => void router.push({ name: 'auto-complete' }),
|
|
},
|
|
{ type: 'separator' },
|
|
{
|
|
id: 'icon',
|
|
label: 'Icon',
|
|
icon: '☆',
|
|
active: route.name === 'icon',
|
|
command: () => void router.push({ name: 'icon' }),
|
|
},
|
|
{
|
|
id: 'emoji',
|
|
label: 'Emoji',
|
|
icon: '☺︎',
|
|
active: route.name === 'emoji',
|
|
command: () => void router.push({ name: 'emoji' }),
|
|
},
|
|
])
|
|
}
|