Design System
Components

Components

The full component catalogue for @shellapps/react-ui.

Button

import { Button } from '@shellapps/react-ui';
 
<Button variant="primary" size="md" onClick={handleClick}>
  Save Changes
</Button>
 
<Button variant="ghost" loading>
  Processing...
</Button>
PropTypeDefaultDescription
variant'primary' | 'secondary' | 'ghost' | 'danger''primary'Visual style
size'sm' | 'md' | 'lg''md'Button size
loadingbooleanfalseShow loading spinner
disabledbooleanfalseDisable interactions
fullWidthbooleanfalseExpand to container width

Input

import { Input } from '@shellapps/react-ui';
 
<Input
  label="Email"
  type="email"
  placeholder="you@example.com"
  error="Invalid email address"
/>
PropTypeDefaultDescription
labelstringLabel text
typestring'text'Input type
placeholderstringPlaceholder text
errorstringError message
disabledbooleanfalseDisable input

Card

Composable card with Header, Body, and Footer sub-components.

import { Card } from '@shellapps/react-ui';
 
<Card elevated>
  <Card.Header>Title</Card.Header>
  <Card.Body>Content goes here</Card.Body>
  <Card.Footer>
    <Button variant="primary">Action</Button>
  </Card.Footer>
</Card>
PropTypeDefaultDescription
elevatedbooleanfalseAdd box shadow
padding'none' | 'sm' | 'md' | 'lg''md'Internal padding

Modal

import { Modal, Button } from '@shellapps/react-ui';
 
const [open, setOpen] = useState(false);
 
<Button onClick={() => setOpen(true)}>Open Modal</Button>
 
<Modal open={open} onClose={() => setOpen(false)}>
  <Modal.Header>Confirm Action</Modal.Header>
  <Modal.Body>Are you sure?</Modal.Body>
  <Modal.Footer>
    <Button variant="ghost" onClick={() => setOpen(false)}>Cancel</Button>
    <Button variant="danger">Delete</Button>
  </Modal.Footer>
</Modal>
PropTypeDefaultDescription
openbooleanfalseControl visibility
onClose() => voidClose callback
size'sm' | 'md' | 'lg' | 'full''md'Modal width
closeOnOverlaybooleantrueClose when clicking backdrop

Select

import { Select } from '@shellapps/react-ui';
 
<Select
  label="Theme"
  options={[
    { value: 'ocean', label: 'Ocean' },
    { value: 'forest', label: 'Forest' },
    { value: 'sunset', label: 'Sunset' },
  ]}
  onChange={(value) => setTheme(value)}
/>
PropTypeDefaultDescription
labelstringLabel text
options{ value: string; label: string }[][]Options list
valuestringControlled value
onChange(value: string) => voidChange handler
placeholderstring'Select...'Placeholder
multibooleanfalseAllow multiple selection

Badge

import { Badge } from '@shellapps/react-ui';
 
<Badge variant="success">Active</Badge>
<Badge variant="warning">Pending</Badge>
<Badge variant="error">Failed</Badge>
PropTypeDefaultDescription
variant'default' | 'success' | 'warning' | 'error' | 'info''default'Colour variant
size'sm' | 'md''md'Badge size

Avatar

import { Avatar } from '@shellapps/react-ui';
 
<Avatar src="https://example.com/photo.jpg" alt="Alex" size="lg" />
<Avatar fallback="A" size="md" />
PropTypeDefaultDescription
srcstringImage URL
altstringAlt text
fallbackstringText when no image
size'sm' | 'md' | 'lg' | 'xl''md'Avatar size

ThemeProvider

See Theming for full details.

import { ThemeProvider } from '@shellapps/react-ui';
 
<ThemeProvider theme="ocean" mode="system">
  {children}
</ThemeProvider>
PropTypeDefaultDescription
themestring'default'Theme name
mode'light' | 'dark' | 'system''system'Colour mode
childrenReactNodeApp content

© 2026 Shell Technology. All rights reserved.