Components
Overview

Components Overview

Ledger UI provides 53+ React components organized across 7 categories, plus 9 custom hooks. All components are built on Ant Design 5 with React.forwardRef, displayName, and fully typed props.

import { Button, Card, Input, Alert, Header } from '@gtcx/ui';

Component Categories

Navigation

SideNav, Toolbar, Breadcrumbs, MegaMenu, DropdownMenu, ContextMenu, Menubar, Command, Tabs, NavigationMenu

Data Display

AdvancedTable, Card, Badge, Avatar, AvatarGroup, Skeleton, DataVisualization, Rating

Forms

Button, Input, Label, Checkbox, Switch, Select, Textarea, Form, Calendar, DatePicker, Toggle, ToggleGroup, RadioGroup, FileUpload, ImageInput

Feedback

Alert, Dialog, AlertDialog, Sheet, Tooltip, Popover, HoverCard, toast, Accordion, Collapsible, Progress, ContentLoader, ScreenLoader, Toaster

Layout

Header, Separator, ScrollArea, ResponsiveGrid, SplitPane, MetronicLayout

Effects

GlassmorphismCard — frosted glass card with blur backdrop

AI

AIInsightCard — card with AI insight display, confidence indicator, and action buttons

Hooks

HookDescription
useBreakpointCurrent responsive breakpoint (sm, md, lg, xl)
useResponsiveBoolean checks for breakpoint queries
useBodyClassAdd/remove CSS classes on document.body
useCopyToClipboardCopy text with success/error state
useMountedTrack component mount state
useScrollPositionCurrent window scroll position
useMenuBuild menu models from configuration
useViewportViewport width/height helpers
useSliderInputSlider state management for numeric inputs

Component Architecture

All components follow the bridge pattern:

  1. Ant Design base — wraps or composes Ant Design primitives
  2. Token-driven styling — uses design tokens from @gtcx/tokens
  3. Typed props — full TypeScript interfaces exported for every component
  4. Ref forwarding — all components support React.forwardRef
  5. Display names — all components have displayName for DevTools
// Example: Button component structure
import { forwardRef } from 'react';
import { Button as AntButton } from 'antd';
 
export interface ButtonProps { /* typed props */ }
 
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
  (props, ref) => <AntButton ref={ref} {...mappedProps} />
);
Button.displayName = 'Button';

Documentation + Status

Storybook

Every component has a Storybook story with interactive controls. Run:

pnpm --filter @gtcx/storybook dev