
Security News
TypeScript is Porting Its Compiler to Go for 10x Faster Builds
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
@henit/bem-class
Advanced tools
Build HTML class names with BEM syntax without repeating yourself
A small, simple tool (without dependencies) for writing class names in BEM-syntax for DOM elements, with a simplified syntax that avoids large amounts of repetition.
npm install --save @henit/bem-class
The examples use React, but bem-class can be used with any library or framework
function Button({ className, icon, variant, size, disabled, label }) {
return (
<button className={`button button--variant-${variant} button--size-${size} ${disabled ? 'button--disabled' : ''} ${className}`}>
<i className={`button__icon button__icon--large iconlib-${type}`} />
<span className="button__label">
{label}
</span>
</button>
)
}
import classLib from 'class-library';
function Button({ className, icon, variant, size, disabled, label }) {
const classNames = classLib(
'button',
`button--variant-${variant}`,
`button--size-${size}`,
{ 'button--disabled': disabled },
className,
};
return (
<button className={classNames}>
<i className={classLib('button__icon', 'button__icon--' + size, 'iconlib-' + type} />
<span className="button__label">
{label}
</span>
</button>
)
}
import bemClass from '@henit/bem-class';
const cn = bemClass('button');
function Button({ className, icon, variant, size, disabled, label }) {
return (
<button className={cn({ variant, size, disabled }, [className])>
<i className={cn('icon', { large }, [`iconlib-${type}`]} />
<span className={cn('label')}>
{label}
</span>
</button>
)
}
The default export from bem-class is a factory function that takes the block name as argument, and returns a classname-creator function for that block:
import bemClass from '@henit/bem-class';
const cn = bemClass('button');
The block function returns a class name string ready for use in the DOM.
Three types of arguments can be sent to the created block function (i.e. cn
):
When called without an element (string argument), the block function return the block (with any given modifiers/mixes).
cn() // 'button'
cn({ color: 'blue', outlined: true, disabled: false }) // 'button button--color-blue button--outlined'
cn(['save-button']) // 'button save-button'
cn({ color: 'blue' }, ['form-control', 'save-button']) // 'button button--color-blue form-control save-button'
cn('label') // 'button__label'
cn('label', { color: 'blue', outlined: true, disabled: false }) // 'button__label button__label--color-blue button__label--outlined'
cn('label', ['form-label']) // 'button__label form-label'
cn('label', { variant: 'large' }, ['form-label']) // 'button__label button__label--variant-large form-label'
And that's it!
FAQs
Build HTML class names with BEM syntax without repeating yourself
The npm package @henit/bem-class receives a total of 191 weekly downloads. As such, @henit/bem-class popularity was classified as not popular.
We found that @henit/bem-class demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
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
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.