| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import * as React from 'react';
- import { mergeProps } from '@base-ui/react/merge-props';
- import { useRender } from '@base-ui/react/use-render';
- import { cva, type VariantProps } from 'class-variance-authority';
- import { cn } from '@/lib/utils';
- const markerVariants = cva(
- "gap-2 text-sm text-muted-foreground [a]:hover:text-foreground [a]:underline-offset-3 [a]:underline [&_svg:not([class*='size-'])]:size-4 min-h-4 text-left group/marker relative flex w-full items-center",
- {
- variants: {
- variant: {
- default: '',
- separator:
- 'before:h-px before:min-w-0 before:flex-1 before:bg-border after:h-px after:min-w-0 after:flex-1 after:bg-border before:mr-1 after:ml-1',
- border: 'border-b border-border pb-2',
- },
- },
- },
- );
- function Marker({
- className,
- variant = 'default',
- render,
- ...props
- }: useRender.ComponentProps<'div'> & VariantProps<typeof markerVariants>) {
- return useRender({
- defaultTagName: 'div',
- props: mergeProps<'div'>(
- {
- className: cn(markerVariants({ variant, className })),
- },
- props,
- ),
- render,
- state: {
- slot: 'marker',
- variant,
- },
- });
- }
- function MarkerIcon({ className, ...props }: React.ComponentProps<'span'>) {
- return (
- <span
- data-slot="marker-icon"
- aria-hidden="true"
- className={cn(
- "size-4 [&_svg:not([class*='size-'])]:size-4 shrink-0",
- className,
- )}
- {...props}
- />
- );
- }
- function MarkerContent({ className, ...props }: React.ComponentProps<'span'>) {
- return (
- <span
- data-slot="marker-content"
- className={cn(
- 'group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:hover:text-foreground *:[a]:underline *:[a]:underline-offset-3 min-w-0 wrap-break-word',
- className,
- )}
- {...props}
- />
- );
- }
- export { Marker, MarkerIcon, MarkerContent, markerVariants };
|