agentsclimarketplace

Design system

Skill ulpi-io/plugin-marketplace/plugins/resend/skills/resend-design-skills/design-system

Use when building or modifying UI in the Resend codebase. Provides component APIs, variant options, design tokens, and composition patterns for all src/ui/ primitives.From its SKILL.md

Install
npx -y skills add ulpi-io/plugin-marketplace --skill design-system

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.5 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

Resend Design System

Use primitives from src/ui/ for all UI work. Never create custom components when a primitive exists. Check /design/components pages for live examples.

Quick Reference

All primitives use @/ui/{name} imports. Icons in @/ui/icons/icon-{name}.

Core Components

ComponentImportKey Variants
Button@/ui/buttonappearance: white, gray, fade-gray, fade, fade-red, red. size: 1, 2
TextField@/ui/text-field/text-fieldCompound: Root > Slot + Input + Slot. state/size on Input. size: 1, 2, 3
Heading@/ui/headingsize: 1-8. color: white, gray. weight: medium, semibold, bold
Text@/ui/textsize: 1-9. color: white, gray, red, yellow
Tag@/ui/tagappearance: gray, green, red, yellow, blue, orange, violet, sand
Banner@/ui/bannerPage/section-level messages (role="alert"). Auto icon. green=success, yellow=warning, red=error, blue=info. Use Tag for inline item labels
Select@/ui/selectNamespace: Root > Trigger + Content > Item. For value selection (forms)
Dialog@/ui/dialogNamespace: Root > Trigger + Content > Title. size: 1, 2, full-screen
Switch@/ui/switchchecked, onCheckedChange, disabled
Checkbox@/ui/checkboxchecked (boolean | 'indeterminate'), onCheckedChange
IconButton@/ui/icon-buttonSame variants as Button. Always provide aria-label
DropdownMenu@/ui/dropdown-menuNamespace: Root > Trigger + Content > Item. For actions, not value selection

Sizing Scale

SizeHeightTextRadius
'1'h-6text-xsrounded-lg
'2'h-8text-smrounded-xl
'3'h-10text-smrounded-xl

Color Conventions

  • Primary action: appearance="white" (inverted black/white, flips in dark mode)
  • Secondary: appearance="gray"
  • Subtle/ghost: appearance="fade" or appearance="fade-gray"
  • Destructive: appearance="red" or appearance="fade-red"

Key Rules

  1. Use cn() from @/lib/cn for class merging
  2. Use @/ absolute imports everywhere
  3. Prefer Server Components; 'use client' only at lowest interactive leaf — extract the interactive part into a small leaf component, don't mark the whole page client
  4. Use sentence case for all UI copy
  5. State via state prop, not booleans — state="loading", state="disabled", state="invalid", state="read-only". Each value is self-sufficient: state="loading" already prevents interaction, so don't also add disabled={}
  6. Compound TextField: TextField.Root > TextField.Slot? + TextField.Input + TextField.Slot?state and size go on TextField.Input, not Root. Use <TextField.Error message={msg} id="x" /> inside a trailing Slot for validation errors — it auto-wires aria-describedby. Don't also pass error= on Input or set aria-describedby manually.
  7. Radix namespaces: import * as Select from '@/ui/select'
  8. asChild for links: <Button asChild><Link href="/x">Label</Link></Button> — also works on Dialog.Trigger, Tooltip.Trigger

Server vs Client

Already client (built-in, no extra 'use client' needed on your part): TextField, Checkbox, Dialog, Drawer, Collapsible, Calendar, BulkActions.

Server-safe: Button, Heading, Text, Tag, Banner, Card, EmptyState, Kbd, IconButton.

Correct pattern — extract only the interactive leaf:

// page.tsx — Server Component
export default function Page() {
  return <Card><Heading>Title</Heading><DeleteDialog /></Card>;
}

// delete-dialog.tsx — small Client Component
'use client';
export function DeleteDialog() {
  return (
    <Dialog.Root>
      <Dialog.Trigger asChild><Button appearance="fade-red">Delete</Button></Dialog.Trigger>
      <Dialog.Content size="1"><Dialog.Title>Confirm delete</Dialog.Title></Dialog.Content>
    </Dialog.Root>
  );
}

References

For detailed documentation, load these as needed:

  • design-system/references/components.md — Full component catalog with all props and usage
  • design-system/references/design-tokens.md — Colors, typography, shadows, animations
  • design-system/references/patterns.md — CVA conventions, compound components, slot system

What ships with it: 3 files

11.8 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 326,629. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.