Skip to main content

Components

The component architecture has two layers: the @dtx/ui shared library (reusable across projects) and portal feature components (app-specific).


@dtx/ui — Base Components

Built on React Aria Components for accessibility. Styled with Tailwind CSS and class-variance-authority (CVA).

Buttons & Badges

ComponentVariantsKey Props
Buttonprimary secondary tertiary link-gray link-color + destructive variantssize: sm|md|lg|xl, isLoading, iconLeading, iconTrailing
CloseButtonsize, onPress
ButtonGroupGroups multiple ButtonGroupItem components
Badge12 colorstype: pill-color|color|modern, size: sm|md|lg
BadgeWithDotStatus indicator with colored dot
BadgeWithIconiconLeading, iconTrailing
BadgeIconIcon-only circular badge

Badge Colors: gray brand error warning success gray-blue blue-light blue indigo purple pink orange

Form Inputs

ComponentKey Props
Inputlabel, hint, size: sm|md, icon, tooltip, shortcut, isInvalid, isRequired
TextArealabel, hint, isInvalid, isRequired
Selectitems: SelectItemType[], selectedKey, onSelectionChange, placeholder
CheckboxisSelected, onChange, isIndeterminate
ToggleisSelected, onChange
Slidermin, max, value, onChange
LabelStandard label props
HintTextisInvalid — renders below inputs

Layout & Display

ComponentPurpose
CardGeneric card container
AvatarUser avatar with image or initials
DropdownDropdown menu with trigger
FormForm wrapper

@dtx/ui — Application Components

Data Display

ComponentPurpose
DataTable / TableCardReact Aria table with sorting, selection, row actions
Tabs / TabList / Tab / TabPanelTabbed content switching
Pagination* (5 variants)Page, minimal, card, button group styles
BreadcrumbsNavigation breadcrumbs
EmptyStateEmpty state placeholder
LoadingIndicatorSpinner/loading
ProgressProgress bar/circle

Overlays & Feedback

ComponentPurpose
Modal / ModalOverlayReact Aria modal dialogs
Dialog / DialogTriggerDialog content wrapper
ConfirmDialog / useConfirm()Confirmation with hook
ToasterToast notifications via Sonner
Alert (AlertFloating)Floating alert banners
CommandMenuCommand palette (Cmd+K)

Specialized

ComponentPurpose
CalendarCalendar widget
DatePicker / DateRangePickerDate selection
FileUploadDrag-and-drop file upload
SectionHeadersSection heading components
NavItemBaseSidebar navigation item
NavAccountCardUser profile card

Charts (Recharts)

Chart TypeUsage
Line / AreaTime-series metrics, throughput
BarLog level distribution
PieProportional data
RadarMulti-dimension comparison
Progress circlesCompletion indicators
Activity gaugesActivity metrics

Portal Shared Components

Layout Components

ComponentFilePurpose
Layoutshared/layout/Layout.tsxMain app shell (sidebar + header + content area)
PageLayoutshared/PageLayout.tsxStandard page wrapper (title, subtitle, action buttons)
PageHeadershared/PageHeader.tsxPage title + subtitle + action button
Sidebarshared/sidebar/Sidebar.tsxCollapsible sidebar with section groups
Headershared/header/Header.tsxTop bar with search and notifications
SearchCommandMenushared/header/SearchCommandMenu.tsxCmd+K search
DynamicBreadcrumbsshared/header/DynamicBreadcrumbs.tsxAuto-generated breadcrumbs
ErrorBoundaryshared/ErrorBoundary.tsxReact error boundary
NotFoundPageshared/NotFoundPage.tsx404 page

Visual Designer System

The designer system is shared across Pipeline, Connector, and Workflow builders:

Auto-layout: Uses @dagrejs/dagre for DAG auto-layout (smartLayout.ts, autoLayout.ts).

Dynamic Form Renderer

FormRenderer generates forms dynamically from JSON-schema operator configs. Supports 20+ field types:

CategoryField Types
BasicTextField, TextAreaField, SelectField, CheckboxField, ToggleField, PasswordField, ReadonlyField
CollectionsTagsField, KeyValueField, RadioCardsField, BadgeField, GroupField
Schema-awareSchemaSelectorField, SchemaTableField, TopicSelectorField, PoolSelectorField
MappingMappingConfigField, MappingTableField, InputFieldSelectorField, LookupFieldSelectorField
AdvancedApiCombobox, GeneratorSelectorField, PreviewRunnerField

Feature Components

Pipeline Designer

ComponentPurpose
PipelineDesignerFull-screen pipeline builder page
PipelinesListPagePipeline list with status badges
CompilationProgressModalTracks compile progress
SaveProgressModalAuto-save status
ValidationErrorModalValidation error display
PipelineObservabilityPanelReal-time pipeline logs/records

Schema Registry

ComponentPurpose
SchemaListPageSchema list with filters
CreateSchemaWizard3-step wizard: BasicInfo → SchemaEditor → Review
SchemaFieldTableField editor with PII tagging
FieldEditorDialogIndividual field editing
Detail tabs: OverviewTab, FieldsTab, SchemaTab, VersionsTab, SettingsTab

Approval Workflow

ComponentPurpose
WorkflowDesignerFull-screen visual workflow builder
WorkflowCanvasXYFlow canvas with workflow-specific nodes
NodePalette11 draggable node types
PropertyPanelSelected node configuration
TaskInboxFilterable task list with claim/complete actions

Workflow Node Types: StartNode, EndNode, ApprovalNode, ConditionNode, ParallelSplitNode, ParallelJoinNode, NotificationNode, TimerNode, ScriptNode, RejectNode, LoopNode

Synthetic Data Generator

ComponentPurpose
CreateGeneratorWizard5-step wizard for SDG creation
FieldMappingEditorConfigure field-level generation strategies
Destination formsKafkaDestinationForm, PostgresDestinationForm, DragonflyDestinationForm, FileDestinationForm, DatabaseDestinationForm, RestApiDestinationForm
ThroughputChartReal-time generation throughput (Recharts)
LiveMetricsPanelLive generation metrics

Form Handling Pattern

Stack: React Hook Form 7.65 + Zod 3.24 + @hookform/resolvers

// Multi-step wizard pattern using useFormContext
const { control, formState: { errors } } = useFormContext<GeneratorRequest>();

<Controller
name="name"
control={control}
render={({ field }) => (
<Input
label="Generator Name"
isRequired
isInvalid={!!errors.name}
{...field}
/>
)}
/>

Pattern: useForm() with zodResolver at wizard level, useFormContext() in step components.