Info List

PreviousNext

A list component with support for items, headers, and icons slots.

Docs
alexcarpenterui

Preview

Loading preview…
registry/default/ui/info-list.tsx
import { cn } from "@/lib/utils"
import { Slot } from "@radix-ui/react-slot"

export function InfoList({ className, ...props }: React.ComponentProps<"ul">) {
  return (
    <ul
      className={cn("flex flex-col gap-2", className)}
      data-slot="info-list"
      {...props}
    />
  )
}

export function InfoListItem({
  className,
  ...props
}: React.ComponentProps<"li">) {
  return (
    <li
      className={cn(
        "flex gap-4 has-[*[data-slot='header']]:flex-col",
        className
      )}
      data-slot="info-list-item"
      {...props}
    />
  )
}

export function InfoListHeader({
  className,
  ...props
}: React.ComponentProps<"header">) {
  return (
    <header
      className={cn("flex gap-4", className)}
      data-slot="info-list-header"
      {...props}
    />
  )
}

export function InfoListIcon({
  className,
  ...props
}: React.ComponentProps<"span">) {
  return (
    <span
      className={cn(
        "flex h-[1lh] flex-none items-center [&>svg]:size-[1em]",
        className
      )}
      data-slot="info-list-icon"
      {...props}
    />
  )
}

export function InfoListText({
  className,
  asChild,
  ...props
}: React.ComponentProps<"p"> & { asChild?: boolean }) {
  const Comp = asChild ? Slot : "p"
  return (
    <Comp
      className={cn("text-pretty", className)}
      data-slot="info-list-text"
      {...props}
    />
  )
}

Installation

npx shadcn@latest add @alexcarpenter/info-list

Usage

import { InfoList } from "@/components/ui/info-list"
<InfoList />