@lekseek/ui
Version:
Vue 3 components library
25 lines (23 loc) • 821 B
text/typescript
import {
BemItem,
} from '../models';
import { getClassName } from '../core/helpers';
export function useBem (name: string, hyphenate = true) {
function bem ({ b, e, m }: BemItem): string[] {
const pascalToKebabCase = (s: string) => s
.replace(/([A-Z])([A-Z])/g, '$1-$2')
.replace(/([a-z])([A-Z])/g, '$1-$2')
.replace(/[\s_]+/g, '-')
.toLowerCase();
const n = name;
const block: string = b || hyphenate ? pascalToKebabCase(n) : n;
const modifiers: string[] = m ? (typeof m === 'string' ? [m] : (Array.isArray(m) ? m : Object.keys(m).filter(key => m[key]))) : [];
const elementClass = getClassName(block, e);
const modifiersClasses = modifiers.map(m => getClassName(block, e, m));
return [
elementClass,
...modifiersClasses,
];
}
return bem;
};