npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

devora-ui

v1.0.11

Published

<div align="center">

Readme

🚀 devora-ui

Premium Dark-Themed React Components — Ready in Seconds

npm version React Bundle License

23 production-ready React components with a premium dark aesthetic.
Zero CSS imports. Zero Tailwind. Zero configuration. Just npm install and build.

Install · Quick Start · Components · API Reference · Platform


📦 Installation

npm install devora-ui

Peer dependency: React 19+ (react must be installed in your project)

⚡ Quick Start

import { Button, Card, Input, Modal } from "devora-ui";

function App() {
  return (
    <Card title="Welcome to DevoraUI" description="Build faster with premium components.">
      <Input label="Email" placeholder="[email protected]" />
      <Button text="Get Started" variant="primary" />
    </Card>
  );
}

That's it. No CSS imports, no theme providers, no configuration files. Every component renders with a polished dark theme out of the box.

🎨 Zero-Config Design

Every component in devora-ui follows these design principles:

| Principle | Details | |---|---| | Dark-first | Backgrounds: #0f172a, #020617 — designed for dark UIs | | Inline styles | Zero CSS files, zero Tailwind — works in any React setup | | System fonts | system-ui, -apple-system, sans-serif — no font loading | | Self-contained | Each component is a single file with no cross-dependencies | | Sensible defaults | Every prop has a default — components look great with zero configuration | | Rich accents | Gradients like #6366f1 → #7c3aed, subtle borders, premium shadows |

🧩 Components

Overview

| Category | Components | Count | |---|---|---| | 🎯 Actions | Button · GlowButton | 2 | | 📝 Form Inputs | Input · Textarea · Select · Checkbox · RadioGroup · Switch · FileUploader | 7 | | 📐 Layout | Card · Navbar · Sidebar · Tabs · Accordion · Pagination | 6 | | 💬 Feedback | Alert · Badge · Toast · Tooltip · LoadingCard | 5 | | 🪟 Overlays | Modal · Drawer | 2 | | 📊 Data Display | DataTable | 1 |

📖 API Reference

Button

A versatile button with multiple variants, sizes, and states.

import { Button } from "devora-ui";

<Button text="Get Started" />
<Button text="Learn More" variant="secondary" />
<Button text="Cancel" variant="ghost" />
<Button text="Delete" variant="danger" size="sm" />
<Button text="Processing..." loading={true} />

| Prop | Type | Default | Description | |---|---|---|---| | text | string | "Get Started" | Button label | | variant | "primary" \| "secondary" \| "ghost" \| "danger" | "primary" | Visual style | | size | "sm" \| "md" \| "lg" | "md" | Button size | | disabled | boolean | false | Disable interactions | | loading | boolean | false | Show loading state | | onClick | function | () => {} | Click handler |


GlowButton

A gradient button with a glowing box-shadow effect.

import { GlowButton } from "devora-ui";

<GlowButton text="Get Started" />
<GlowButton text="Dark Mode" variant="dark" />
<GlowButton text="Light" variant="light" size="lg" />

| Prop | Type | Default | Description | |---|---|---|---| | text | string | "Click Me" | Button label | | variant | "primary" \| "dark" \| "light" | "primary" | Visual style | | size | "sm" \| "md" \| "lg" | "md" | Button size | | disabled | boolean | false | Disable interactions | | onClick | function | — | Click handler |


Input

A labeled text input with helper text and error state.

import { Input } from "devora-ui";

<Input label="Email" placeholder="[email protected]" />
<Input label="Password" type="password" error="Password is required" />

| Prop | Type | Default | Description | |---|---|---|---| | label | string | "Email" | Input label | | placeholder | string | "Enter your email" | Placeholder text | | value | string | "" | Controlled value | | type | string | "text" | HTML input type | | helperText | string | "We will never share your email." | Helper message below input | | error | string | "" | Error message (overrides helperText) | | accent | string | "#6366f1" | Accent color (hex) | | onChange | function | () => {} | Change handler (receives value) |


Card

A content card with title, description, accent bar, and footer.

import { Card } from "devora-ui";

<Card
  title="Dashboard"
  description="View your analytics and manage settings."
  footer="Last updated: today"
  accent="#059669"
/>

| Prop | Type | Default | Description | |---|---|---|---| | title | string | "Card title" | Card heading | | description | string | "Card description goes here." | Card body text | | footer | string | "Footer text" | Footer content | | accent | string | "#6366f1" | Accent bar color (hex) |


Alert

A dismissible alert banner with type-based color coding.

import { Alert } from "devora-ui";

<Alert title="Success!" message="Your changes have been saved." type="success" />
<Alert title="Error" message="Something went wrong." type="error" />
<Alert title="Warning" message="This action is irreversible." type="warning" />

| Prop | Type | Default | Description | |---|---|---|---| | title | string | "Important Update" | Alert title | | message | string | "We've updated our privacy policy..." | Alert body | | type | "info" \| "success" \| "warning" \| "error" | "info" | Alert color variant | | accent | string | "#6366f1" | Custom accent (fallback if type is unknown) | | bg | string | "#0f172a" | Background color | | onClose | function | () => {} | Close button handler |


Modal

A dialog with overlay, title, description, and confirm/cancel actions. Supports both controlled and uncontrolled modes.

import { Modal } from "devora-ui";

// Uncontrolled (opens by default)
<Modal title="Confirm Action" description="Are you sure?" />

// Controlled
const [open, setOpen] = useState(false);
<Modal
  open={open}
  title="Delete Item"
  description="This cannot be undone."
  confirmText="Delete"
  onConfirm={() => handleDelete()}
  onCancel={() => setOpen(false)}
/>

| Prop | Type | Default | Description | |---|---|---|---| | open | boolean | — | Controlled open state | | defaultOpen | boolean | true | Initial open state (uncontrolled) | | title | string | "Modal title" | Dialog heading | | description | string | "This is a modal description." | Dialog body | | confirmText | string | "Confirm" | Confirm button text | | cancelText | string | "Cancel" | Cancel button text | | onConfirm | function | () => {} | Confirm handler | | onCancel | function | () => {} | Cancel / close handler |


Drawer

A slide-in side panel with overlay. Supports controlled and uncontrolled modes.

import { Drawer } from "devora-ui";

<Drawer title="Settings" onClose={() => console.log("closed")}>
  <p>Drawer content here</p>
</Drawer>

| Prop | Type | Default | Description | |---|---|---|---| | open | boolean | — | Controlled open state | | defaultOpen | boolean | true | Initial open state (uncontrolled) | | title | string | "Drawer" | Panel heading | | children | ReactNode | "Drawer content" | Panel body content | | onClose | function | () => {} | Close handler |


Tabs

A tabbed interface with dynamic content switching.

import { Tabs } from "devora-ui";

<Tabs
  tabs={[
    { label: "Overview", content: "Overview content goes here." },
    { label: "Activity", content: "Recent activity feed." },
    { label: "Settings", content: "Application preferences." },
  ]}
  defaultIndex={0}
/>

| Prop | Type | Default | Description | |---|---|---|---| | tabs | Array<{ label, content }> | 3 default tabs | Tab definitions | | defaultIndex | number | 0 | Initially active tab |


Navbar

A horizontal navigation bar with active link state and CTA button.

import { Navbar } from "devora-ui";

<Navbar
  logo="MyApp"
  links={["Home", "Features", "Pricing", "Docs"]}
  ctaText="Sign Up"
  onCtaClick={() => console.log("CTA clicked")}
/>

| Prop | Type | Default | Description | |---|---|---|---| | logo | string | "Devora UI" | Brand text | | links | string[] | ["Home", "Features", "Pricing", "Docs"] | Nav links | | ctaText | string | "Get Started" | CTA button text | | onLinkClick | function | () => {} | Link click handler (receives link name) | | onCtaClick | function | () => {} | CTA click handler |


Toast

A notification message with tone-based styling.

import { Toast } from "devora-ui";

<Toast title="Saved" message="Your changes have been saved." tone="success" />
<Toast title="Error" message="Failed to save." tone="error" />
<Toast title="Info" message="New version available." tone="info" />
<Toast title="Warning" message="Disk space is low." tone="warning" />

| Prop | Type | Default | Description | |---|---|---|---| | title | string | "Success" | Toast heading | | message | string | "Action completed successfully." | Toast body | | tone | "success" \| "error" \| "info" \| "warning" | "success" | Color variant |


Tooltip

A hover-triggered tooltip with placement options.

import { Tooltip } from "devora-ui";

<Tooltip label="Hover me" content="This is helpful info" placement="top" />
<Tooltip label="Bottom tip" content="Appears below" placement="bottom" />

| Prop | Type | Default | Description | |---|---|---|---| | label | string | "Hover me" | Trigger button text | | content | string | "Tooltip content" | Tooltip message | | placement | "top" \| "bottom" | "top" | Tooltip position |


Switch

A toggle switch with label. Supports controlled and uncontrolled modes.

import { Switch } from "devora-ui";

<Switch label="Enable notifications" />
<Switch label="Dark mode" defaultChecked={true} />
<Switch label="Disabled" disabled={true} />

| Prop | Type | Default | Description | |---|---|---|---| | label | string | "Enable notifications" | Toggle label | | checked | boolean | — | Controlled checked state | | defaultChecked | boolean | false | Initial state (uncontrolled) | | disabled | boolean | false | Disable interactions | | onChange | function | () => {} | Change handler (receives boolean) |


DataTable

A simple data table with column headers and row data.

import { DataTable } from "devora-ui";

<DataTable
  columns={["Name", "Role", "Status"]}
  rows={[
    ["Asha", "Designer", "Active"],
    ["Rahul", "Engineer", "Invited"],
    ["Mira", "PM", "Active"],
  ]}
/>

| Prop | Type | Default | Description | |---|---|---|---| | columns | string[] | ["Name", "Role", "Status"] | Column headers | | rows | string[][] | 3 default rows | Row data (2D array) |


Additional Components

The following components follow the same patterns — imported and used the same way:

| Component | Key Props | |---|---| | Textarea | label, placeholder, value, helperText, error, onChange | | Select | label, options, value, onChange | | Checkbox | label, checked, defaultChecked, disabled, onChange | | RadioGroup | label, options, value, onChange | | Accordion | items (array of { title, content }) | | Sidebar | logo, links, activeLink, onLinkClick | | Pagination | totalPages, currentPage, onPageChange | | Badge | text, variant, size | | LoadingCard | title, message | | FileUploader | label, accept, onFileSelect |

🔧 Build Info

| Output | Format | File | |---|---|---| | ESM | import { Button } from "devora-ui" | dist/index.mjs | | CJS | const { Button } = require("devora-ui") | dist/index.js |

Built with tsup — tree-shakeable, zero-runtime bundler.

🤖 AI-Powered Platform

devora-ui is part of DevoraUI — a full-stack platform where you can also generate custom React components with AI.

🌐 Try it live: devoraui-1.onrender.com

  • Describe any UI in plain English
  • Get production-ready React code in seconds
  • Preview live in a sandbox before committing
  • Save to your personal component library
  • Purchase AI credits via Razorpay or bring your own API key

📂 Full source: github.com/prit-zalavadiya-78/DevoraUI

📄 License

ISC © DevoraUI


Built with 🔥 by Prit Zalavadiya

If devora-ui helps your project, consider giving it a ⭐ on GitHub