mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-14 12:14:41 +01:00
83 lines
2.5 KiB
Vue
83 lines
2.5 KiB
Vue
<script setup lang="ts">
|
|
import type { ShortcutsConfig } from '@nuxt/ui/composables/defineShortcuts.js'
|
|
|
|
const logs = ref<string[]>([])
|
|
const shortcutsState = ref({
|
|
'a': {
|
|
label: 'A',
|
|
disabled: false,
|
|
usingInput: false
|
|
},
|
|
'shift_i': {
|
|
label: 'Shift+I',
|
|
disabled: false,
|
|
usingInput: false
|
|
},
|
|
'g-i': {
|
|
label: 'G->I',
|
|
disabled: false,
|
|
usingInput: false
|
|
}
|
|
})
|
|
|
|
const shortcuts = computed(() => {
|
|
return Object.entries(shortcutsState.value).reduce<ShortcutsConfig>((acc, [key, { label, disabled, usingInput }]) => {
|
|
if (disabled) {
|
|
return acc
|
|
}
|
|
acc[key] = {
|
|
handler: () => { logs.value.unshift(`"${label}" triggered`) },
|
|
usingInput
|
|
}
|
|
return acc
|
|
}, {})
|
|
})
|
|
defineShortcuts(shortcuts)
|
|
</script>
|
|
|
|
<template>
|
|
<div class="w-full flex flex-col gap-4">
|
|
<UCard class="flex-1">
|
|
<template #header>
|
|
<h3 class="font-bold">
|
|
Shortcuts
|
|
</h3>
|
|
</template>
|
|
|
|
<div class="space-y-2">
|
|
<div>
|
|
<span>{{ shortcutsState.a.label }} shortcut</span>
|
|
<UCheckbox v-model="shortcutsState.a.disabled" :label="`Disable ${shortcutsState.a.label}`" />
|
|
<UCheckbox v-model="shortcutsState.a.usingInput" :label="`Using in inputs ${shortcutsState.a.label}`" />
|
|
</div>
|
|
<div>
|
|
<span>{{ shortcutsState.shift_i.label }} shortcut</span>
|
|
<UCheckbox v-model="shortcutsState.shift_i.disabled" :label="`Disable ${shortcutsState.shift_i.label}`" />
|
|
<UCheckbox v-model="shortcutsState.shift_i.usingInput" :label="`Using in inputs ${shortcutsState.shift_i.label}`" />
|
|
</div>
|
|
<div>
|
|
<span>{{ shortcutsState['g-i'].label }} shortcut</span>
|
|
<UCheckbox v-model="shortcutsState['g-i'].disabled" :label="`Disable ${shortcutsState['g-i'].label}`" />
|
|
<UCheckbox v-model="shortcutsState['g-i'].usingInput" :label="`Using in inputs ${shortcutsState['g-i'].label}`" />
|
|
</div>
|
|
<UInput placeholder="Input to focus" />
|
|
</div>
|
|
</UCard>
|
|
|
|
<UCard :ui="{ body: 'h-[200px] overflow-y-auto' }" class="flex-1">
|
|
<template #header>
|
|
<div class="flex items-center justify-between gap-4">
|
|
<h3 class="font-bold">
|
|
Logs
|
|
</h3>
|
|
<UButton icon="i-lucide-trash" size="sm" color="neutral" class="-my-1" @click="logs = []" />
|
|
</div>
|
|
</template>
|
|
|
|
<p v-for="(log, index) of logs" :key="index">
|
|
{{ log }}
|
|
</p>
|
|
</UCard>
|
|
</div>
|
|
</template>
|