Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@react-md/button

Package Overview
Dependencies
Maintainers
1
Versions
63
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-md/button

This package is used to create buttons with the material design spec. There is built-in support to be able to render accessible clickable divs that look like buttons, or even apply button styles to any element.

  • 2.0.0-alpha.8
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1.2K
decreased by-7.43%
Maintainers
1
Weekly downloads
 
Created
Source

@react-md/button

Create native buttons with multiple themes based on the material design specifications including:

  • clear, primary, secondary, warning, error, and default theme states
  • text, icon, or text + icon with spacing
  • flat, outlined, or contained

Also includes a buttonThemeClassNames function that can be used to apply a button theme to any component by generating the required className prop.

Installation

$ npm install --save @react-md/button

If you would also like dynamic themes and icon support, it is recommended to also install:

$ npm install --save @react-md/theme \
    @react-md/typography \
    @react-md/icon

Documentation

You should check out the full documentation for live examples and more customization information, but an example usage is shown below.

Usage

Starting with v2 of react-md, all interactable elements require a unique id to help ensure best practices, accessibility, and a way to track keyboard focus. This might seem a bit annoying at first, but it will really help out in the long run as it'll be very easy to find elements within the page and other debugging purposes.

Buttons with Text

import React, { Fragment } from "react";
import { render } from "react-dom";
import { Button } from "@react-md/button";

const App = () => (
  <Fragment>
    <Button id="button-1">Text Button</Button>
    <Button id="button-2" theme="primary" themeType="flat">
      Text Button
    </Button>
    <Button id="button-3" theme="secondary" themeType="raised">
      Text Button
    </Button>
    <Button id="button-4" theme="warning" themeType="contained">
      Text Button
    </Button>
    <Button id="button-5" theme="error">
      Text Button
    </Button>
    <Button id="button-6" theme="clear">
      Text Button
    </Button>
    <Button id="button-7" disabled>
      Text Button
    </Button>
  </Fragment>
);

render(<App />, document.getElementById("root"));

Buttons with Text and Icons

Buttons can be rendered specifically as icon only buttons or as additional support to the provided text. When rendering icons, you must also install and use the @react-md/icon package to get icon support. You can also install the @react-md/material-icons package if you'd like pre-built components for every material icon that exists.

import React, { Fragment } from "react";
import { render } from "react-dom";
import { Button } from "@react-md/button";
import { TextIconSpacing, FontIcon } from "@react-md/icon";
import { DeleteSVGIcon } from "@react-md/material-icons";

const App = () => (
  <Fragment>
    <Button id="button-1">
      <TextIconSpacing icon={<FontIcon>info_outline</FontIcon>}>
        About
      </TextIconSpacing>
    </Button>
    <Button id="button-2" theme="primary" themeType="raised">
      <TextIconSpacing icon={<FontIcon>info_outline</FontIcon>} iconAfter>
        About
      </TextIconSpacing>
    </Button>
    <Button id="button-3" theme="error" themeType="contained">
      <TextIconSpacing icon={<DeleteSVGIcon />}>
        Permanently Delete
      </TextIconSpacing>
    </Button>
  </Fragment>
);

render(<App />, document.getElementById("root"));

If you have used react-md in the past, notice that there are no longer any icon related props to handle this for you. It became difficult and confusing to use when there were a lot of different icon positioning props, so the props were removed and it is now expected to use the helper components in the @react-md/icon package instead. If you find a reusable pattern within your app, it is recommended to make your own Button wrapper component to implement this for you.

Buttons with Icons Only

It is also possible to create buttons that only contain icons as children. For general accessibility, you should provide either an aria-label to provide a label for the action of the button or use aria-labelledby to point to an id of an element that provides a label for the button. This is really to help screen readers and generally recommended, but there are no restrictions in place at this time to enforce this behavior.

import React, { Fragment } from "react";
import { render } from "react-dom";
import { Button } from "@react-md/button";
import { TextIconSpacing, FontIcon } from "@react-md/icon";
import { DeleteSVGIcon } from "@react-md/material-icons";

const App = () => (
  <Fragment>
    <Button id="button-1" aria-label="More Info" buttonType="icon">
      <FontIcon>info_outline</FontIcon>
    </Button>
    <Button
      id="button-2"
      theme="primary"
      themeType="raised"
      buttonType="icon"
      aria-label="More Info"
    >
      <FontIcon>info_outline</FontIcon>
    </Button>
    <Button
      id="button-3"
      theme="error"
      themeType="contained"
      buttonType="icon"
      aria-label="Permanently Delete"
    >
      <DeleteSVGIcon />
    </Button>
  </Fragment>
);

Keywords

FAQs

Package last updated on 29 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc