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

doom-ui

v0.2.8

Published

A limited React UI library created for learning purposes.

Readme

Doom UI

Doom UI is a small UI library published for training purposes. This library provides a set of reusable components that can be integrated into your projects.

Installation

Minimum requirements:

  • Node.js 14.17.0 or higher

To install Doom UI, use npm:

npm install doom-ui

Components examples

Button

Button

This component renders a customizable button element.

Props:

  • buttonProps (ButtonHTMLAttributes): Optional. Additional properties to be applied to the button element.
  • children (string): Required. The text or elements to be displayed inside the button.
  • onClick (() => void): Optional. Function to be called when the button is clicked.
  • type (ButtonHTMLAttributes["type"]): Optional. Specifies the type of the button. Default is "button".
<Button
type="submit"
buttonProps={{
    disabled: isSubmitDisabled,
}}
>
Save
</Button>

Input

Input

This component renders a customizable input element.

Props:

  • error (string): Optional. The error message to be displayed below the input.
  • id (string): Optional. The id of the input element.
  • inputProps (InputHTMLAttributes): Optional. Additional properties to be applied to the input element.
  • label (string): Optional. The label to be displayed above the input.
  • type (string): Optional. Specifies the type of the input. Default is "text".
  • endAdornment (ReactNode): Optional. The element to be displayed at the end of the input.
<Input
    id="last-name"
    label="Last Name"
    type="text"
    inputProps={{
        onChange: (e) => setValue("lastName", e.target.value),
    }}
    error={formState.errors["lastName"]?.message}
/>

DatePicker

DatePicker

This component renders a customizable date picker element. (Using Input component internally)

Props:

  • error (string): Optional. The error message to be displayed below the input.
  • id (string): Optional. The id of the input element.
  • inputProps (InputHTMLAttributes): Optional. Additional properties to be applied to the input element.
  • label (string): Optional. The label to be displayed above the input.
  • endAdornment (ReactNode): Optional. The element to be displayed at the end of the input.
<DatePicker
    id="start-date"
    label="Start Date"
    inputProps={{
        onChange: (date) => setValue("startDate", date),
    }}
    error={formState.errors["startDate"]?.message}
/>

Dialog

Dialog

This component renders a customizable dialog element.

Props:

  • children (ReactNode): Required. The content to be displayed inside the dialog.
  • closeOnOverlayClick (boolean): Optional. Specifies whether the dialog should be closed when the overlay is clicked.
  • open (boolean): Required. Specifies whether the dialog is open.
  • onClose (() => void): Required. Function to be called when the dialog is closed.
const ConfirmationDialog: FC<Props> = ({ open, onClose }) => {
  return (
    <Dialog open={open} onClose={onClose} closeOnOverlayClick>
      <div className="p-4">
        <h2 className="text-xl font-semibold">Dialog Title</h2>
        <p className="text-sm">Dialog content goes here.</p>
      </div>
    </Dialog>
  );
};

Select

Select

This component renders a customizable select element.

Props:

  • id (string): Optional. The id of the select element.
  • onChange ((e: ChangeEvent) => void): Optional. Function to be called when the select value changes.
  • options (SelectOption[]): Required. The options to be displayed in the select element.
  • inputProps (SelectHTMLAttributes): Optional. Additional properties to be applied to the select element.
  • label (string): Optional. The label to be displayed above the select element.
  • error (string): Optional. The error message to be displayed below the select element.

SelectOption:

type SelectOption = {
    value: string;
    label: string;
};
<Select
    id="showEntries"
    onChange={(e) => onSelectChange(e.target.value)}
    options={[
        { value: "10", label: "10" },
        { value: "20", label: "20" },
        { value: "50", label: "50" },
        { value: "100", label: "100" },
    ]}
/>

Table

Table

This component renders a customizable table element. Uses a react context to manage the state of the table.

Props:

  • columns (Column[]): Required. The columns to be displayed in the table.
  • rows (Row[]): Required. The rows to be displayed in the table.
  • enablePagination (boolean): Optional. Specifies whether pagination should be enabled.
  • enableSearch (boolean): Optional. Specifies whether search should be enabled.
  • isLoading (boolean): Optional. Specifies whether the table is loading.
  • title (string): Optional. The title to be displayed above the table.

Column:

type TableColumnType = {
    key: string;
    label: string;
};

Row:

type TableRowType = {
    [key: string]: TableRowValue;
};

type TableRowValue = {
    value: string;
    hide?: boolean;
};
const columns: TableColumnType[] = [
    { key: "name", label: "Name" },
    { key: "email", label: "Email" },
    { key: "role", label: "Role" },
];

const rows: TableRowType[] = [
    {
        name: { value: "John Doe" },
        email: { value: "[email protected]", hide: true },
        role: { value: "Admin" },
    },
    {
        name: { value: "Jane Doe" },
        email: { value: "[email protected]", hide: true },
        role: { value: "User" },
    },
];

return <Table
    columns={columns}
    rows={rows}
    enablePagination
    enableSearch
    isLoading={isFetchingEmployees}
    title="Current Employees"
/>

Contact

For any questions or feedback, please open an issue on our GitHub repository.