Никита Круглицкий b3c99a667a Initial commit
2024-11-26 16:15:12 +03:00

64 lines
1.8 KiB
TypeScript

const namespace = 'ui'
const statePrefix = 'is-'
function _bem(namespace: string, block: string, blockSuffix: string, element: string, modifier: string) {
let cls = `${block}`
if (blockSuffix)
cls += `-${blockSuffix}`
if (element)
cls += `__${element}`
if (modifier)
cls += `--${modifier}`
return cls
}
export default (block: string) => {
const b = (blockSuffix: string = '') => _bem(namespace, block, blockSuffix, '', '')
const e = (element: string) =>
element ? _bem(namespace, block, '', element, '') : ''
const m = (modifier: string) =>
modifier ? _bem(namespace, block, '', '', modifier) : ''
const be = (blockSuffix: string, element: string) =>
blockSuffix && element
? _bem(namespace, block, blockSuffix, element, '')
: ''
const em = (element: string, modifier: string) =>
element && modifier ? _bem(namespace, block, '', element, modifier) : ''
const bm = (blockSuffix: string, modifier: string) =>
blockSuffix && modifier
? _bem(namespace, block, blockSuffix, '', modifier)
: ''
const bem = (blockSuffix: string, element: string, modifier: string) =>
blockSuffix && element && modifier
? _bem(namespace, block, blockSuffix, element, modifier)
: ''
const is = (name: string, ...args: any[]) => {
const state = args.length >= 1 ? args[0] : true
return name && state ? `${statePrefix}${name}` : ''
}
const has = (name: string, ...args: any[]) => {
const state = args.length >= 1 ? args[0] : true
return name && state ? `has-${name}` : ''
}
const exp = (condition: boolean, trueState: string, falseState: string = '') => {
return condition ? trueState : falseState
}
return {
namespace,
b,
e,
m,
be,
em,
bm,
bem,
is,
has,
exp,
}
}