Components

Every component in the SD registry. Core UI, form inputs, and custom portal components — all styled with SD brand tokens.

Components

The SD registry ships 138+ components. Every one of them uses SD brand tokens and follows the same rules: dark-first, minimal, accessible.

Pulling Components

# Single component
npx shadcn add @sd/button
 
# Multiple at once
npx shadcn add @sd/button @sd/dialog @sd/input @sd/card
 
# See what's available
npx shadcn add @sd/

Components land in your components/ui/ folder. You own the code.

Core UI Components

These are the standard building blocks. Every portal uses most of these.

ComponentDescriptionKey Variants
buttonPrimary action elementdefault, outline, secondary, ghost, destructive, link
badgeStatus indicators and labelsdefault, secondary, outline, destructive
cardContent container with header/footerdefault, sm
dialogModal overlaydefault, sm sizes
alert-dialogConfirmation modal with actionsdefault, sm
inputText input fieldwith validation states
textareaMulti-line text inputresizable
labelForm field labelrequired indicator
selectDropdown selectiondefault, sm
checkboxToggle selectionchecked, indeterminate
switchOn/off toggledefault, sm
tabsTabbed content panelsdefault
tableData tablewith sorting, selection
separatorVisual dividerhorizontal, vertical
skeletonLoading placeholder
spinnerLoading indicator
progressProgress bar
sliderRange selection
avatarUser profile imagesm, default, lg
tooltipHover information
popoverFloating content panel
scroll-areaCustom scrollable container
kbdKeyboard shortcut display
ComponentDescription
navigation-menuTop-level site navigation
breadcrumbPage hierarchy indicator
paginationPage navigation controls
menubarApplication menu bar
dropdown-menuAction menu triggered by click
context-menuRight-click action menu
commandCommand palette (search + actions)
sidebarCollapsible side navigation

Form Components

ComponentDescription
formForm wrapper with validation
fieldForm field with label and error
input-groupInput with addons (icons, buttons)
input-otpOne-time password input
native-selectNative HTML select element
comboboxSearchable select with autocomplete
radio-groupRadio button group
toggleToggle button
toggle-groupGroup of toggle buttons

Layout Components

ComponentDescription
sheetSlide-out panel (drawer from edge)
drawerBottom sheet / mobile drawer
resizableResizable panel layout
collapsibleExpandable/collapsible section
aspect-ratioFixed aspect ratio container
hover-cardCard shown on hover

Data Display

ComponentDescription
chartRecharts wrapper with SD theming
carouselContent slider
calendarDate grid (react-day-picker)
sonnerToast notifications
alertInline alert messages
emptyEmpty state placeholder
itemList item component

Custom SD Components

These are built specifically for Style Driven portals. They don't exist in upstream shadcn.

confirm-dialog

Promise-based confirmation dialog. Returns true/false via async/await.

pnpm dlx shadcn add @sd/confirm-dialog
const { confirm, ConfirmDialog } = useConfirm()
 
const ok = await confirm({
  title: "Delete this record?",
  description: "This action cannot be undone.",
  variant: "destructive",
})

Dependencies: alert-dialog, button

date-picker

Standalone date picker with portal-based dropdown calendar.

pnpm dlx shadcn add @sd/date-picker
<DatePicker
  value={date}
  onChange={setDate}
  minDate={new Date()}
  placeholder="Select date"
/>

Dependencies: date-fns

date-range-picker

Dual-month date range picker with visual range preview.

pnpm dlx shadcn add @sd/date-range-picker
<DateRangePicker
  startDate={start}
  endDate={end}
  onStartChange={setStart}
  onEndChange={setEnd}
/>

Dependencies: date-fns

time-picker

30-minute interval time picker dropdown.

pnpm dlx shadcn add @sd/time-picker
<TimePicker value="09:00" onChange={setTime} minTime="08:00" maxTime="18:00" />

email-input

Email validation input with error display.

pnpm dlx shadcn add @sd/email-input
<EmailInput
  value={email}
  onChange={setEmail}
  onValidation={({ isValid, error }) => {}}
/>

Dependencies: input

phone-input

International phone input with country selector. Supports 10 countries with formatting.

pnpm dlx shadcn add @sd/phone-input
<PhoneInput value={phone} onChange={setPhone} defaultCountry="US" />

Dependencies: input

social-input

Social media handle input with platform selector. Supports LinkedIn, Instagram, Facebook, X, YouTube, TikTok.

pnpm dlx shadcn add @sd/social-input
<SocialInput
  value={handle}
  onChange={setHandle}
  platform="instagram"
  onPlatformChange={setPlatform}
/>

Dependencies: input

url-input

URL validation input with auto-normalization. Prepends https:// automatically.

pnpm dlx shadcn add @sd/url-input
<UrlInput value={url} onChange={setUrl} onValidation={({ isValid }) => {}} />

Dependencies: input

Blocks

Pre-built page templates you can drop in and customize:

BlockDescription
login-01 through login-05Authentication pages
signup-01 through signup-05Registration pages
dashboard-01Admin dashboard layout
sidebar-01 through sidebar-16Sidebar layout variations