Introduce various UI components including Checkbox, Chart, Command, Collapsible, Dialog, and ContextMenu. These components leverage Radix UI and Recharts to enhance the UI toolkit.
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
"use client"
|
|
|
|
import * as React from "react"
|
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"
|
|
import { type VariantProps } from "class-variance-authority"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
import { toggleVariants } from "@/components/ui/toggle"
|
|
|
|
const ToggleGroupContext = React.createContext<
|
|
VariantProps<typeof toggleVariants>
|
|
>({
|
|
size: "default",
|
|
variant: "default",
|
|
})
|
|
|
|
const ToggleGroup = React.forwardRef<
|
|
React.ElementRef<typeof ToggleGroupPrimitive.Root>,
|
|
React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &
|
|
VariantProps<typeof toggleVariants>
|
|
>(({ className, variant, size, children, ...props }, ref) => (
|
|
<ToggleGroupPrimitive.Root
|
|
ref={ref}
|
|
className={cn("flex items-center justify-center gap-1", className)}
|
|
{...props}
|
|
>
|
|
<ToggleGroupContext.Provider value={{ variant, size }}>
|
|
{children}
|
|
</ToggleGroupContext.Provider>
|
|
</ToggleGroupPrimitive.Root>
|
|
))
|
|
|
|
ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName
|
|
|
|
const ToggleGroupItem = React.forwardRef<
|
|
React.ElementRef<typeof ToggleGroupPrimitive.Item>,
|
|
React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &
|
|
VariantProps<typeof toggleVariants>
|
|
>(({ className, children, variant, size, ...props }, ref) => {
|
|
const context = React.useContext(ToggleGroupContext)
|
|
|
|
return (
|
|
<ToggleGroupPrimitive.Item
|
|
ref={ref}
|
|
className={cn(
|
|
toggleVariants({
|
|
variant: context.variant || variant,
|
|
size: context.size || size,
|
|
}),
|
|
className
|
|
)}
|
|
{...props}
|
|
>
|
|
{children}
|
|
</ToggleGroupPrimitive.Item>
|
|
)
|
|
})
|
|
|
|
ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName
|
|
|
|
export { ToggleGroup, ToggleGroupItem }
|