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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nayeshdaggula/tailify

v1.0.7

Published

Tailify is a React component library built with Tailwind CSS.

Downloads

524

Readme

Tailify

React Tailwind Component Library

Configuration

To configure Tailify with your TailwindCSS project, add the following line to the content section of your tailwind.config.js file:

module.exports = {
  content: [
    "./node_modules/@nayeshdaggula/tailify/dist/**/*.{js,ts,jsx,tsx}",
    // other paths to your project files
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};

This ensures that TailwindCSS processes the styles from the Tailify component library.

Available Components

Tailify provides a growing list of reusable React components built with TailwindCSS. Below is the list of currently available components:

  • Textinput: Input field with validation and description.
  • Textarea: Multiline input field with validation.
  • Passwordinput: Password input with validation and description.
  • Pininput: Input component for entering PIN codes.
  • Modal: A customizable modal dialog with support for fullscreen, dynamic sizes, and z-index stacking.
  • Drawer: A slide-in panel with configurable positions (left, right, top, bottom), sizes, and transitions.
  • Card: A flexible card component with optional sections and border styles.
  • Select: A dropdown component with searchable options and custom styling.

Installation

Install the library via npm:

npm install @nayeshdaggula/tailify

Usage Example

Below is an example of how to use multiple components from Tailify in a single page:

'use client';
import React, { useState } from 'react';
import { Textinput, Textarea, Passwordinput, Pininput, Modal, Card, Select, Drawer } from '@nayeshdaggula/tailify';

function Page() {
  const [text, setText] = useState('');
  const [error, setError] = useState('');
  const [pinInput, setPinInput] = useState('');
  const [isModalOpen, setModalOpen] = useState(false);
  const [isDrawerOpen, setDrawerOpen] = useState(false);

  const handleSubmit = () => {
    if (!text) {
      setError("This field is required.");
    } else {
      setError('');
      alert(`Submitted: ${text}`);
    }
  };

  return (
    <div>
      <Textinput
        label="Name"
        description="Please enter your full name"
        placeholder="John Doe"
        value={text}
        onChange={(e) => setText(e.target.value)}
        withAsterisk
        error={error}
      />
      <Textarea
        label="Description"
        description="Please enter your description"
        placeholder="Description"
        withAsterisk
      />
      <Passwordinput
        label="Password"
        description="Please enter your password"
        placeholder="Password"
        withAsterisk
      />
      <Pininput
        numberOfInputs={6}
        value={pinInput}
        onChange={(value) => {
          setPinInput(value);
        }}
        label="Pin"
        description="Please enter your pin"
        placeholder="*"
      />
      {pinInput}

      <br />
      <button
        onClick={() => setModalOpen(true)}
        className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
      >
        Open Modal
      </button>
      <br />
      <br />
      <button
        onClick={() => setDrawerOpen(true)}
        className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
      >
        Open Drawer
      </button>
      <br />
      <br />

      {/* Modal Component */}
      <Modal
        open={isModalOpen}
        onClose={() => setModalOpen(false)}
        size="md"
        zIndex={9999}
      >
        <h2 className="text-lg font-bold">Modal Title</h2>
        <p className="text-gray-600">This is the modal content.</p>
        <button
          onClick={() => setModalOpen(false)}
          className="mt-4 px-4 py-2 bg-red-500 text-white rounded hover:bg-red-600"
        >
          Close
        </button>
      </Modal>

      {/* Drawer Component */}
      <Drawer
        open={isDrawerOpen}
        onClose={() => setDrawerOpen(false)}
        size="lg"
        closeOnClickOutside={true}
      >
        <h2 className="text-lg font-bold">Drawer Title</h2>
        <p className="text-gray-600">This is the drawer content.</p>
        <button
          onClick={() => setDrawerOpen(false)}
          className="mt-4 px-4 py-2 bg-red-500 text-white rounded hover:bg-red-600"
        >
          Close
        </button>
        <button
          onClick={() => setModalOpen(true)}
          className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
        >
          Open Modal
        </button>
      </Drawer>

      {/* Card Component */}
      <Card
        withBorder
        padding="p-0"
        shadow="shadow-md"
      >
        <Card.Section withBorder>
          <h2 className="text-lg font-bold">Card Title</h2>
          <p className="text-gray-600">This is the card content.</p>
        </Card.Section>
        <Card.Section withBorder>
          <h2 className="text-lg font-bold">Card Title</h2>
          <p className="text-gray-600">This is the card content.</p>
        </Card.Section>
      </Card>

      {/* Select Component */}
      <Select
        label="Select"
        description="Please select an option"
        data={[
          { value: '1', label: 'Option 1' },
          { value: '2', label: 'Option 2' },
          { value: '3', label: 'Option 3' },
        ]}
        searchable
        withAsterisk
      />

      <button
        className="mt-4 rounded bg-blue-500 px-4 py-2 text-white"
        onClick={handleSubmit}
      >
        Submit
      </button>
    </div>
  );
}

export default Page;

Contributing

Contributions are welcome! If you have a component you'd like to add or an improvement to suggest, feel free to open a pull request or file an issue on the GitHub repository.

License

Tailify is licensed under the MIT License.