
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
@planningcenter/button
Advanced tools
@planningcenter/buttonAn experimental Button, used in Planning Center Publishing
https://codesandbox.io/s/1358wv7x33
yarn add @planningcenter/button
import React from "React";
import { ComposedButton as Button } from "@planningcenter/button";
import "@planningcenter/button/button.css";
function App() {
return <Button>A button</Button>;
}
Semantic components wrappers around ComposedComponent.
Implements all APIs of ComposedComponent.
import React from "React";
import {
PutButton,
DeleteButton,
CancelButton
} from "@planningcenter/button";
import "@planningcenter/button/button.css";
function App() {
return (
<React.Fragment>
<PutButton>Create/Update Action</PutButton>
<DestroyButton>Destroy Action</DestroyButton>
<CancelButton>Cancel Action</CancelButton>
</React.Fragment>
);
}
"Button RestfulButton RestfulButton--action_destroy"
"Button RestfulButton RestfulButton--action_put"
"Button RestfulButton RestfulButton--action_cancel"
import React from "React";
import { ComposedButton as Button } from "@planningcenter/button";
import "@planningcenter/button/button.css";
function App() {
return (
<React.Fragment>
<Button action="put">Create/Update Action</Button>
<Button action="destroy">Destroy Action</Button>
<Button action="cancel">Cancel Action</Button>
</React.Fragment>
);
}
"Button RestfulButton RestfulButton--action_destroy"
"Button RestfulButton RestfulButton--action_put"
"Button RestfulButton RestfulButton--action_cancel"
import React from "react";
import { ComposedButton as Button } from "@planningcenter/button";
import "@planningcenter/button/button.css";
function App() {
return (
<React.Fragment>
<Button>height: 4 (default)</Button>
<Button height={2.5}>height: 2.5</Button>
<Button height={3}>height: 3</Button>
<Button height={4}>height: 4</Button>
<Button height={5}>height: 5</Button>
<Button height={6}>height: 6</Button>
</React.Fragment>
);
}
"Button ScaledButton ScaledButton--height_2.5"
"Button ScaledButton ScaledButton--height_3"
"Button ScaledButton ScaledButton--height_4"
"Button ScaledButton ScaledButton--height_5"
"Button ScaledButton ScaledButton--height_6"
ComposedButton provides opinions about styel only.
You can change the underlying element by passing it via the as prop.
This includes components of your own design.
This can be helpful in use with Box components that exist as the base element in many apps.
import React from "react";
import { ComposedButton as Button } from "@planningcenter/button";
import "@planningcenter/button/button.css";
function App() {
return (
<React.Fragment>
<Button>Button</Button>
<Button type="submit">Button [type=submit]</Button>
<Button as="a" href="#">
Anchor
</Button>
<Button as="input" value="Input" />
<Button
as="input"
type="submit"
value="Input [type=submit]"
/>
<Button>Button</Button>
<Button type="submit">Button [type=submit]</Button>
<Button as="a" href="#">
Anchor
</Button>
<Button as="input" value="Input" />
<Button
as="input"
type="submit"
value="Input [type=submit]"
/>
</React.Fragment>
);
}
"Button"
There's no magic sauce.
The resolution af props to selectors is done in exported functions.
So, if you want to own your own button implementation want the height and action APIs,
You can resolve the classes with these functions.
getScaledButtonClassesYou can pass it all your props.
Or just the ones we care about.
import { getRestfulButtonClasses } from "@planningcenter/buttons";
let classes = getScaledButtonClasses({ action: "destroy" });
// => "RestfulButton RestfulButton--action_destroy"
let classes = getScaledButtonClasses(null);
// => ""
getRestfulButtonClassesYou can pass it all your props.
Or just the ones we care about.
import { getRestfulButtonClasses } from "@planningcenter/buttons";
let classes = getRestfulButtonClasses({ height: 3 });
// => "RestfulButton RestfulButton--height_3"
let classes = getRestfulButtonClasses(null);
// => ""
FAQs
Did you know?

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.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.