DeenruvDeenruv
Extending the Admin UI

Components

Complete catalog of components in @deenruv/react-ui-devkit — templates, universal, molecules, and atoms

The @deenruv/react-ui-devkit provides over 70 components organized by complexity and purpose. All components are styled with the Deenruv theme and support dark mode.

Component Categories

CategoryCountPurpose
Template2Full page layouts (list and detail pages)
Core4Plugin injection markers and renderers
Universal15Business-logic components for common admin patterns
Molecule13Composed components built from atoms
Atom42shadcn/ui-based primitives

Template Components

These are the most important components for building admin pages. They provide complete page layouts with built-in plugin injection points.

ComponentDescription
DetailListFull-featured list page with table, pagination, filtering, sorting, and bulk actions
DetailViewDetail/edit page layout with tabs, sidebar, actions, and plugin injection points

For a deep dive into DetailList and DetailView, see the Templates guide.

import { DetailList, DetailView } from '@deenruv/react-ui-devkit';

Core Components

Components used by the admin panel's plugin system:

ComponentDescription
DetailViewMarkerPlugin injection marker for detail views (toggle with Ctrl+Q)
ListViewMarkerPlugin injection marker for list views (toggle with Ctrl+Q)
RendererDynamic component renderer for plugin-injected content
EntityCustomFieldsRenders custom field inputs for any entity type

EntityCustomFields

Automatically renders form inputs for all custom fields defined on an entity:

import { EntityCustomFields } from '@deenruv/react-ui-devkit';

function ProductDetail({ product }) {
  return (
    <div>
      {/* Standard product fields */}
      <Input value={product.name} />

      {/* Render all custom fields for this entity */}
      <EntityCustomFields
        entityType="Product"
        entity={product}
        onFieldChange={(fieldName, value) => {
          // Handle custom field updates
        }}
      />
    </div>
  );
}

Universal Components (15)

Reusable business-logic components for common admin patterns:

ComponentDescription
DialogProductPickerProduct selection dialog with search and filtering
RichTextEditorTiptap-based rich text editor with formatting toolbar
AssetsModalInputAsset picker with modal browser for selecting images/files
ConfirmationDialogConfirmation dialog with customizable title, message, and actions
PageBlockPage section wrapper with title and description
CustomCardStyled card component with consistent admin theme
CustomCardHeaderCard header with title, description, and action slots
EmptyStateEmpty state placeholder with icon and message
FacetIdsSelectorMulti-selector for facet values
DraggableSelectDrag-and-drop reorderable select component
SimpleTimePickerTime-only picker input
DateTimePickerCombined date and time picker
DateTimeInputDate/time input field
EntityChannelManagerChannel assignment manager for entities
CustomerSearchCustomer search with autocomplete

Usage Examples

PageBlock

Wraps a section of a page with a title and description:

import { PageBlock } from '@deenruv/react-ui-devkit';

<PageBlock title="Product Details" description="Basic product information">
  <Input label="Name" value={name} onChange={setName} />
  <Input label="Slug" value={slug} onChange={setSlug} />
</PageBlock>

ConfirmationDialog

import { ConfirmationDialog } from '@deenruv/react-ui-devkit';

<ConfirmationDialog
  title="Delete Product"
  description="Are you sure? This action cannot be undone."
  onConfirm={handleDelete}
  onCancel={() => setOpen(false)}
/>

RichTextEditor

import { RichTextEditor } from '@deenruv/react-ui-devkit';

<RichTextEditor
  value={description}
  onChange={setDescription}
/>

AssetsModalInput

import { AssetsModalInput } from '@deenruv/react-ui-devkit';

<AssetsModalInput
  value={selectedAssets}
  onChange={setSelectedAssets}
/>

Universal Table Actions (5)

Pre-built table actions for common entity operations:

ComponentDescription
ManageEntityToChannelsDialogDialog for assigning entities to channels
DeleteEntityFromChannelsDialogDialog for removing entities from channels
EntityChannelManagementRowActionRow-level channel management action
EntityChannelManagementBulkActionBulk channel management action
EntityFacetManagementBulkActionBulk facet assignment action

Universal Utilities

FunctionDescription
createDialogFunctionCreate a dialog trigger function from a dialog component
createDialogFromComponentFunctionCreate a dialog from an existing component
import { createDialogFunction, ConfirmationDialog } from '@deenruv/react-ui-devkit';

const showConfirmation = createDialogFunction(ConfirmationDialog);

// Usage
const confirmed = await showConfirmation({
  title: 'Confirm',
  description: 'Are you sure?',
});

Molecule Components (13)

Composed components that combine multiple atoms:

ComponentDescription
PaymentMethodImagePayment method icon/image display
OrderStateBadgeColor-coded order state badge
SimpleSelectSimplified select dropdown
SimpleTooltipSimplified tooltip wrapper
SortButtonColumn sort toggle button
TranslationSelectLanguage/translation picker
ListTableData table for list views
SearchInputSearch input with built-in debounce
CustomFieldsModalModal for editing custom fields
ImageWithPreviewImage thumbnail with lightbox preview
ErrorMessageStyled error message display
ListBadgeBadge for list item status
ContextMenuRight-click context menu

Usage Examples

SearchInput

import { SearchInput } from '@deenruv/react-ui-devkit';

<SearchInput
  value={searchTerm}
  onChange={setSearchTerm}
  placeholder="Search products..."
/>

SimpleSelect

import { SimpleSelect } from '@deenruv/react-ui-devkit';

<SimpleSelect
  value={status}
  onChange={setStatus}
  options={[
    { label: 'Active', value: 'active' },
    { label: 'Draft', value: 'draft' },
    { label: 'Archived', value: 'archived' },
  ]}
/>

OrderStateBadge

import { OrderStateBadge } from '@deenruv/react-ui-devkit';

<OrderStateBadge state={order.state} />

Atom Components (42)

shadcn/ui-based primitive components styled with the Deenruv theme. All atoms support dark mode and follow the admin panel's design system.

ComponentDescription
AccordionCollapsible content sections
AlertDialogModal alert with actions
AssetUploadButtonButton for uploading assets
AspectRatioFixed aspect ratio container
BadgeStatus/label badge
BreadcrumbNavigation breadcrumbs
ButtonPrimary action button
CalendarDate picker calendar
CardContent card container
ChartData visualization chart
CheckboxCheckbox input
CommandCommand palette component
DialogModal dialog
DrawerSlide-out drawer
DropdownMenuDropdown menu with items
FacetedFilterMulti-facet filter component
FormForm wrapper with validation
HoverCardHover-triggered content card
ImagePlaceholderPlaceholder for missing images
InputText input field
LabelForm field label
LanguagePickerLanguage selection dropdown
MultipleSelectorMulti-value selector
PaginationPage navigation component
PopoverPopover content panel
ProgressProgress bar indicator
RadioGroupRadio button group
ScrollAreaCustom scrollbar container
SelectSingle-value select dropdown
SeparatorVisual separator line
SheetSide sheet panel
SkeletonLoading placeholder
SonnerToast notification system
SpinnerLoading spinner
SwitchToggle switch
TableData table
TabsTab navigation
TextareaMulti-line text input
TimelineTimeline display component
ToggleToggle button
ToggleGroupGroup of toggle buttons
TooltipHover tooltip

Import Examples

import {
  Button,
  Input,
  Card,
  Dialog,
  Table,
  Badge,
  Tabs,
  Select,
  Switch,
  Spinner,
} from '@deenruv/react-ui-devkit';

All atom components follow the shadcn/ui API patterns. Refer to the shadcn/ui documentation for detailed props and usage of each atom.

On this page