@arolariu/components
Version:
🎨 70+ beautiful, accessible React components built on Radix UI. TypeScript-first, tree-shakeable, SSR-ready. Perfect for modern web apps, design systems & rapid prototyping. Zero config, maximum flexibility! ⚡
122 lines (121 loc) • 4.66 kB
JavaScript
"use client";
import { jsx } from "react/jsx-runtime";
import { Slot } from "@radix-ui/react-slot";
import { cva } from "class-variance-authority";
import "react";
import { Separator } from "./separator.js";
import { cn } from "../../lib/utilities.js";
function ItemGroup({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
role: "list",
"data-slot": "item-group",
className: cn("group/item-group flex flex-col", className),
...props
});
}
function ItemSeparator({ className, ...props }) {
return /*#__PURE__*/ jsx(Separator, {
"data-slot": "item-separator",
orientation: "horizontal",
className: cn("my-0", className),
...props
});
}
const itemVariants = cva("group/item [a]:hover:bg-neutral-100/50 focus-visible:border-neutral-950 focus-visible:ring-neutral-950/50 [a]:transition-colors flex flex-wrap items-center rounded-md border border-neutral-200 border-transparent text-sm outline-none transition-colors duration-100 focus-visible:ring-[3px] dark:[a]:hover:bg-neutral-800/50 dark:focus-visible:border-neutral-300 dark:focus-visible:ring-neutral-300/50 dark:border-neutral-800", {
variants: {
variant: {
default: "bg-transparent",
outline: "border-neutral-200 dark:border-neutral-800",
muted: "bg-neutral-100/50 dark:bg-neutral-800/50"
},
size: {
default: "gap-4 p-4",
sm: "gap-2.5 px-4 py-3"
}
},
defaultVariants: {
variant: "default",
size: "default"
}
});
function Item({ className, variant = "default", size = "default", asChild = false, ...props }) {
const Comp = asChild ? Slot : "div";
return /*#__PURE__*/ jsx(Comp, {
"data-slot": "item",
"data-variant": variant,
"data-size": size,
className: cn(itemVariants({
variant,
size,
className
})),
...props
});
}
const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none", {
variants: {
variant: {
default: "bg-transparent",
icon: "bg-neutral-100 size-8 rounded-sm border border-neutral-200 [&_svg:not([class*='size-'])]:size-4 dark:bg-neutral-800 dark:border-neutral-800",
image: "size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover"
}
},
defaultVariants: {
variant: "default"
}
});
function ItemMedia({ className, variant = "default", ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-media",
"data-variant": variant,
className: cn(itemMediaVariants({
variant,
className
})),
...props
});
}
function ItemContent({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-content",
className: cn("flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none", className),
...props
});
}
function ItemTitle({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-title",
className: cn("flex w-fit items-center gap-2 text-sm leading-snug font-medium", className),
...props
});
}
function ItemDescription({ className, ...props }) {
return /*#__PURE__*/ jsx("p", {
"data-slot": "item-description",
className: cn("line-clamp-2 text-sm leading-normal font-normal text-balance text-neutral-500 dark:text-neutral-400", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-neutral-900 dark:[&>a:hover]:text-neutral-50", className),
...props
});
}
function ItemActions({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-actions",
className: cn("flex items-center gap-2", className),
...props
});
}
function ItemHeader({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-header",
className: cn("flex basis-full items-center justify-between gap-2", className),
...props
});
}
function ItemFooter({ className, ...props }) {
return /*#__PURE__*/ jsx("div", {
"data-slot": "item-footer",
className: cn("flex basis-full items-center justify-between gap-2", className),
...props
});
}
export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
//# sourceMappingURL=item.js.map