primitives
Kbd
Kbd — базовый примитив RevueUI (Reka UI + shadcn-совместимый API).
Загрузка превью…
src/ui/kbd/Kbd.vue
<script setup lang="ts">
import type { HTMLAttributes } from "vue"
import { cn } from "@/lib/utils"
const props = defineProps<{
/** Доп. классы. Имя `class` — соглашение shadcn-vue (не `className`). */
class?: HTMLAttributes["class"]
}>()
</script>
<template>
<kbd
data-slot="kbd"
:class="cn('cn-kbd pointer-events-none inline-flex items-center justify-center select-none', props.class)"
>
<slot />
</kbd>
</template>
src/ui/kbd/KbdGroup.vue
<!--
Верность оригиналу: в апстриме `KbdGroup` типизирован как
`React.ComponentProps<"div">`, но фактически рендерит тег `<kbd>` (а не
`<div>`). Это выглядит как недосмотр апстрима, но правило 4a требует
сначала повторить поведение буква в букву, а не «исправлять» на автомате.
-->
<script setup lang="ts">
import type { HTMLAttributes } from "vue"
import { cn } from "@/lib/utils"
const props = defineProps<{
/** Доп. классы. Имя `class` — соглашение shadcn-vue (не `className`). */
class?: HTMLAttributes["class"]
}>()
</script>
<template>
<kbd data-slot="kbd-group" :class="cn('cn-kbd-group inline-flex items-center', props.class)">
<slot />
</kbd>
</template>
src/ui/kbd/index.ts
export { default as Kbd } from "./Kbd.vue"
export { default as KbdGroup } from "./KbdGroup.vue"
Установка
npx shadcn-vue@latest add https://revueui.rootapi.dev/r/kbd.jsonЗависимости реестра
Источник: порт из ReUI (Keenthemes, MIT)