सामग्री पर जाएँ

टॉगल समूह

संपादक टूलबार, दृश्य स्विचर और फ़िल्टर बार के लिए द्वि-स्थिति बटन समूह — नियोब्रूटलिस्ट शैली के बॉर्डर और शैडोज़ के साथ।

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.json
npx shadcn@latest add https://neobrutalism.com/r/base/toggle-group.json
yarn dlx shadcn@latest add https://neobrutalism.com/r/base/toggle-group.json
bunx --bun shadcn@latest add https://neobrutalism.com/r/base/toggle-group.json

निम्नलिखित डिपेंडेंसीज़ इंस्टॉल करें:

pnpm add @base-ui/react
npm install @base-ui/react
yarn add @base-ui/react
bun add @base-ui/react

नीचे दिए गए कोड को कॉपी करके अपने प्रोजेक्ट में पेस्ट करें।

components/ui/toggle-group.tsx
"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} का उपयोग करें।