PXLKIT UI KIT
A React component kit built on three promises. Surface system — flip every component between an 8-bit pixel aesthetic and a flat linear one with a single prop, same API either way. Accessibility-first — WAI-ARIA roles, keyboard navigation, focus rings, and reduced-motion fallbacks ship on every interactive, not bolted on later. Batteries-included — DataTable, Stepper, Sidebar, Timeline, Calendar, Charts, OTPInput and 103+ more are already in the box. Use the sidebar to browse all 111 components and the PixelToast guide.
Components
111
Icon Packs
6
Design Tokens
6 tones
Fully Custom
100%
GETTING STARTED
Three steps and you're rendering. Install @pxlkit/ui-kit, import its stylesheet alongside Tailwind, and pull components from the same package. Every primitive accepts the shared , size, and surface contract — so what you learn on applies to , , and the other 108.
// 1. Setup your Tailwind CSS file (e.g., index.css)// @import "tailwindcss";// @import "@pxlkit/ui-kit/styles.css";// @source "../node_modules/@pxlkit/ui-kit";// 2. Import components in your React appimport { PixelButton, PixelCard, PixelInput } from '@pxlkit/ui-kit';import { PxlKitIcon } from '@pxlkit/core';import { Trophy } from '@pxlkit/gamification';import { Search } from '@pxlkit/ui';// Button with icon<PixelButton tone="green" iconLeft={<PxlKitIcon icon={Trophy} size={16} />}> Create Quest</PixelButton>// Input with icon<PixelInput label="Search" icon={<PxlKitIcon icon={Search} size={16} />} placeholder="Find icons..."/>Common API Surface
These props are accepted by every UI-kit component where applicable. Each component's individual props table below also lists them inline — so each table is a complete, self-contained reference. This shared block remains as a quick overview.
| Prop | Type | Default | Description |
|---|---|---|---|
| tone | "green" | "cyan" | "gold" | "red" | "purple" | "pink" | "neutral" | varies | Color scheme — shared across all components |
| size | "sm" | "md" | "lg" | "md" | Controls height, padding, and font size |
| surface | "pixel" | "linear" | inherits from PxlKitSurfaceProvider, falls back to "pixel" | Visual aesthetic. Per-component override of the global surface — see Surface System. |
| disabled | boolean | false | Standard HTML disabled state — applies to every interactive component (buttons, inputs, switches, sliders, segmented, etc.). |
| iconLeft / iconRight | ReactNode | — | Icon slots flanking the label. Accepted by PixelButton; PxlKitButton/PixelSplitButton use the single `icon` slot. Standalone inputs use the `icon` prop instead. |
| label | string | — | Accessible label for inputs/controls (PixelInput, PixelSelect, PixelCheckbox, PixelSwitch, PixelSlider, PixelRadioGroup, …). Buttons use `children` for their visible text, not `label`. |
| children | ReactNode | — | Required for container components (PixelCard, PixelModal, PixelTooltip, animations, etc.). Listed here once; not repeated in each table. |
| className | string | — | Extra CSS class names merged onto the outer element. |
DESIGN TOKENS
All components use CSS custom properties for theming. Override these variables to customize the entire kit. Dark and light themes are built in via the .dark class. Colors are applied through the tone prop on components like , , and .
Colors
Green
--retro-green
Cyan
--retro-cyan
Gold
--retro-gold
Red
--retro-red
Purple
--retro-purple
Typography
Press Start 2P
Titles & accents — font-pixel
JetBrains Mono
Code & UI labels — font-mono
Inter
Body text — font-body
Surfaces
Background
--retro-bg
Surface
--retro-surface
Card
--retro-card
Border
--retro-border
SURFACE SYSTEM
v1.4.0Every UI-kit component has two visual surfaces: the retro 8-bit "pixel" aesthetic (default — sharp pixel borders, pressed shadows, mono fonts) and a flatter, more modern "linear" aesthetic (subtle 1px borders, rounded corners, sans fonts). You toggle it globally with <PxlKitSurfaceProvider>, or per-component with the surface prop. Useful for embedding Pxlkit into a non-retro product without rewriting the components.
Side-by-side
surface="pixel" (default)
surface="linear"
Every component also accepts `surface` directly
Every UI-kit component (PixelButton, PixelInput, PixelCard, …) exposes a surface?: "pixel" | "linear" prop that overrides the nearest provider. Use it when you need a single button in linear mode inside an otherwise pixel-mode page.
import { PxlKitSurfaceProvider, PixelButton, PixelCard } from '@pxlkit/ui-kit';// === GLOBAL toggle: wrap your whole app once ===export default function RootLayout({ children }) { return ( <html> <body> <PxlKitSurfaceProvider surface="linear"> {children} </PxlKitSurfaceProvider> </body> </html> );}// === LOCAL override: one component in a different mode ===<PxlKitSurfaceProvider surface="pixel"> <PixelCard title="Retro card"> {/* This one button breaks the pixel surface */} <PixelButton tone="green" surface="linear">Modern button</PixelButton> </PixelCard></PxlKitSurfaceProvider>LOCALE / TURKISH SUPPORT
v1.3.0PxlKit includes built-in locale support for Turkish (tr) and English (en). Turkish requires special handling because of the dotted/dotless i distinction, and the latin-ext Google Fonts subset for characters like ğ, ş, ı, İ, ç, ö, ü.
Why Turkish Needs Special Handling
| Input | English Uppercase | Turkish Uppercase | Note |
|---|---|---|---|
| i | I | İ (U+0130) | Dotted uppercase İ in Turkish |
| ı (U+0131) | I | I | Dotless ı is unique to Turkish |
| istanbul | ISTANBUL | İSTANBUL | Complete word difference |
Live Demo — Turkish vs English
ISTANBUL IŞLEMLERI
İSTANBUL İŞLEMLERİ
Notice how the section title "istanbul işlemleri" renders differently: English shows ISTANBUL ISLEMLERI while Turkish correctly shows İSTANBUL İŞLEMLERİ. The avatar initials also change — "İG" (Turkish) vs "IG" (English) for "işıl gündüz".
Turkish Characters — Font Preview
Press Start 2P (font-pixel)
Ç Ğ İ Ö Ş Ü
ç ğ ı ö ş ü
JetBrains Mono (font-mono)
Ç Ğ İ Ö Ş Ü
ç ğ ı ö ş ü
Inter (font-body)
Ç Ğ İ Ö Ş Ü
ç ğ ı ö ş ü
Turkish Pangram (font-pixel)
Pijamalı hasta yağız şoföre çabucak güvendi
// === STEP 1: Install & import ===import { PxlKitLocaleProvider } from '@pxlkit/ui-kit';// === STEP 2: Wrap your app (React / Next.js) ===// For a standard React app (Vite, CRA, etc.):function App() { return ( <PxlKitLocaleProvider locale="tr"> <MyApp /> </PxlKitLocaleProvider> );}// For Next.js App Router — also set lang on <html>:// app/layout.tsxexport default function RootLayout({ children }) { return ( <html lang="tr"> <body> <PxlKitLocaleProvider locale="tr"> {children} </PxlKitLocaleProvider> </body> </html> );}// === STEP 3: Google Fonts — ensure latin-ext subset ===// In your CSS file or HTML <head>:// @import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&subset=latin,latin-ext&display=swap');// Or generate the URL dynamically:import { buildGoogleFontsUrl } from '@pxlkit/ui-kit';const fontsUrl = buildGoogleFontsUrl('tr');// → includes &subset=latin,latin-ext// === STEP 4: Use locale-aware text in custom components ===import { usePxlKitLocale, toLocaleUpper } from '@pxlkit/ui-kit';function MyTitle({ text }: { text: string }) { const { upper } = usePxlKitLocale(); return <h1 className="font-pixel">{upper(text)}</h1>; // "istanbul" → "İSTANBUL" when locale is "tr"}// Or use the standalone function:toLocaleUpper('istanbul', 'tr'); // → "İSTANBUL"toLocaleUpper('istanbul', 'en'); // → "ISTANBUL"Important: CSS text-transform
CSS text-transform: uppercase is automatically locale-aware when the lang attribute is set. PxlKitLocaleProvider sets lang on a wrapper div. For full page coverage, also set lang="tr" on your <html> tag.
All three fonts support Turkish
Press Start 2P, Inter, and JetBrains Mono all include Latin Extended characters (ğ, Ğ, ı, İ, ş, Ş, ç, Ç, ö, Ö, ü, Ü). The latin-ext subset in the Google Fonts URL ensures these glyphs are downloaded.
PIXELINPUT
input<PixelInput label="Search" icon={<PxlKitIcon icon={Search} size={16} />} placeholder="Find components..." tone="cyan"/><PixelInput label="Email" error="Invalid email address" />PIXELPASSWORDINPUT
passwordinput<PixelPasswordInput label="Password" placeholder="Enter your password" />PIXELTEXTAREA
textareaFieldShell wrapper as .<PixelTextarea label="Bio" placeholder="Tell us about yourself..." />PIXELSELECT
select<PixelSelect label="Icon Pack" value={pack} onChange={setPack} options={[ { value: 'ui', label: 'UI' }, { value: 'gamification', label: 'Gamification' }, { value: 'social', label: 'Social' }, ]}/>PIXELCHECKBOX
checkbox<PixelCheckbox label="Enable animations" checked={enabled} onChange={setEnabled} tone="green"/>PIXELRADIOGROUP
radiogroup<PixelRadioGroup label="Framework" value={framework} onChange={setFramework} options={[ { value: 'react', label: 'React' }, { value: 'vue', label: 'Vue' }, { value: 'svelte', label: 'Svelte' }, ]}/>PIXELSWITCH
switch<PixelSwitch label="Auto refresh" checked={on} onChange={setOn} />PIXELSLIDER
slider<PixelSlider label="Volume" value={vol} onChange={setVol} min={0} max={100} /><PixelSlider label="Opacity" value={opacity} onChange={setOpacity} tone="gold" />PIXELSEGMENTED
segmentedLayout density
<PixelSegmented label="Density" value={density} onChange={setDensity} options={[ { value: 'compact', label: 'Compact' }, { value: 'comfortable', label: 'Comfortable' }, ]}/>PIXELCARD
cardSocial Pack
<PixelCard title="Gamification" icon={<PxlKitIcon icon={Trophy} size={16} />} footer={<PixelButton tone="gold" size="sm">Use Pack</PixelButton>}> RPG icons, rewards, and game UI elements.</PixelCard>PIXELSTATCARD
statcardTotal Icons
204
+12 new
Components
111
100% typed
Downloads
8.2k
+24%
Stars
1.4k
trending
<PixelStatCard label="Downloads" value="12.4k" tone="green" trend="+15% this week" />PIXELTABLE
table| Component | Category | Status |
|---|---|---|
| PixelButton | Actions | Stable |
| PixelSelect | Inputs | Stable |
| PixelTable | Data Display | New |
| PixelAvatar | Data Display | New |
| PixelSkeleton | Feedback | New |
<PixelTable columns={[ { key: 'name', header: 'Component' }, { key: 'category', header: 'Category' }, { key: 'status', header: 'Status' }, ]} data={[ { name: 'PixelButton', category: 'Actions', status: <PixelBadge tone="green">Stable</PixelBadge> }, { name: 'PixelTable', category: 'Data', status: <PixelBadge tone="gold">New</PixelBadge> }, ]}/>PIXELAVATAR
avatar<PixelAvatar name="Joangel De La Rosa" tone="green" /><PixelAvatar name="AI Bot" tone="purple" size="lg" />PIXELBADGE
badge<PixelBadge tone="green">Stable</PixelBadge><PixelBadge tone="gold">Beta</PixelBadge><PixelBadge tone="red">Deprecated</PixelBadge>PIXELCHIP
chip<PixelChip label="react" tone="cyan" /><PixelChip label="removable" tone="gold" onRemove={() => {}} />PIXELTEXTLINK
textlink<a> when href is provided, otherwise as <button>. Supports all anchor and button attributes via spread props.<PixelTextLink href="/docs" tone="cyan">Documentation</PixelTextLink><PixelTextLink tone="gold" onClick={() => alert('clicked')}>Action Link</PixelTextLink>PIXELCODEINLINE
codeinlineUse useState for local state, PxlKitIcon for icons, green gold red neutral
<PixelCodeInline tone="cyan">useState</PixelCodeInline><PixelCodeInline tone="purple">PxlKitIcon</PixelCodeInline>PIXELKBD
kbd<PixelKbd>Ctrl</PixelKbd> + <PixelKbd>K</PixelKbd><PixelKbd>⌘</PixelKbd> + <PixelKbd>Shift</PixelKbd> + <PixelKbd>P</PixelKbd>PIXELCOLORSWATCH
colorswatchGreen
--retro-green
Cyan
--retro-cyan
Gold
--retro-gold
Red
--retro-red
Purple
--retro-purple
<PixelColorSwatch name="Green" cssVar="--retro-green" /><PixelColorSwatch name="Cyan" cssVar="--retro-cyan" />PIXELALERT
alertBuild Success
Package compiled and DTS types generated.
Warning
Some components still need visual fine-tuning review.
Breaking Change
PixelSelect API changed from native to custom dropdown in v2.0.
Tip
Use the tone prop to match your alert to the appropriate severity level.
<PixelAlert tone="green" icon={<PxlKitIcon icon={CheckCircle} size={16} />} title="Build Success" message="Package compiled successfully." action={<PixelButton tone="green" size="sm">View Logs</PixelButton>}/>PIXELPROGRESS
progress<PixelProgress value={72} tone="green" label="Upload Progress" />PIXELSKELETON
skeleton<PixelSkeleton width="200px" height="1rem" /><PixelSkeleton width="40px" height="40px" rounded />PIXELEMPTYSTATE
emptystateNo results found
Adjust your filters or create a new custom component for this kit.
<PixelEmptyState title="No results" description="Try adjusting your search or filters." icon={<PxlKitIcon icon={Search} size={20} />} action={<PixelButton tone="green">Reset Filters</PixelButton>}/>PIXELTOAST
toast<PixelToast> component shipped from @pxlkit/core. It renders one toast at a fixed position; you control visibility and lifecycle. For most apps you'll want the useToast() hook below — it stacks multiple toasts and handles timers for you. The old /toast route redirects to this section.Detailed integration docs are also available in /docs#toast-notifications.
import { useToast } from '@/components/ToastProvider';import { CheckCircle, WarningTriangle } from '@pxlkit/feedback';import { FireSword } from '@pxlkit/gamification';function SaveButton() { const { toast, success, warning } = useToast(); return ( <> <PixelButton onClick={() => success('SAVED', 'Changes synced to server', CheckCircle)} > Save </PixelButton> <PixelButton onClick={() => toast({ tone: 'warning', title: 'LOW HEALTH', message: 'Use a potion now', position: 'bottom-right', duration: 3500, animatedIcon: FireSword, }) } > Show Warning Toast </PixelButton> </> );}USETOAST()
usetoast()<PixelToast> instances. Mount the matching <ToastProvider> once at the root (this site does it in layout.tsx). The hook's methods auto-handle ids, timers, and unmount — you only worry about the message. Returns the API listed below.Implementation lives at apps/web/src/components/ToastProvider.tsx in this repo. Copy that file (or write your own equivalent) into your project to get the multi-toast stack on top of the low-level <PixelToast> primitive documented above.
// 1. Mount the provider once at the rootimport { ToastProvider } from '@/components/ToastProvider';export default function RootLayout({ children }) { return ( <html> <body> <ToastProvider> {children} </ToastProvider> </body> </html> );}// 2. Anywhere inside, call useToast() and use itimport { useToast } from '@/components/ToastProvider';import { CheckCircle, WarningTriangle } from '@pxlkit/feedback';import { FireSword } from '@pxlkit/gamification';function SaveButton() { const { toast, success } = useToast(); return ( <> <PixelButton onClick={() => success('SAVED', 'Changes synced', CheckCircle)}> Save </PixelButton> <PixelButton onClick={() => toast({ tone: 'warning', title: 'LOW HEALTH', message: 'Use a potion now', position: 'bottom-right', duration: 3500, animatedIcon: FireSword, }) } > Show Warning Toast </PixelButton> </> );}PIXELTABS
tabs<PixelTabs items={[ { id: 'overview', label: 'Overview', content: '...' }, { id: 'api', label: 'API', content: '...' }, { id: 'tokens', label: 'Tokens', content: '...' },]} />PIXELACCORDION
accordion<PixelAccordion items={[ { id: '1', title: 'How to use icons', content: '...' }, { id: '2', title: 'Custom themes', content: '...' },]} />PIXELCOLLAPSIBLE
collapsibleThis panel starts expanded. Click the label to collapse it.
<PixelCollapsible label="Show details"> <p>Hidden content revealed on toggle.</p></PixelCollapsible><PixelCollapsible label="Open by default" defaultOpen tone="green"> <p>Visible from the start.</p></PixelCollapsible>PIXELPAGINATION
pagination<PixelPagination page={page} total={5} onChange={setPage} />PIXELMODAL
modalconst [open, setOpen] = useState(false);<PixelButton onClick={() => setOpen(true)}>Open Modal</PixelButton><PixelModal open={open} title="Confirm Action" onClose={() => setOpen(false)}> <p>Are you sure you want to proceed?</p> <PixelButton tone="green" onClick={() => setOpen(false)}>Confirm</PixelButton></PixelModal>PIXELTOOLTIP
tooltip<PixelTooltip content="Edit this item" position="top"> <PxlKitButton label="Edit" icon={<PxlKitIcon icon={Edit} size={16} />} /></PixelTooltip>PIXELDROPDOWN
dropdown<PixelDropdown label="Actions" items={[ { value: 'copy', label: 'Copy snippet' }, { value: 'preview', label: 'Open preview' }, { value: 'delete', label: 'Delete item' }, ]} onSelect={(v) => console.log(v)}/>PIXELSECTION
sectionEXAMPLE SECTION
This is a wrapped content area with border and padding.
<PixelSection title="Actions" subtitle="Interactive button components."> {children}</PixelSection>PIXELDIVIDER
divider<PixelDivider /><PixelDivider label="Section" tone="green" spacing="lg" />PIXELBAREINPUT
bareinput<input> wrapper with forwardRef support. Use as the base for custom text fields or form controls.Renders an unstyled <input> element. For styled text fields with labels, hints, and errors, use .
<PixelBareInput type="text" placeholder="Unstyled input..." className="border px-2 py-1" />PIXELBARETEXTAREA
baretextarea<textarea> wrapper with forwardRef support. Use for custom multi-line inputs.Renders an unstyled <textarea> element. For styled multi-line input with labels and errors, use .
<PixelBareTextarea rows={3} placeholder="Unstyled textarea..." className="border px-2 py-1 w-full" />TRIGGER MODES
all animationsEvery animation component accepts a trigger prop that controls when it plays. The default "mount" mode preserves backward compatibility — the animation fires on render.
Plays immediately on render (default).
Plays while the pointer is over the element.
Plays once per click. Re-click to replay.
Plays while the element has focus-within.
Plays when scrolled into the viewport (IntersectionObserver).
Controlled mode — true = playing, false = idle.
// Plays on hover<PixelBounce trigger="hover"> <PxlKitIcon icon={Star} size={20} /></PixelBounce>// Plays once per click<PixelShake trigger="click" repeat={2}> <PixelBadge tone="red">Error</PixelBadge></PixelShake>// Controlled by parent stateconst [active, setActive] = useState(false);<PixelPulse trigger={active}> <PixelBadge tone="green">Live</PixelBadge></PixelPulse>// Fade in when scrolled into view<PixelFadeIn trigger="inView" duration={600}> <PixelCard title="Hello">Visible!</PixelCard></PixelFadeIn>// Callback when animation completes<PixelFadeIn trigger="click" onComplete={() => console.log('done!')}> <p>Click me</p></PixelFadeIn>HOVER
CLICK
HOVER
PIXELFADEIN
fadeintrigger to control when it fires — e.g. "inView" for scroll-triggered reveals. Combines well with for staggered entrances.Faded In
<PixelFadeIn duration={400} delay={0} easing="ease-out"> <PixelCard title="Hello World">Faded in!</PixelCard></PixelFadeIn>// Scroll-triggered fade<PixelFadeIn trigger="inView" duration={600}> <p>I appear when scrolled into view</p></PixelFadeIn>PIXELSLIDEIN
slideindistance and pacing using easing. Complements .<PixelSlideIn from="down" duration={350} distance={14} easing="ease-out"> <PixelButton tone="green">Slid In</PixelButton></PixelSlideIn>// Staggered list{items.map((item, i) => ( <PixelSlideIn key={item} from="right" delay={i * 80}> <PixelCard title={item} /> </PixelSlideIn>))}PIXELPULSE
pulseCPU
87%
<PixelPulse duration={2000}> <PixelBadge tone="red">Live</PixelBadge></PixelPulse>PIXELBOUNCE
bounceduration and stop it with repeat=1.<PixelBounce duration={800}> <PxlKitIcon icon={Trophy} size={24} /></PixelBounce>// Finite bounce<PixelBounce duration={600} repeat={3}> <PixelBadge tone="gold">+100 XP</PixelBadge></PixelBounce>PIXELFLOAT
float<PixelFloat distance={8} duration={2400}> <PxlKitIcon icon={Star} size={20} /></PixelFloat>PIXELSHAKE
shakerepeat low to avoid visual fatigue. Often paired with .<PixelShake duration={450} repeat={2} distance={3}> <PixelBadge tone="red">Invalid Input</PixelBadge></PixelShake>PIXELROTATE
rotatedirection to reverse or alternate spin behavior for loading indicators and decorative accents.<PixelRotate duration={1800} direction="normal" repeat="infinite"> <PxlKitIcon icon={Gear} size={22} /></PixelRotate>PIXELZOOMIN
zoominPack Ready
<PixelZoomIn duration={320} startScale={0.9}> <PixelCard title="Quick Reveal">Zoomed entrance</PixelCard></PixelZoomIn>PIXELFLICKER
flickerSIGNAL LOCKED
<PixelFlicker duration={2200}> <p className="font-pixel text-retro-cyan">SIGNAL LOCKED</p></PixelFlicker>PIXELTYPEWRITER
typewriter<PixelTypewriter text="Hello, World!" speed={60} tone="green" /><PixelTypewriter text="// loading system..." speed={40} delay={800} tone="cyan" cursor />PIXELGLITCH
glitchtrigger, tune speed and intensity.ERROR
2500ms / 4px
CORRUPT
1800ms / 5px
badge / 3px
PXLKIT
2200ms / 6px
<PixelGlitch trigger="hover" duration={3000} intensity={4}> <h1 className="font-pixel text-retro-green">SYSTEM ERROR</h1></PixelGlitch>Real live demos for every component that ships in @pxlkit/ui-kit. Each preview is the Default example function authored alongside the component in <Component>.examples.tsx (single source of truth).
PIXELCOMBOBOX
combobox@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelCombobox } from '@pxlkit/ui-kit';PIXELMULTISELECT
multiselect@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelMultiSelect } from '@pxlkit/ui-kit';PIXELDATEPICKER
datepicker@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelDatePicker } from '@pxlkit/ui-kit';PIXELNUMBERINPUT
numberinput@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelNumberInput } from '@pxlkit/ui-kit';PIXELOTPINPUT
otpinput@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelOTPInput } from '@pxlkit/ui-kit';PIXELFILEUPLOAD
fileupload@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelFileUpload } from '@pxlkit/ui-kit';PIXELFORM
form@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelForm } from '@pxlkit/ui-kit';PIXELINPUTGROUP
inputgroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelInputGroup } from '@pxlkit/ui-kit';PIXELTOGGLEGROUP
togglegroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelToggleGroup } from '@pxlkit/ui-kit';PIXELTOGGLE
toggle@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelToggle } from '@pxlkit/ui-kit';PIXELDATERANGEPICKER
daterangepicker@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelDateRangePicker } from '@pxlkit/ui-kit';PIXELCALENDARGRID
calendargrid@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelCalendarGrid } from '@pxlkit/ui-kit';PIXELCOLORINPUT
colorinput@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelColorInput } from '@pxlkit/ui-kit';PIXELRIBBON
ribbon@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelRibbon } from '@pxlkit/ui-kit';PIXELSTARRATING
starrating@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelStarRating } from '@pxlkit/ui-kit';PIXELICONFRAME
iconframe@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelIconFrame } from '@pxlkit/ui-kit';PIXELDATATABLE
datatable@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.| Alice | Engineer | active |
| Bob | Designer | idle |
| Carol | PM | active |
| Dan | Engineer | active |
| Eve | Designer | idle |
import { PixelDataTable } from '@pxlkit/ui-kit';PIXELCAROUSEL
carousel@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelCarousel } from '@pxlkit/ui-kit';PIXELTIMELINE
timeline@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.- Order placed09:00Confirmation email sent.
- Packed11:20At the warehouse.
- Shipped—Awaiting carrier pickup.
import { PixelTimeline } from '@pxlkit/ui-kit';PIXELSTATGROUP
statgroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Users
1,284
Revenue
$12.4k
Active
312
import { PixelStatGroup } from '@pxlkit/ui-kit';PIXELAVATARGROUP
avatargroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelAvatarGroup } from '@pxlkit/ui-kit';PIXELBADGEGROUP
badgegroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelBadgeGroup } from '@pxlkit/ui-kit';PIXELCHIPGROUP
chipgroup@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelChipGroup } from '@pxlkit/ui-kit';PIXELSPARKLINE
sparkline@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelSparkline } from '@pxlkit/ui-kit';PIXELBARCHART
barchart@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelBarChart } from '@pxlkit/ui-kit';PIXELAREACHART
areachart@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelAreaChart } from '@pxlkit/ui-kit';PIXELFEATURECARD
featurecard@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Realtime sync
Push every keystroke to peers via WebSockets — under 50ms p95.
import { PixelFeatureCard } from '@pxlkit/ui-kit';PIXELPRICINGCARD
pricingcard@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Starter
Everything you need to ship your first project.
- Included: 10 projects
- Included: Basic analytics
- Included: Email support
- Not included: Priority support
import { PixelPricingCard } from '@pxlkit/ui-kit';PIXELTESTIMONIALCARD
testimonialcard@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.“pxlkit dropped the polish ceiling. Our marketing site felt like a product launch in a week.”
import { PixelTestimonialCard } from '@pxlkit/ui-kit';PIXELHEROSECTION
herosection@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Pixel-perfect retro UI for modern web
A component kit that brings cinematic, terminal-grade interfaces to React apps.
import { PixelHeroSection } from '@pxlkit/ui-kit';PIXELHEROMEDIA
heromedia@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelHeroMedia } from '@pxlkit/ui-kit';PIXELSPINNER
spinner@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelSpinner } from '@pxlkit/ui-kit';PIXELSTEPPER
stepper@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelStepper } from '@pxlkit/ui-kit';PIXELPORTAL
portal@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelPortal } from '@pxlkit/ui-kit';PIXELPOPOVER
popover@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelPopover } from '@pxlkit/ui-kit';PIXELDRAWER
drawer@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelDrawer } from '@pxlkit/ui-kit';PIXELCOMMAND
command@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelCommand } from '@pxlkit/ui-kit';PIXELALERTDIALOG
alertdialog@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelAlertDialog } from '@pxlkit/ui-kit';PIXELSHEET
sheet@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelSheet } from '@pxlkit/ui-kit';PIXELBOX
box@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Surface-aware container box.
import { PixelBox } from '@pxlkit/ui-kit';PIXELSTACK
stack@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelStack } from '@pxlkit/ui-kit';PIXELCLUSTER
cluster@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelCluster } from '@pxlkit/ui-kit';PIXELGRID
grid@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelGrid } from '@pxlkit/ui-kit';PIXELEQUALHEIGHTGRID
equalheightgrid@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.One
Short copy.
Two
A longer body that forces the row to grow taller than the first card.
Three
Medium length copy here.
import { PixelEqualHeightGrid } from '@pxlkit/ui-kit';PIXELCENTER
center@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Centered content with the default max-width and page gutter.
import { PixelCenter } from '@pxlkit/ui-kit';PIXELCONTAINER
container@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Default container — section landmark, xl max-width, lg rhythm.
import { PixelContainer } from '@pxlkit/ui-kit';PIXELTWOCOLUMN
twocolumn@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelTwoColumn } from '@pxlkit/ui-kit';PIXELSECTIONHEADER
sectionheader@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Section: Build pixel-perfect interfaces
A retro-cinematic component kit with surface awareness and rhythm tokens.
import { PixelSectionHeader } from '@pxlkit/ui-kit';PIXELBENTO
bento@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.import { PixelBento } from '@pxlkit/ui-kit';PIXELBENTOCELL
bentocell@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Feature cell
Span 2x1 with feature layout.
import { PixelBentoCell } from '@pxlkit/ui-kit';PIXELSCROLLAREA
scrollarea@pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.Scroll item 1
Scroll item 2
Scroll item 3
Scroll item 4
Scroll item 5
Scroll item 6
Scroll item 7
Scroll item 8
Scroll item 9
Scroll item 10
Scroll item 11
Scroll item 12
import { PixelScrollArea } from '@pxlkit/ui-kit';