64 lines
1.8 KiB
TypeScript
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,
|
|
}
|
|
}
|