# Junco: full reference Junco is a free, open source (MIT) design system for React and Tailwind CSS v4: tokens, components, blocks, pages, motion and 3D. It can be used four ways, all reading the same tokens: 1. Semantic classes (like daisyUI): class="btn btn-primary". Pure CSS. Setup: @import "tailwindcss"; @import "@junco/tailwind"; 2. Utilities (like Tailwind): bg-surface text-muted-foreground rounded-card. Same setup. 3. Copy-in components (like shadcn/ui): npx @junco/cli add button (or npx shadcn@latest add https://junco.madebytobi.com/r/button.json). 4. Installed components (like HeroUI): npm i junco, then import { Button } from "junco". Add @source "../node_modules/junco/dist"; to your CSS. Tokens follow shadcn/ui names (--background, --foreground, --primary, --muted-foreground, --border, --ring, ...) plus Junco additions (--surface, --success, --warning, --success-text, --warning-text, --destructive-text, motion tokens). Dark mode: .dark or [data-theme="dark"] on . Motion: data-motion="full|subtle|off", and prefers-reduced-motion always turns motion off. ## Accordion Stacked sections that expand and collapse. Good for FAQs and settings groups. `type="single"` opens one at a time (add `collapsible` to allow closing it); `type="multiple"` doesn't. Install: ```bash npx @junco/cli add accordion npx shadcn@latest add https://junco.madebytobi.com/r/accordion.json ``` Exports: accordionVariants, AccordionProps, Accordion, AccordionItem, AccordionTriggerProps, AccordionTrigger, AccordionContent Variants: - variant: line | card (default line) Props of AccordionTrigger (also accepts React.ComponentPropsWithoutRef): - headingLevel?: 2 | 3 | 4 | 5 | 6. The heading level wrapping the trigger, for a correct document outline. Default 3. - classNames?: { heading?: string; icon?: string } Usage: ```tsx Is it free? Yes, MIT licensed. ``` ## Avatar A person or workspace picture that falls back to initials while loading or when the image fails. Install: ```bash npx @junco/cli add avatar npx shadcn@latest add https://junco.madebytobi.com/r/avatar.json ``` Exports: avatarVariants, initials, AvatarProps, Avatar Variants: - size: xs | sm | md | lg (default md) - shape: circle | square (default circle) Props of Avatar (also accepts React.ComponentPropsWithoutRef, VariantProps): - src?: string - name?: string. The person's name. Used as the image alt text and for fallback initials. - fallback?: React.ReactNode. Shown while the image loads or when it fails. Defaults to the name's initials. - classNames?: { root?: string; image?: string; fallback?: string } ## Badge A short label for status or counts. Install: ```bash npx @junco/cli add badge npx shadcn@latest add https://junco.madebytobi.com/r/badge.json ``` Exports: badgeVariants, BadgeProps, Badge Variants: - variant: solid | outline (default solid) - color: neutral | primary | success | warning | danger (default neutral) - hasDot: true (default false) Props of Badge (also accepts Omit, "color">, VariantProps): ## Breadcrumb Shows where a page sits in the hierarchy, with links back up. Collapses long trails with maxItems. Install: ```bash npx @junco/cli add breadcrumb npx shadcn@latest add https://junco.madebytobi.com/r/breadcrumb.json ``` Exports: BreadcrumbItemData, BreadcrumbProps, Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLinkProps, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis Props of Breadcrumb (also accepts React.HTMLAttributes): - items?: BreadcrumbItemData[]. Shorthand: render these items. Or compose BreadcrumbList / BreadcrumbItem yourself. - maxItems?: number. With more items than this, the middle collapses to "…". Default: never collapse. - separator?: React.ReactNode. Custom separator. Default a chevron. - renderLink?: (item: BreadcrumbItemData, props: { className: string; children: React.ReactNode }) => React.ReactNode. Render links through your router, e.g. `(item, props) => `. - classNames?: Partial): - asChild?: boolean. Render your router's Link as the child. Usage: ```tsx ``` ## Button Triggers an action. Variants solid, outline, soft, ghost and danger; isLoading shows a spinner and sets aria-busy. Install: ```bash npx @junco/cli add button npx shadcn@latest add https://junco.madebytobi.com/r/button.json ``` Exports: buttonVariants, ButtonProps, Button Variants: - variant: solid | outline | soft | ghost | danger (default solid) - size: sm | md | lg | icon (default md) Props of Button (also accepts React.ButtonHTMLAttributes, VariantProps): - asChild?: boolean. Render as the child element (for example a link) instead of a button. - isLoading?: boolean. Shows a spinner, disables the button and sets aria-busy. ## Card A bordered container for grouping related content, with header, title, description, action, content and footer parts. Install: ```bash npx @junco/cli add card npx shadcn@latest add https://junco.madebytobi.com/r/card.json ``` Exports: cardVariants, CardProps, Card, CardHeader, CardTitleProps, CardTitle, CardDescription, CardAction, CardContent, CardFooter Variants: - variant: outline | muted | elevated | ghost (default outline) - isInteractive: true (default false) Props of Card (also accepts React.HTMLAttributes, VariantProps): Props of CardTitle (also accepts React.HTMLAttributes): - as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6". Heading level. Default h3. Usage: ```tsx UsageLast 30 days ... ... ``` ## Checkbox A checkbox. `checked` can be true, false or "indeterminate". Pair it with a