bem.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.useBEM = void 0;
  4. /**
  5. * bem helper
  6. * b() // 'button'
  7. * b('text') // 'button__text'
  8. * b({ disabled }) // 'button button--disabled'
  9. * b('text', { disabled }) // 'button__text button__text--disabled'
  10. * b(['disabled', 'primary']) // 'button button--disabled button--primary'
  11. */
  12. var ELEMENT = '__';
  13. var MODS = '--';
  14. function join(name, el, symbol) {
  15. return el ? name + symbol + el : name;
  16. }
  17. function prefix(name, mods) {
  18. if (typeof mods === 'string') {
  19. return join(name, mods, MODS);
  20. }
  21. if (Array.isArray(mods)) {
  22. return mods.map(function (item) {
  23. return prefix(name, item);
  24. });
  25. }
  26. var ret = {};
  27. if (mods) {
  28. Object.keys(mods).forEach(function (key) {
  29. ret[name + MODS + key] = mods[key];
  30. });
  31. }
  32. return ret;
  33. }
  34. var useBEM = function useBEM(name) {
  35. return function (el, mods) {
  36. if (el && typeof el !== 'string') {
  37. mods = el;
  38. el = '';
  39. }
  40. el = join(name, el, ELEMENT);
  41. return mods ? [el, prefix(el, mods)] : el;
  42. };
  43. };
  44. exports.useBEM = useBEM;