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

@tailus/themer-toast

v0.0.1

Published

Toast themes

Downloads

8

Readme

Toast Component Theme

Overview

The toast component theme is a collection of Tailwindcss utilities that can be used to create toasts with a single variant. Toasts are small, unobtrusive notifications that appear on the screen to inform users of an event or to provide feedback.

Installation

To install the toast component theme, run the following command:

npm install @tailus/themer-toast

Importation

To import the toast component theme, you can use the following import:

import { toast } from "@tailus/themer-toast";

Properties

The toast object contains the following properties:

  • viewport: The Tailwindcss utilities for the viewport of the toast component.
  • root: The Tailwindcss utilities for the root element of the toast component.
  • header: The Tailwindcss utilities for the header of the toast component.
  • title: The Tailwindcss utilities for the title of the toast component.
  • description: The Tailwindcss utilities for the description of the toast component.
  • actions: The Tailwindcss utilities for the actions of the toast component.

Customization

The following properties can be customized:

  • border radius
  • border color on light and dark mode

Customization that will be applied to other components (feedback components):

  • border color on light and dark mode

You can also use the extend section of your Tailwind CSS config file to customize the toast component theme. For example, to add a new border radius to the toast component theme, you would add the following code to your tailwind.config.js file:

module.exports = {
    extend: {
        tailus: {
            components: {
                toast: {
                    borderRdius: "xl",
                },
            },
        },
    },
};

Usage

To use the toast component theme, simply add the appropriate Tailwindcss utilities using the toast object properties to the toast element and its child elements. For example, to create a toast component, you would add the toast object properties to the toast element.

Example : Radix UI

import * as React from "react";
import * as Toast from "@radix-ui/react-toast";
import { toast as theme } from "@tailus/themer-toast";
import { ghostButton, ghostIconButton, button } from "@tailus/themer-button";
import { Cross2Icon } from "@radix-ui/react-icons";

const ToastUI = () => {
    const [open, setOpen] = React.useState(false);
    const eventDateRef = React.useRef(new Date());
    const timerRef = React.useRef(0);

    React.useEffect(() => {
        return () => clearTimeout(timerRef.current);
    }, []);

    return (
        <Toast.Provider swipeDirection="center">
            <button
                className={button.primary.lg}
                onClick={() => {
                    setOpen(false);
                    window.clearTimeout(timerRef.current);
                    timerRef.current = window.setTimeout(() => {
                        eventDateRef.current = oneWeekAway();
                        setOpen(true);
                    }, 100);
                }}
            >
                <span>Add to calendar</span>
            </button>

            <Toast.Root className={theme.root} open={open} onOpenChange={setOpen}>
                <div className={theme.header}>
                    <Toast.Title className={theme.title}>Scheduled: Catch up</Toast.Title>
                    <div className={theme.actions}>
                        <Toast.Action asChild altText="Goto schedule to undo">
                            <button className={ghostButton.primary.sm}>
                                <span>Undo</span>
                            </button>
                        </Toast.Action>
                        <Toast.Close>
                            <button className={ghostIconButton.gray.sm}>
                                <span className="sr-only">Dismiss toast</span>
                                <Cross2Icon className={ghostIconButton.icon.md} aria-hidden />
                            </button>
                        </Toast.Close>
                    </div>
                </div>
                <Toast.Description asChild>
                    <time
                        className={theme.description}
                        dateTime={eventDateRef.current.toISOString()}
                    >
                        {prettyDate(eventDateRef.current)}
                    </time>
                </Toast.Description>
            </Toast.Root>
            <Toast.Viewport className={theme.viewport} />
        </Toast.Provider>
    );
};

function oneWeekAway(date) {
    const now = new Date();
    const inOneWeek = now.setDate(now.getDate() + 7);
    return new Date(inOneWeek);
}

function prettyDate(date) {
    return new Intl.DateTimeFormat("en-US", { dateStyle: "full", timeStyle: "short" }).format(date);
}

export default ToastUI;