UI components library for Payload CMS providing React components, hooks, forms, and styling for building admin interfaces and extensible UI elements.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Complete icon set for common admin interface needs including navigation, actions, content types, and status indicators. All icons are React SVG components with consistent styling and customization options.
All icon components share the same base interface:
interface IconProps {
className?: string;
size?: number | string;
style?: React.CSSProperties;
color?: string;
}Directional arrow icon for navigation and expansion.
function ChevronIcon(props: IconProps): JSX.Element;Usage example:
import { ChevronIcon } from '@payloadcms/ui';
function DropdownButton() {
return (
<button>
Menu <ChevronIcon size={16} />
</button>
);
}Hamburger menu icon for mobile navigation.
function MenuIcon(props: IconProps): JSX.Element;Close/X icon for dismissing menus and modals.
function CloseMenuIcon(props: IconProps): JSX.Element;Three dots icon for additional actions menu.
function MoreIcon(props: IconProps): JSX.Element;Generic close/cancel icon.
function XIcon(props: IconProps): JSX.Element;Edit/modify action icon.
function EditIcon(props: IconProps): JSX.Element;Add/create action icon.
function PlusIcon(props: IconProps): JSX.Element;Confirm/success action icon.
function CheckIcon(props: IconProps): JSX.Element;Exchange/swap action icon.
function SwapIcon(props: IconProps): JSX.Element;Copy/duplicate action icon.
function CopyIcon(props: IconProps): JSX.Element;Search functionality icon.
function SearchIcon(props: IconProps): JSX.Element;Drag handle for sortable items.
function DragHandleIcon(props: IconProps): JSX.Element;Document/file representation icon.
function DocumentIcon(props: IconProps): JSX.Element;Folder/directory icon.
function FolderIcon(props: IconProps): JSX.Element;Move folder action icon.
function MoveFolderIcon(props: IconProps): JSX.Element;Date/calendar icon.
function CalendarIcon(props: IconProps): JSX.Element;Link/URL icon.
function LinkIcon(props: IconProps): JSX.Element;External link icon (with arrow indicator).
function ExternalLinkIcon(props: IconProps): JSX.Element;Code block representation icon.
function CodeBlockIcon(props: IconProps): JSX.Element;Horizontal line/separator icon.
function LineIcon(props: IconProps): JSX.Element;Grid layout view icon.
function GridViewIcon(props: IconProps): JSX.Element;List layout view icon.
function ListViewIcon(props: IconProps): JSX.Element;Expand/collapse view icon.
function MinimizeMaximizeIcon(props: IconProps): JSX.Element;Logout/sign out action icon.
function LogOutIcon(props: IconProps): JSX.Element;Error state indicator icon.
function ErrorIcon(props: IconProps): JSX.Element;Information state icon.
function InfoIcon(props: IconProps): JSX.Element;Success state indicator icon.
function SuccessIcon(props: IconProps): JSX.Element;Warning state indicator icon.
function WarningIcon(props: IconProps): JSX.Element;import { Button, PlusIcon, EditIcon } from '@payloadcms/ui';
function ActionButtons() {
return (
<div>
<Button icon={<PlusIcon />} appearance="primary">
Add Item
</Button>
<Button icon={<EditIcon />} appearance="secondary">
Edit
</Button>
</div>
);
}import { Table, EditIcon, DocumentIcon } from '@payloadcms/ui';
function DocumentTable({ data }) {
const columns = [
{
accessor: 'title',
label: 'Document',
components: {
renderCell: ({ rowData }) => (
<div>
<DocumentIcon size={16} />
{rowData.title}
</div>
)
}
},
{
accessor: 'actions',
label: 'Actions',
components: {
renderCell: ({ rowData }) => (
<button onClick={() => edit(rowData.id)}>
<EditIcon size={16} />
</button>
)
}
}
];
return <Table columns={columns} data={data} />;
}import { ErrorIcon, SuccessIcon, WarningIcon } from '@payloadcms/ui';
function StatusIndicator({ status, message }) {
const getIcon = () => {
switch (status) {
case 'error':
return <ErrorIcon color="red" />;
case 'success':
return <SuccessIcon color="green" />;
case 'warning':
return <WarningIcon color="orange" />;
default:
return null;
}
};
return (
<div className="status-indicator">
{getIcon()}
<span>{message}</span>
</div>
);
}import {
MenuIcon,
CloseMenuIcon,
ChevronIcon,
DocumentIcon,
FolderIcon
} from '@payloadcms/ui';
function NavigationMenu() {
const [isOpen, setIsOpen] = useState(false);
return (
<nav>
<button onClick={() => setIsOpen(!isOpen)}>
{isOpen ? <CloseMenuIcon /> : <MenuIcon />}
</button>
{isOpen && (
<ul>
<li>
<DocumentIcon size={16} />
<span>Documents</span>
<ChevronIcon size={12} />
</li>
<li>
<FolderIcon size={16} />
<span>Media</span>
<ChevronIcon size={12} />
</li>
</ul>
)}
</nav>
);
}import { SearchIcon } from '@payloadcms/ui';
function CustomStyledIcon() {
return (
<SearchIcon
size={24}
color="#007acc"
style={{
marginRight: '8px',
opacity: 0.8
}}
className="custom-search-icon"
/>
);
}import { TextField, CalendarIcon, LinkIcon } from '@payloadcms/ui';
function FormWithIcons() {
return (
<form>
<div className="field-with-icon">
<CalendarIcon size={16} />
<TextField path="publishDate" label="Publish Date" />
</div>
<div className="field-with-icon">
<LinkIcon size={16} />
<TextField path="externalUrl" label="External URL" />
</div>
</form>
);
}All icons support accessibility features:
import { EditIcon } from '@payloadcms/ui';
function AccessibleIconButton() {
return (
<button aria-label="Edit document">
<EditIcon />
<span className="sr-only">Edit</span>
</button>
);
}Icons can be styled with CSS classes:
.custom-icon {
transition: all 0.2s ease;
}
.custom-icon:hover {
transform: scale(1.1);
color: var(--theme-primary);
}import { PlusIcon } from '@payloadcms/ui';
function AnimatedIcon() {
return (
<PlusIcon
className="custom-icon"
size={20}
/>
);
}The @payloadcms/ui package organizes icons by functional category:
All icons are designed to be consistent in style, scalable, and optimized for clarity at different sizes.
Install with Tessl CLI
npx tessl i tessl/npm-payloadcms--ui