3.0.0 • Published 5 years ago
@arterial/chips v3.0.0
Arterial Chips
Installation
npm install @arterial/chipsUsage
Styles
Sass
@use "@material/chips/index.scss" as chips;
@include chips.core-styles;
@include chips.set-core-styles;CSS
import '@material/chips/dist/mdc.chips.css';JSX
import {Chip, ChipSet} from '@arterial/chips';Input Chips
Input chips represent a complex piece of information in compact form, such as an entity (person, place, or thing) or text.
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function Input() {
const [chips, setChips] = useState(CHIPS);
function handleKeyDown(e) {
const text = e.target.value;
const isEnter = e.key === 'Enter' || e.keyCode === 13;
if (!!text && isEnter) {
const id = text;
const newChips = [...chips]; // triggers re-render
if (newChips.some(c => c.text === id)) {
alert('There is already a chip with that name.');
} else {
newChips.push({text, id});
setChips(newChips);
e.target.value = '';
}
}
}
function handleTrailingIconSelect(id) {
const newChips = chips.filter(c => c.text !== id);
setChips(newChips);
}
return (
<div className="input-chips">
<span className="input-chips__label">Input:</span>
<ChipSet className="input-chips__chip-set" input>
<div>
{chips.map(chip => (
<Chip
id={chip.text}
key={chip.text}
text={chip.text}
trailingIcon="cancel"
onTrailingIconSelect={handleTrailingIconSelect}
/>
))}
</div>
<input className="input-chips__input" onKeyDown={handleKeyDown} />
</ChipSet>
</div>
);
}Choice Chips
Choice chips allow selection of a single chip from a set of options.
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function Choice() {
const [selected, setSelected] = useState('');
return (
<ChipSet choice>
{CHIPS.map(chip => (
<Chip
id={chip.text}
key={chip.text}
selected={chip.text === selected}
text={chip.text}
onSelect={() => setSelected(chip.text)}
/>
))}
</ChipSet>
);
}Filter Chips
Filter chips use tags or descriptive words to filter content.
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function Filter() {
const [selected, setSelected] = useState(new Set());
function handleSelect(value) {
const sel = new Set(selected);
if (sel.has(value)) sel.delete(value);
else sel.add(value);
setSelected(sel);
}
return (
<ChipSet filter>
{CHIPS.map(chip => (
<Chip
checkmark
id={chip.text}
key={chip.text}
selected={selected.has(chip.text)}
text={chip.text}
onSelect={() => handleSelect(chip.text)}
/>
))}
</ChipSet>
);
}Action Chips
Action chips offer actions related to primary content. They should appear dynamically and contextually in a UI.
import {CircularProgress} from '@arterial/circular-progress';
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function Action() {
const [selected, setSelected] = useState(false);
const [saving, setSaving] = useState(false);
function icon() {
if (saving) return <CircularProgress small />;
if (selected) return 'favorite';
return 'favorite_outlined';
}
function text() {
if (selected && saving) return 'Removing from favorites';
else if (saving) return 'Saving to favorites';
else if (selected) return 'Saved to favorites';
else return 'Save to favorites';
}
function handleSelect() {
setSaving(true);
setTimeout(() => {
setSaving(false);
setSelected(!selected);
}, 3000);
}
return (
<Chip
icon={icon()}
id="action"
key="action"
text={text()}
onSelect={handleSelect}
/>
);
}Other Variants
Icon
Choice chips with icons.
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function Icon() {
const [selected, setSelected] = useState('');
return (
<ChipSet choice>
{CHIPS.map(chip => (
<Chip
icon="face"
id={chip.text}
key={chip.text}
selected={chip.text === selected}
text={chip.text}
onSelect={() => setSelected(chip.text)}
/>
))}
</ChipSet>
);
}Choice and Filter
Choice and filter chips with icons.
const CHIPS = ['Alfa', 'Bravo', 'Charlie', 'Delta'];
function ChoiceFilter() {
const [selected, setSelected] = useState(new Set());
function handleSelect(value) {
const sel = new Set(selected);
if (sel.has(value)) {
sel.delete(value);
} else {
sel.add(value);
}
setSelected(sel);
}
return (
<ChipSet choice filter>
{CHIPS.map(chip => (
<Chip
checkmark
icon="face"
id={chip.text}
key={chip.text}
selected={selected.has(chip.text)}
text={chip.text}
onSelect={() => handleSelect(chip.text)}
/>
))}
</ChipSet>
);
}Props
Chip
| Name | Type | Description |
|---|---|---|
| checkmark | boolean | Enables checkmark to be displayed within root element when element is selected. |
| className | string | Classes to be applied to the root element. |
| icon | string | node | Icon to render within root element. |
| id | string | Id of the element. |
| onSelect | function | Select event handler. |
| onTrailingIconSelect | function | Trailing icon select event handler. |
| ripple | boolean | Enables ripple within root element. Defaults to true. |
| selected | boolean | Indicates whether the element is selected. |
| text | string | Text to be displayed within root element. |
| trailingIcon | string | node | Icon to render on the right side of the root element. |
| tag | string | object | HTML tag to be applied to the root element. Defaults to div. |
ChipSet
| Name | Type | Description |
|---|---|---|
| children | node | Elements to be displayed within root element. |
| className | string | Classes to be applied to the root element. |
| choice | boolean | Enables a choice variant. |
| filter | boolean | Enables a filter variant. |
| input | boolean | Enables an input variant. |
| tag | string | object | HTML tag to be applied to the root element. Defaults to div. |
3.0.0
5 years ago
2.0.3
5 years ago
2.0.2
5 years ago
2.0.1
5 years ago
2.0.0
6 years ago
1.2.0
6 years ago
1.1.0
6 years ago
1.0.6
6 years ago
1.0.5
6 years ago
1.0.4
6 years ago
1.0.3
6 years ago
1.0.2
6 years ago
1.0.1
6 years ago
1.0.0
6 years ago
1.0.0-alpha.6
6 years ago
1.0.0-alpha.5
6 years ago
1.0.0-alpha.4
6 years ago
1.0.0-alpha.3
6 years ago
1.0.0-alpha.1
6 years ago
1.0.0-alpha.0
6 years ago