UNPKG

@mui/utils

Version:
59 lines (57 loc) 1.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = composeClasses; /* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0 --- These rules are preventing the performance optimizations below. */ /** * Compose classes from multiple sources. * * @example * ```tsx * const slots = { * root: ['root', 'primary'], * label: ['label'], * }; * * const getUtilityClass = (slot) => `MuiButton-${slot}`; * * const classes = { * root: 'my-root-class', * }; * * const output = composeClasses(slots, getUtilityClass, classes); * // { * // root: 'MuiButton-root MuiButton-primary my-root-class', * // label: 'MuiButton-label', * // } * ``` * * @param slots a list of classes for each possible slot * @param getUtilityClass a function to resolve the class based on the slot name * @param classes the input classes from props * @returns the resolved classes for all slots */ function composeClasses(slots, getUtilityClass, classes = undefined) { const output = {}; for (const slotName in slots) { const slot = slots[slotName]; let buffer = ''; let start = true; for (let i = 0; i < slot.length; i += 1) { const value = slot[i]; if (value) { buffer += (start === true ? '' : ' ') + getUtilityClass(value); start = false; if (classes && classes[value]) { buffer += ' ' + classes[value]; } } } output[slotName] = buffer; } return output; }