react-awesome-button
v7.0.5
Published
Performant, extendable, highly customisable, production ready React Component that renders an animated basic set of UI buttons
Downloads
3,250
Maintainers
Readme
React <AwesomeButton /> UI Component
react-awesome-button
is a performant, extendable, highly customisable, production ready React Component that renders an animated set of 3D UI buttons. Bundled together with a social share and progress enabled components.
Key Features
- 60fps 3D animated button
- Animated progress button
- Social icons and network specific share methods
- OnPress ripple effect
- Look and feel customisable and extendable in two ways: via CSS custom properties or SASS variables and lists (scss config file).
- Use it with CSSModules or **Plain CSS
Live demo
Checkout the live demo with the CSS customizer
at awesome-button.caferati.me.
Figma File
Import it directly into your Figma project.
You can run the storybook locally on 6006
by cloning this repository and running npm run storybook
Installation
npm install --save react-awesome-button
Styling with plain CSS and CSS Modules
Plain CSS
import { AwesomeButton } from 'react-awesome-button';
import 'react-awesome-button/dist/styles.css';
function Button() {
return <AwesomeButton type="primary">Button</AwesomeButton>;
}
CSS Modules
import { AwesomeButton } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss';
function Button() {
return (
<AwesomeButton cssModule={AwesomeButtonStyles} type="primary">
Button
</AwesomeButton>
);
}
AwesomeButton
rendered with a button tag
Renders the component with a button
HTML tag and an onPress
prop called on animation release.
import { AwesomeButton } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss';
function Button() {
return (
<AwesomeButton
cssModule={AwesomeButtonStyles}
type="primary"
onPress={() => {
// do something
}}>
Button
</AwesomeButton>
);
}
AwesomeButton
rendered with an anchor tag
Render the component with an anchor
HTML tag setting the href
attribute.
import { AwesomeButton } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss';
function Button() {
return (
<AwesomeButton
cssModule={AwesomeButtonStyles}
type="primary"
href="https://google.com">
Button
</AwesomeButton>
);
}
AwesomeButton
props
| Attribute | Type | Default | Description |
| :------------- | :----------: | :-------: | :------------------------------------------------------------------------------------------------------- |
| type | string
| primary
| Render a specific button type, styled by the .scss
type list |
| size | string
| auto
| Render a specific button size, styled by the .scss
size list |
| element | node
| null
| Overwrites the default container element renderer, useful for using it with react-router Link component. |
| disabled | bool
| false
| Render the disabled button |
| visible | bool
| true
| Toggle button visibility |
| ripple | bool
| false
| Sets up the button with the onPress ripple effect |
| placeholder | bool
| true
| Should render the animated placeholder on empty children
|
| onPress | function
| null
| Default pressRelease
event function |
| onPressed | function
| null
| Event function triggered only on full button press |
| onReleased | function
| null
| Event function triggered on button full animation release |
| onMouseDown | function
| null
| Event function coupled with the element's onMouseDown
|
| onMouseUp | function
| null
| Event function coupled with the element's onMouseUp
|
| href | string
| null
| Forces the button to be rendered on an anchor
container and sets the href to the specified value |
| className | string
| null
| Adds a className
to the button container element |
| style | object
| null
| Passes a style
object to the container element |
| containerProps | object
| null
| Exposes an option for freely adding props to the button container element |
| cssModule | object
| null
| Accepts a css module configuration from the themed module.scss
files |
| target | string
| null
| When used together with href
renders an anchor with a specific target attribute |
| before | React.Node
| null
| Render a node
before the main content span
container; useful for setting icons |
| after | React.Node
| null
| Render a node
after the main content span
container; useful for setting icons |
| between | string
| null
| Sets the content elements relation to space-between
; useful for setting icons |
| active | bool
| false
| When set to true
activates the pressIn animation |
AwesomeButtonProgress
basic example
Checkout this example live on the storyboard.
import { AwesomeButtonProgress } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss';
function Button() {
return (
<AwesomeButtonProgress
cssModule={AwesomeButtonStyles}
type="primary"
onPress={(event, release) => {
// do a sync/async task then call `release()`
}}>
Button
</AwesomeButtonProgress>
);
}
AwesomeButtonProgress
specific props
Being a wrapper on the AwesomeButton
component, it accepts its props plus the following ones.
| Attribute | Type | Default | Description |
| :----------- | :--------: | :--------: | :------------------------------------------------------------------------------- |
| onPress | function
| null
| Default onPress
function returning the event
and a button release
strategy |
| loadingLabel | string
| Wait ..
| Progress button loading label text |
| resultLabel | string
| Success!
| Progress button success label text |
| releaseDelay | number
| 500 | Delay for releasing the button after the progress animation |
AwesomeButtonSocial
basic example
If nothing is passed on the sharer
prop, the component automatically gets the page's own title
and og:image
properties; otherwise, it's setup by the sharer
.
import { AwesomeButtonSocial } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss'
function Button() {
return (
<AwesomeButtonSocial
cssModule={AwesomeButtonStyles}
type="facebook"
sharer={{
url="https://caferati.me"
}}
>
Button
</AwesomeButton>
);
}
AwesomeButtonSocial
whatsapp example
import { AwesomeButtonSocial } from 'react-awesome-button';
import AwesomeButtonStyles from 'react-awesome-button/src/styles/styles.scss'
function Button() {
return (
<AwesomeButtonSocial
cssModule={AwesomeButtonStyles}
type="whatsapp"
sharer={{
phone: '############',
message: 'Whatsapp init message'
}}
>
Button
</AwesomeButton>
);
}
AwesomeButtonSocial
specific props
Being a wrapper on the AwesomeButton
component, it accepts its props plus the following ones.
| Attribute | Type | Default | Description |
| :------------- | :--------------------: | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------ |
| type | string
| null
| Render a button type (Facebook, Instagram, Twitter, Github, Youtube, Linkedin, Pinterest, Reddit, Messenger, Whatsapp) |
| icon | bool
or Dimensions
| true
| Setting to false
avoids icon rendering; if the dimensions type is passed in {width: number, height: number}
, configures the button size |
| sharer.url | string
| null
| Url string to be used on the sharer |
| sharer.image | string
| null
| Image url to be rendered on the sharer |
| sharer.message | string
| null
| Message string to be rendered on the shared post |
| sharer.phone | string
| null
| Phone number to be used when using the Whatsapp
sharer type |
| sharer.user | string
| null
| Username to be redirected when using the Messenger
sharer type |
React Native Version
Checkout the React Native version of the Awesome Button UI Component at rcaferati/react-native-really-awesome-button
Author
Rafael Caferati
- Checkout my Full-Stack Web Developer Website
- Other open source projects @ Code Laboratory
- A scope of my work @ Web Developer Portfolio
License
MIT. Copyright (c) 2019 Rafael Caferati.