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

@crystallize/react-dialog

v5.1.2

Published

Accessible dialogs in React used in Crystallize Headless PIM

Downloads

229

Readme

alt text

@crystallize/react-dialog

React component to display accessible dialogs. This is a general purpose component to build awesome and accessible dialogs in react. Built initially for use in the Crystallize headless commerce service.

Uses styled-components and a11y-dialog. Leverages the native dialog HTML element when possible

This module uses Promises and does not provide a polyfill. To easily provide Promise polyfills for your users, try polyfills.io

Demo

Demo

alt text

Usage

yarn add @crystallize/react-dialog styled-components

In your app root

import { Wrapper } from '@crystallize/react-dialog';

export default () => (
  <main>
    <YourApp />
  </main>
  <Wrapper />
);

Use it

import { showDialog, showAlert, showConfirm, closeCurrent } from '@crystallize/react-dialog';

await showDialog('Hey dude');
await showDialog({
  body: <strong>Hey dude</strong>
});

await showAlert('Wow');
const confirmResult = await showConfirm('Are you sure?');

const confirmResult = await showConfirm({
  body: <div>JSX rules</div>,
  buttons: {
    ok: p => <button {...p}>Allrighty</button>,
    cancel: p => <button {...p}>Nope</button>
  }
});

// Closes any open dialog
closeCurrent();

Wrapper props

| Prop Name | Default | Type | Description | | ------------ | ------- | ---- | ------------------------------------------ | | cleanTheme | false | bool | Use the clean theme instead of the default | | ButtonOk | false | jsx | Set a custom default Ok button | | ButtonCancel | false | jsx | Set a custom default Cancel button | | ButtonClose | false | jsx | Set a custom default Close button | | Heading | false | jsx | Set a custom default Heading |

Dialog functions

All of the show dialog functions (showDialog, showAlert, showConfirm) returns a promise when called. The promise is resolved when the dialog is closed. The return value of the promise changes depending on which type of dialog it is

The functions accepts a single string argument. They also support a single object as argument with these common properties:

{
  title<string|jsx>: <h1>Hi there</h1>
  body<string|jsx>: 'you',
  showCloseButton<bool>: false (default is true),
  disableBackdropClick<bool>: false
}

showConfirm does however accept a few more:

...
buttons: {
  ok: props => <button {...props}>{props.children}</button>,
  cancel: "Nope nope!"
}

showConfirm resolves its promise with either "ok" or "cancel"