टॉगल समूह
संपादक टूलबार, दृश्य स्विचर और फ़िल्टर बार के लिए द्वि-स्थिति बटन समूह — नियोब्रूटलिस्ट शैली के बॉर्डर और शैडोज़ के साथ।
import { Bold, Italic, Underline } from "lucide-react"
import {टॉगल ग्रुप दो-स्थिति वाले बटनों की एक पंक्ति है, जिसमें एक समय पर एक (डिफ़ॉल्ट) या कई (multiple) बटन दबे रह सकते हैं। यह Base UI Toggle Group कंपोनेंट पर बना है और नियोब्रूटलिस्ट रेसिपी के अनुसार स्टाइल किया गया है: मोटे बॉर्डर, कठोर छायाएँ और बोल्ड टाइपोग्राफ़ी।
इसे इन स्थितियों में चुनें:
- एडिटर टूलबार —
multipleके साथ बोल्ड/इटैलिक/अंडरलाइन, टेक्स्ट अलाइनमेंट और लिस्ट स्टाइल। - व्यू स्विचर — ग्रिड बनाम सूची, चार्ट बनाम टेबल, दिन/सप्ताह/महीना; डिफ़ॉल्ट रूप से अधिकतम एक ही सक्रिय रहता है।
- फ़िल्टर बार — टैग, कैटेगरी या फ़ैसेट, जिन्हें उपयोगकर्ता चालू-बंद करके जोड़ता-हटाता रहे।
इंस्टॉलेशन#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/toggle-group.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/toggle-group.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/toggle-group.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/toggle-group.json
निम्नलिखित डिपेंडेंसीज़ इंस्टॉल करें:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
नीचे दिए गए कोड को कॉपी करके अपने प्रोजेक्ट में पेस्ट करें।
"use client"
import * as React from "react"
import { type VariantProps } from "class-variance-authority"
import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
import { toggleVariants } from "@/components/ui/toggle"
const ToggleGroupContext = React.createContext<
VariantProps<typeof toggleVariants> & {
spacing?: number
orientation?: "horizontal" | "vertical"
}
>({
size: "default",
variant: "default",
spacing: 2,
orientation: "horizontal",
})
function ToggleGroup({
className,
variant,
size,
spacing = 2,
orientation = "horizontal",
children,
...props
}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &
VariantProps<typeof toggleVariants> & {
spacing?: number
orientation?: "horizontal" | "vertical"
}) {
return (
<ToggleGroupPrimitive.Root
data-slot="toggle-group"
data-variant={variant}
data-size={size}
data-spacing={spacing}
data-orientation={orientation}
style={{ "--gap": spacing } as React.CSSProperties}
className={cn(
"group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch",
className
)}
{...props}
>
<ToggleGroupContext.Provider
value={{ variant, size, spacing, orientation }}
>
{children}
</ToggleGroupContext.Provider>
</ToggleGroupPrimitive.Root>
)
}
function ToggleGroupItem({
className,
children,
variant = "default",
size = "default",
...props
}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &
VariantProps<typeof toggleVariants>) {
const context = React.useContext(ToggleGroupContext)
return (
<ToggleGroupPrimitive.Item
data-slot="toggle-group-item"
data-variant={context.variant || variant}
data-size={context.size || size}
data-spacing={context.spacing}
className={cn(
"shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",
toggleVariants({
variant: context.variant || variant,
size: context.size || size,
}),
className
)}
{...props}
>
{children}
</ToggleGroupPrimitive.Item>
)
}
export { ToggleGroup, ToggleGroupItem }
इंपोर्ट पाथ को अपने प्रोजेक्ट सेटअप के अनुसार अपडेट करें।
उपयोग#
import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"<ToggleGroup type="single">
<ToggleGroupItem value="a">A</ToggleGroupItem>
<ToggleGroupItem value="b">B</ToggleGroupItem>
<ToggleGroupItem value="c">C</ToggleGroupItem>
</ToggleGroup>कंपोज़िशन#
ToggleGroup बनाने के लिए निम्नलिखित कंपोज़िशन का उपयोग करें:
ToggleGroup
├── ToggleGroupItem
└── ToggleGroupItemउदाहरण#
Outline#
आउटलाइन स्टाइल के लिए variant="outline" का उपयोग करें।
import {
ToggleGroup,
ToggleGroupItem,आकार#
टॉगल ग्रुप का आकार बदलने के लिए size प्रॉप का उपयोग करें।
import {
ToggleGroup,
ToggleGroupItem,स्पेसिंग#
टॉगल ग्रुप के आइटमों के बीच स्पेस जोड़ने के लिए spacing का उपयोग करें।
import {
ToggleGroup,
ToggleGroupItem,Vertical#
वर्टिकल टॉगल ग्रुप के लिए orientation="vertical" का उपयोग करें।
import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react"
import {अक्षम#
import { Bold, Italic, Underline } from "lucide-react"
import {कस्टम#
एक कस्टम टॉगल ग्रुप का उदाहरण।
"use client"
import * as React from "react"RTL#
Neobrutalism में RTL समर्थन सक्षम करने के लिए, RTL कॉन्फ़िगरेशन गाइड देखें।
"use client"
import * as React from "react"एक्सेसिबिलिटी#
हर आइटम WAI-ARIA Button पैटर्न के मुताबिक़ एक टॉगल बटन है: ग्रुप role="group" रेंडर करता है और हर आइटम aria-pressed वाला असली <button> होता है — सिंगल और मल्टीपल, दोनों मोड में। फ़ोकस रोविंग tabindex से चलता है, इसलिए पूरा ग्रुप एक ही Tab स्टॉप रहता है। सिर्फ़-आइकन आइटम पर aria-label ज़रूरी है।
कीबोर्ड इंटरैक्शन:
| कुंजी | क्रिया |
|---|---|
Tab / Shift + Tab | फ़ोकस ग्रुप के भीतर लाएँ और बाहर ले जाएँ |
Space / Enter | फ़ोकस किया गया आइटम टॉगल करें |
ArrowRight / ArrowDown | फ़ोकस अगले आइटम पर ले जाएँ |
ArrowLeft / ArrowUp | फ़ोकस पिछले आइटम पर ले जाएँ |
Home / End | पहले / आख़िरी आइटम पर पहुँचें |
API रेफ़रेंस#
Base UI Toggle Group डॉक्युमेंटेशन देखें।
चेंजलॉग#
2026-05-17 डिफ़ॉल्ट स्पेसिंग#
डिफ़ॉल्ट spacing को 0 से 2 में बदल दिया गया है ताकि टॉगल ग्रुप डिफ़ॉल्ट रूप से आइटमों के बीच स्पेस के साथ रेंडर हों। जुड़े हुए आइटमों के लिए spacing={0} का उपयोग करें।