mirror of
https://github.com/vitodeploy/vito.git
synced 2025-05-14 03:53:35 +00:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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',
|
|
});
|
|
|
|
function ToggleGroup({
|
|
className,
|
|
variant,
|
|
size,
|
|
children,
|
|
...props
|
|
}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>) {
|
|
return (
|
|
<ToggleGroupPrimitive.Root
|
|
data-slot="toggle-group"
|
|
data-variant={variant}
|
|
data-size={size}
|
|
className={cn('group/toggle-group flex items-center rounded-md data-[variant=outline]:shadow-xs', className)}
|
|
{...props}
|
|
>
|
|
<ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>
|
|
</ToggleGroupPrimitive.Root>
|
|
);
|
|
}
|
|
|
|
function ToggleGroupItem({
|
|
className,
|
|
children,
|
|
variant,
|
|
size,
|
|
...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}
|
|
className={cn(
|
|
toggleVariants({
|
|
variant: context.variant || variant,
|
|
size: context.size || size,
|
|
}),
|
|
'min-w-0 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l',
|
|
className,
|
|
)}
|
|
{...props}
|
|
>
|
|
{children}
|
|
</ToggleGroupPrimitive.Item>
|
|
);
|
|
}
|
|
|
|
export { ToggleGroup, ToggleGroupItem };
|