primitives
Toggle
Toggle — базовый примитив RevueUI (Reka UI + shadcn-совместимый API).
Загрузка превью…
src/ui/toggle/Toggle.vue
<!-- Radix `Toggle` → Reka UI `Toggle`, тот же примитив. -->
<script setup lang="ts">
import type { HTMLAttributes } from "vue"
import { computed } from "vue"
import { Toggle as TogglePrimitive, type ToggleEmits, type ToggleProps, useForwardPropsEmits } from "reka-ui"
import { cn } from "@/lib/utils"
import { toggleVariants, type ToggleVariants } from "./variants"
const props = withDefaults(
defineProps<
ToggleProps & {
/** Доп. классы. Имя `class` — соглашение shadcn-vue (не `className`). */
class?: HTMLAttributes["class"]
variant?: ToggleVariants["variant"]
size?: ToggleVariants["size"]
}
>(),
{
variant: "default",
size: "default",
}
)
const emits = defineEmits<ToggleEmits>()
const delegatedProps = computed(() => {
const { class: _class, variant: _variant, size: _size, ...delegated } = props
return delegated
})
const forwarded = useForwardPropsEmits(delegatedProps, emits)
</script>
<template>
<TogglePrimitive
data-slot="toggle"
v-bind="forwarded"
:class="cn(toggleVariants({ variant: props.variant, size: props.size }), props.class)"
>
<slot />
</TogglePrimitive>
</template>
src/ui/toggle/index.ts
export { default as Toggle } from "./Toggle.vue"
export { toggleVariants, type ToggleVariants } from "./variants"
src/ui/toggle/variants.ts
import { cva, type VariantProps } from "class-variance-authority"
/**
* Перенесено дословно (registry/bases/radix/ui/toggle.tsx, MIT).
*
* cva-блоки — чистые JS-объекты и переносятся между React и Vue без единой
* правки.
*/
export const toggleVariants = cva(
"cn-toggle group/toggle inline-flex items-center justify-center whitespace-nowrap outline-none hover:bg-muted focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
{
variants: {
variant: {
default: "cn-toggle-variant-default",
outline: "cn-toggle-variant-outline",
},
size: {
default: "cn-toggle-size-default",
sm: "cn-toggle-size-sm",
lg: "cn-toggle-size-lg",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
export type ToggleVariants = VariantProps<typeof toggleVariants>
Установка
npx shadcn-vue@latest add https://revueui.rootapi.dev/r/toggle.jsonЗависимости реестра
npm-зависимости
- class-variance-authority
- reka-ui
Источник: порт из ReUI (Keenthemes, MIT)