-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
Copy pathgenerateUtilityClass.ts
53 lines (48 loc) · 1.21 KB
/
generateUtilityClass.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
const defaultGenerator = (componentName: string) => componentName;
const createClassNameGenerator = () => {
let generate = defaultGenerator;
return {
configure(generator: typeof generate) {
generate = generator;
},
generate(componentName: string) {
return generate(componentName);
},
reset() {
generate = defaultGenerator;
},
};
};
const ClassNameGenerator = createClassNameGenerator();
export type GlobalStateSlot =
| "active"
| "checked"
| "completed"
| "disabled"
| "error"
| "expanded"
| "focused"
| "focusVisible"
| "required"
| "selected";
const globalStateClassesMapping: Record<GlobalStateSlot, string> = {
active: "Mui-active",
checked: "Mui-checked",
completed: "Mui-completed",
disabled: "Mui-disabled",
error: "Mui-error",
expanded: "Mui-expanded",
focused: "Mui-focused",
focusVisible: "Mui-focusVisible",
required: "Mui-required",
selected: "Mui-selected",
};
export default function generateUtilityClass(
componentName: string,
slot: string
): string {
const globalStateClass = globalStateClassesMapping[slot as GlobalStateSlot];
return (
globalStateClass || `${ClassNameGenerator.generate(componentName)}-${slot}`
);
}