2022-11-27 11:35:26 +09:00
|
|
|
<script setup lang="ts">
|
2022-11-29 17:15:05 +09:00
|
|
|
const props = defineProps<{
|
2022-11-28 01:59:33 +09:00
|
|
|
text?: string
|
2022-11-27 11:35:26 +09:00
|
|
|
icon: string
|
2022-12-01 02:15:18 +09:00
|
|
|
to: string | Record<string, string>
|
2022-11-27 11:35:26 +09:00
|
|
|
}>()
|
2022-11-28 01:59:33 +09:00
|
|
|
|
|
|
|
defineSlots<{
|
|
|
|
icon: {}
|
|
|
|
default: {}
|
|
|
|
}>()
|
2022-11-29 17:15:05 +09:00
|
|
|
|
|
|
|
const router = useRouter()
|
|
|
|
|
|
|
|
useCommand({
|
|
|
|
scope: 'Navigation',
|
|
|
|
|
2022-12-01 22:45:13 +09:00
|
|
|
name: () => props.text ?? (typeof props.to === 'string' ? props.to as string : props.to.name),
|
2022-11-29 17:15:05 +09:00
|
|
|
icon: () => props.icon,
|
|
|
|
|
|
|
|
onActivate() {
|
|
|
|
router.push(props.to)
|
|
|
|
},
|
|
|
|
})
|
2022-11-27 11:35:26 +09:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2022-11-30 05:15:53 +09:00
|
|
|
<NuxtLink :to="to" active-class="text-primary" group focus:outline-none @click="$scrollToTop">
|
2022-12-04 23:17:02 +09:00
|
|
|
<div flex w-fit px5 py2 md:gap2 gap4 items-center transition-100 rounded-full group-hover:bg-active group-focus-visible:ring="2 current">
|
2022-11-27 11:35:26 +09:00
|
|
|
<slot name="icon">
|
2022-12-04 23:17:02 +09:00
|
|
|
<div :class="icon" md:text-size-inherit text-xl />
|
2022-11-27 11:35:26 +09:00
|
|
|
</slot>
|
2022-11-28 01:59:33 +09:00
|
|
|
<slot>
|
|
|
|
<span>{{ text }}</span>
|
|
|
|
</slot>
|
2022-11-27 11:35:26 +09:00
|
|
|
</div>
|
|
|
|
</NuxtLink>
|
|
|
|
</template>
|