elk/components/command/CommandItem.vue

59 lines
1.4 KiB
Vue
Raw Normal View History

2022-12-28 16:29:07 +00:00
<script lang="ts" setup>
2023-01-07 14:52:58 +00:00
import type { ResolvedCommand } from '~/composables/command'
2022-12-28 16:29:07 +00:00
2023-01-01 22:06:27 +00:00
const emit = defineEmits<{
2022-12-28 16:29:07 +00:00
(event: 'activate'): void
}>()
const {
cmd,
index,
active = false,
} = $defineProps<{
cmd: ResolvedCommand
index: number
active?: boolean
}>()
</script>
<template>
<div
class="flex px-3 py-2 my-1 items-center rounded-lg hover:bg-active transition-all duration-65 ease-in-out cursor-pointer scroll-m-10"
:class="{ 'bg-active': active }"
:data-index="index"
2023-01-01 22:06:27 +00:00
@click="emit('activate')"
2022-12-28 16:29:07 +00:00
>
<div v-if="cmd.icon" me-2 :class="cmd.icon" />
2022-12-28 16:29:07 +00:00
<div class="flex-1 flex items-baseline gap-2">
<div :class="{ 'font-medium': active }">
{{ cmd.name }}
</div>
<div v-if="cmd.description" class="text-xs text-secondary">
{{ cmd.description }}
</div>
</div>
<div
v-if="cmd.onComplete"
class="flex items-center gap-1 transition-all duration-65 ease-in-out"
:class="active ? 'opacity-100' : 'opacity-0'"
>
<div class="text-xs text-secondary">
{{ $t('command.complete') }}
</div>
<CommandKey name="Tab" />
</div>
<div
v-if="cmd.onActivate"
class="flex items-center gap-1 transition-all duration-65 ease-in-out"
:class="active ? 'opacity-100' : 'opacity-0'"
>
<div class="text-xs text-secondary">
{{ $t('command.activate') }}
</div>
<CommandKey name="Enter" />
</div>
</div>
</template>