Hand-Drawn Shadcn-like UI Component Registry – Looseleaf

A React UI component library with handwritten typography, pen-drawn controls, stationery-style elements, and ready-made app blocks.

Looseleaf is a hand-drawn React UI component library for notebook-style forms, dashboards, and chat apps with matching controls, paper objects, and ready-made app blocks.

Built with React, Tailwind CSS, and Radix UI, it installs editable TSX through a shadcn registry and retains familiar shadcn/ui props and data-slot names.

Features

  • 120+ UI components for forms, navigation, charts, chat, page layouts, and paper objects.
  • 60+ ready-made blocks for authentication, sidebars, dashboards, settings, landing pages, and messaging.
  • Seeded TypeScript drawing recipes that render pen-style SVG strokes behind real DOM content.
  • 160+ illustrated icons, 40+ doodles, 80+ stickers, and the Stubby mascot.
  • Kevin Sans font styles for control labels, handwritten headings, and stamp-like text.
  • Configurable drawing density, ink colors, reduced-motion behavior, and right-to-left layouts.
  • Individual component installs with local TSX files and registry-managed dependencies.

Available UI Components

Actions

ComponentDescription
button-groupJoined buttons and inputs with continuous hand-drawn borders.
buttonInk-drawn buttons with shadcn variants and size options.
stamp-buttonRubber-stamp button that leaves an inked impression.
toggle-groupSingle- or multi-selection toggles with shared sketched borders.
toggleTwo-state button with a highlighter-style pressed state.

Forms

ComponentDescription
calendarPlanner-style date calendar with single, multiple, and range selection.
checkboxMarker-filled checkboxes with checked and indeterminate states.
comboboxSearchable selection field with single, multiple, and creatable options.
date-pickerDate input with a popover calendar, presets, and range selection.
dropzoneFile picker with drag-and-drop, validation, previews, and progress states.
fieldLabels, help text, errors, and grouped form control layouts.
formReact Hook Form bindings and sketched field validation states.
input-groupUnified input, icon, text, and button inside one frame.
input-otpIndividual code boxes with paste and autofill support.
inputSingle-line input with drawn focus, error, and disabled states.
labelHandwritten form label with optional required-field mark.
native-selectNative HTML select inside a sketched input frame.
radio-groupSingle-choice radio buttons with ink-filled selection marks.
ratingSelectable or read-only star, heart, and sun ratings.
selectRadix select menu with highlighted options and keyboard navigation.
signature-padPressure-sensitive drawing field with a typed-name fallback.
sliderSingle-value or range slider with a paper thumb and marker track.
stepperNumeric input with increment, decrement, and keyboard controls.
sticker-pickerSearchable sticker selection popover with category filters.
switchOn/off control with a colored marker track and paper thumb.
textareaAuto-growing multiline input with optional ruled lines and character count.

Feedback

ComponentDescription
alertStatus messages with distinct ink colors and margin marks.
emptyIllustrated empty states with titles, descriptions, and actions.
progressMarker-filled progress bar with determinate and indeterminate states.
skeletonPencil-sketched loading placeholders with subtle line animation.
sonnerPaper-style toast notifications using the Sonner API.
spinnerAnimated pencil spiral with reduced-motion behavior.

Overlays

ComponentDescription
alert-dialogConfirmation modal with explicit response and safe initial focus.
commandSearchable command palette with fuzzy matching and highlighted results.
context-menuPaper-style context menu for right-click and touch interactions.
dialogPaper-sheet modal with a drawn close control and optional fastening.
drawerDraggable paper drawer with edge positions and snap points.
dropdown-menuDropdown with sketched selection marks, shortcuts, and submenus.
hover-cardPolaroid-style preview triggered by hover or keyboard focus.
popoverFloating paper panel with optional pin, tape, and arrow.
sheetSliding notebook panel with spiral, perforated, or torn edges.
tooltipSticky-note hint shown on hover or keyboard focus.

Navigation

ComponentDescription
breadcrumbPage-path links with handwritten separators and current-page styling.
menubarDesktop-style menu strip with keyboard navigation and nested menus.
navigation-menuTab-like site navigation with expandable paper panels.
paginationPage-number links drawn as buttons with current-page highlighting.
sidebarCollapsible notebook-style navigation with responsive mobile presentation.
tabsIndex-divider tabs with highlighter, line, and vertical styles.

Layout

ComponentDescription
accordionExpandable ruled sections with handwritten open-state details.
aspect-ratioResponsive container that maintains a fixed width-to-height ratio.
cardPaper card with structured content, actions, and fastening options.
collapsibleExpandable panel with a folding animation and optional margin brace.
directionDirection provider for right-to-left layouts and Radix interactions.
resizableDrag-resizable panels with sketched handles and keyboard support.
scroll-areaScrollable container with a pencil-drawn scrollbar.
separatorHorizontal or vertical dividers in pencil, stitch, tape, and tear styles.

Data display

ComponentDescription
avatarPortraits or initials with sketched outlines and status indicators.
badgeCompact status labels styled as stamps, highlights, or tally marks.
carouselSwipeable Embla carousel with drawn arrows and optional tally indicators.
itemRuled list rows with media, text, and action areas.
tableTabular data with pencil rules and highlighted row states.

Charts

ComponentDescription
chartHand-drawn bar, line, area, pie, radar, and other charts.

Paper

ComponentDescription
bookmarkToggleable ribbon bookmark with an ink-drawn pressed state.
clipboardClipped writing board that can hold forms or notes.
deskTextured tabletop backdrop with optional stationery decorations.
envelopeInteractive envelope with an opening flap and sliding letter.
folderTabbed file-folder container built on Radix Tabs.
index-cardRuled index card with optional flags, holes, and stacked cards.
label-tagPaper hang tag with eyelet, twine, and button or link behavior.
napkinFolded tissue-paper container with a pressed border.
notebookRuled notebook with configurable binding and page details.
pageMain paper-page layout with header, content, and footer.
paperPaper container with configurable stock, edges, rules, and tape.
polaroidInstant-photo frame with an image or illustrated scene and caption.
receiptThermal-paper receipt with line items, totals, and barcode.
sticky-noteColored adhesive note with optional folds, pins, and checkboxes.
tapeDecorative strips of masking, washi, kraft, or clear tape.
ticketPerforated ticket with a detachable-style stub and serial number.

Marks

ComponentDescription
annotateAnimated highlights, circles, brackets, and strike marks on text.
arrowDrawn arrows with configurable direction, curves, heads, and labels.
asteriskIllustrated footnote symbols that can link to notes.
bracketSquare, round, or curly annotation beside grouped content.
calloutMargin note with a hand-drawn arrow pointing to content.
circledHand-drawn circle, box, or brackets around text.
highlightMarker swipe behind selectable text, including wrapped lines.
quotePull quote with oversized ink quotation marks and attribution.
ribbonFolded paper ribbon for section labels and badges.
scribbleDense pen strokes drawn across existing text.
signatureScript-style name with an animated pen flourish.
squiggleDecorative wave, zigzag, loop, or dotted divider.
strikeSingle, double, or cross-out pencil lines over text.
tallyNumbers displayed as grouped hand-drawn tally marks.
underlineSingle, double, wavy, or scribbled lines beneath text.

Stickers & doodles

ComponentDescription
doodleHand-drawn stars, flowers, suns, and other margin decorations.
mascotStubby pencil character for welcome screens and empty states.
sealRosette, medal, ringed, and wax-style decorative seals.
stampText-based rubber-stamp impressions with worn ink styling.
sticker-sheetPeelable sticker collection on backing paper.
stickerDie-cut sticker artwork with outlines and optional peeled corners.

Chat

ComponentDescription
attachmentChat file attachment with upload, processing, error, and completion states.
bubbleMessage bubble with inked outline, fill, and sender-side tail.
code-blockSyntax-highlighted code slip with filenames, line numbers, and diffs.
markerChat transcript separators for dates, unread messages, and events.
message-scrollerMessage timeline with sticky-bottom behavior and jump-to-latest controls.
messageChat message layout with avatars, bubbles, and streaming text.
prompt-inputChat composer with growing textarea, attachments, and send controls.
typing-indicatorAnimated handwritten typing status with live-region text.

Interactive

ComponentDescription
boilFrame-by-frame wobble animation for hand-drawn UI elements.
confettiIllustrated paper confetti triggered by clicks or state changes.
corkboardDraggable, keyboard-movable notes on a framed corkboard.
flip-cardTwo-sided index card that rotates on click or keyboard activation.
marqueeScrolling text on a washi-tape strip with pause controls.
peel-cornerInteractive page corner that reveals content underneath.
revealScroll-triggered draw-on, stamp, and paper entrance effects.
sketchpadDrawing canvas with pen input, undo, redo, and SVG export.
sticker-boardMoveable, resizable stickers with JSON state and SVG export.
tear-offInteractive perforated coupon or ticket stub.

Typography

ComponentDescription
handwrittenSeeded handwritten text variation that preserves real inline text.
kbdPencil-drawn keyboard keycap for shortcuts and inline hints.
letteringScript-style display text with an offset print effect.
typewriterType-on text animation with ink caret and variable typing speed.
typographyNotebook text styles and a Prose wrapper for rich content.

Icons

ComponentDescription
iconHand-drawn icons addressed by familiar Lucide names.

Ready-Made Blocks

Install a block by its registry name, such as npx shadcn@latest add @looseleaf/login-01. Block files go into components/blocks/ with their declared component dependencies.

Authentication

BlockDescription
forgot-password-01Password-reset request with a neutral confirmation state and resend action.
login-01Taped login form with email, password visibility, remember-me, and Google sign-in.
login-02Two-column login page with a paper form and illustrated desktop cover.
login-03Minimal login card with Apple and Google buttons and email/password fields.
login-04Split login page with a kraft-paper photo collage and provider buttons.
login-05Email-link sign-in screen with Apple and Google options and sent confirmation.
otp-01Six-digit verification screen with paste support, resend timer, and error states.
reset-password-01Password reset form with live requirement checks and completion state.
signup-01Receipt-style signup form with name, email, password confirmation, and validation.
signup-02Two-column signup layout with a paper form and illustrated ticket panel.
signup-03Signup card with password confirmation and an illustrated strength indicator.
signup-04Split signup page with provider buttons and an interactive sticker sheet.
signup-05Email-first signup screen with a sign-in link and provider options.

Sidebars

BlockDescription
sidebar-01Grouped navigation with an edition switcher, search, and active-page highlighting.
sidebar-02Collapsible navigation sections with a sticky page header.
sidebar-03Sidebar with nested navigation links and pencil-ruled submenus.
sidebar-04Floating sidebar beside a separate paper-style content page.
sidebar-05Sidebar with expandable submenus and plus/minus indicators.
sidebar-06Sidebar with dropdown submenus and a signup card near the footer.
sidebar-07Icon-collapsible sidebar with a team switcher and tooltips.
sidebar-08Inset sidebar with expandable links and secondary project navigation.
sidebar-09Two-level mail sidebar with folder icons, message lists, and unread filtering.
sidebar-10Notes navigation with favorites, workspaces, and a popover action menu.
sidebar-11Collapsible file-tree navigation with file status and breadcrumb updates.
sidebar-12Calendar sidebar with calendar filters and selected-day content.
sidebar-13Application settings dialog with its own sidebar and breadcrumb navigation.
sidebar-14Right-aligned collapsible sidebar serving as a page table of contents.
sidebar-15Two-sidebar notes layout with navigation on the left and calendar on the right.
sidebar-16Sidebar beneath a sticky site header with search and breadcrumbs.

Dashboards

BlockDescription
dashboard-01Admin dashboard with summary metrics, a date-filtered area chart, and data table.
dashboard-analyticsTraffic dashboard with sparklines, source breakdowns, and conversion funnel.
dashboard-financePersonal finance dashboard with balances, transactions, and budget progress.

Apps

BlockDescription
calendar-plannerCalendar with marked event days, daily agenda, and event editing dialog.
chat-appTwo-pane messaging app with conversation search and streaming message view.
file-explorerTabbed file browser with search, sorting, list/grid views, and selection.
inboxTwo-pane mail layout with folders, search, unread state, and message preview.
kanban-boardSticky-note task board with keyboard-accessible column moves.
notes-appNotebook editor with section tabs, page list, and text annotation tools.
profile-pageProfile screen with photo, user details, activity tabs, and follow actions.

Settings

BlockDescription
settings-appearanceDrawing and page-theme settings for density, motion, direction, and paper.
settings-billingPlan management page with pricing changes, payment details, and invoices.
settings-notificationsNotification preferences with channels, quiet hours, and summaries.
settings-profileProfile editor with photo upload, username checks, and personal details.

Marketing

BlockDescription
announcement-barDismissible kraft-paper announcement strip with label and link.
cta-01Ticket-style call-to-action panel with two buttons and illustrated stub.
faq-01Ruled-paper FAQ accordion with a follow-up support card.
features-01Feature section using index cards or a paper-and-stationery bento layout.
footer-01Stitched kraft-paper footer with link groups, social buttons, and status.
landing-hero-01Split hero with headline, calls to action, and stationery collage.
landing-hero-02Centered hero with interactive checklist and progress indicators.
logos-01Two animated washi-tape logo tickers with a shared pause control.
newsletter-01Email signup card with validation and an animated envelope confirmation.
onboarding-01Five-step checklist with progress, completion stamp, and confetti.
pricing-01Three pricing cards with monthly/annual switching and a featured plan.
testimonials-01Customer quotes displayed on taped, pinned, and clipped paper notes.

Feedback

BlockDescription
empty-inboxTabbed inbox empty states with different illustrated messages.
empty-searchSearch-results empty state with query feedback and reset action.
error-404Not-found screen with search field and navigation back to the site.
error-500Server-error screen with incident reference, copy action, and retry link.

Commerce

BlockDescription
checkout-01Single-page checkout with delivery options and client-side card validation.

How to Install Looseleaf

Initialize shadcn/ui:

npx shadcn@latest init

Register the @looseleaf namespace:

npx shadcn@latest registry add "@looseleaf=https://kevintngo.github.io/looseleaf/r/{name}.json"

Alternatively, merge this registry namespace into your existing components.json:

{
  "registries": {
    "@looseleaf": "https://kevintngo.github.io/looseleaf/r/{name}.json"
  }
}

Install a Button, a Paper container, or a ready-made login block:

npx shadcn@latest add @looseleaf/button
npx shadcn@latest add @looseleaf/paper
npx shadcn@latest add @looseleaf/login-01

To install the full library, including the Notebook theme, fonts, ink engine, and UI components, use the umbrella item. This replaces your shadcn color tokens with Looseleaf’s palette:

npx shadcn@latest add @looseleaf/looseleaf

Basic Usage in Next.js

Wrap the app with InkProvider in a client component. The example below uses the button and paper components.

app/providers.tsx

"use client"
import { InkProvider } from "@/lib/ink/react"
export function Providers({ children }: { children: React.ReactNode }) {
  return <InkProvider density="comfortable">{children}</InkProvider>
}

app/layout.tsx

import { Providers } from "./providers"
import "./globals.css"
export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <Providers>{children}</Providers>
      </body>
    </html>
  )
}

app/page.tsx

import { Button } from "@/components/ui/button"
import { Paper } from "@/components/ui/paper"
export default function HomePage() {
  return (
    <Paper stock="index-card" tape="both" className="max-w-md p-6">
      <h1 className="font-script text-2xl font-bold">Project notes</h1>
      <p className="my-4">Draft the next dashboard layout.</p>
      <Button variant="secondary">Save note</Button>
    </Paper>
  )
}

InkProvider and Theme Configuration

InkProvider is the root context for pen drawings. It provides props to control rendering quality, density, themes, direction, and paper textures.

PropValues and behavior
tier"lo" (default) or "hi" drawing quality.
density"comfortable", "compact", or "calm"; inherits data-density when unset.
motion"system" (default) or "reduced".
themeOptional theme name applied through data-theme.
dir"ltr" or "rtl"; inherits the document direction when unset.
knobsOptional wobble, bleed, width, and misreg pen settings.
texturesfalse (default), true, or a list of paper texture tiles.
defsBoolean, default true; controls shared SVG definitions.
patternsOptional Boolean or list of paper tile names for SVG patterns.

Place CSS token overrides after the Looseleaf theme in your global stylesheet:

:root {
  --ll-marker: #2f7d6b;
  --ll-hi: #f4d35e;
}

Alternatives and Related Resources

kevintngo

kevintngo

Leave a Reply

Your email address will not be published. Required fields are marked *