button-group
Segmented control with dropdown inside button group
Segmented control with dropdown inside button group
Загрузка превью…
src/button-group/c-button-group-34.vue
<script setup lang="ts">
import { ref } from "vue"
import { Button } from "@/components/ui/button"
import { ButtonGroup } from "@/components/ui/button-group"
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
const items = [
{ id: "Routes", label: "Routes", icon: "route" },
{ id: "Paths", label: "Paths", icon: "waypoints" },
{ id: "Bot Name", label: "Bot Name", icon: "bot" },
]
const active = ref("Paths")
</script>
<template>
<ButtonGroup>
<Button
v-for="item in items"
:key="item.id"
variant="outline"
:class="active === item.id ? 'bg-muted' : ''"
@click="active = item.id"
>
<svg
v-if="item.icon === 'route'"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
class="lucide lucide-route size-3.5 opacity-60"
>
<circle cx="6" cy="19" r="3" />
<path d="M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15" />
<circle cx="18" cy="5" r="3" />
</svg>
<svg
v-else-if="item.icon === 'waypoints'"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
class="lucide lucide-waypoints size-3.5 opacity-60"
>
<circle cx="12" cy="4.5" r="2.5" />
<path d="m10.2 6.3-3.9 3.9" />
<circle cx="4.5" cy="12" r="2.5" />
<path d="M7 12h10" />
<circle cx="19.5" cy="12" r="2.5" />
<path d="m13.8 17.7 3.9-3.9" />
<circle cx="12" cy="19.5" r="2.5" />
</svg>
<svg
v-else
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
class="lucide lucide-bot size-3.5 opacity-60"
>
<path d="M12 8V4H8" />
<rect width="16" height="12" x="4" y="8" rx="2" />
<path d="M2 14h2" />
<path d="M20 14h2" />
<path d="M15 13v2" />
<path d="M9 13v2" />
</svg>
{{ item.label }}
</Button>
<DropdownMenu>
<DropdownMenuTrigger as-child>
<Button variant="outline" size="icon">
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
aria-hidden="true"
class="lucide lucide-chevron-down"
>
<path d="m6 9 6 6 6-6" />
</svg>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" class="min-w-40">
<DropdownMenuItem>Filter by Group</DropdownMenuItem>
<DropdownMenuItem>Sort by Name</DropdownMenuItem>
<DropdownMenuItem>Export Data</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</ButtonGroup>
</template>
Установка
npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-button-group-34.jsonЗависимости реестра
Источник: порт из ReUI (Keenthemes, MIT)