29 lines
No EOL
952 B
TypeScript
29 lines
No EOL
952 B
TypeScript
/**
|
|
* 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
|
|
*/
|
|
export default function composeClasses<ClassKey extends string>(slots: Record<ClassKey, ReadonlyArray<string | false | undefined | null>>, getUtilityClass: (slot: string) => string, classes?: Record<string, string> | undefined): Record<ClassKey, string>; |