You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
606 B
27 lines
606 B
export const classNames = <T extends { [key: string]: any }>(cls: T, prefix: string) => {
|
|
const PREFIX = (str: string) => `${prefix}-${str}`;
|
|
const obj = Object.fromEntries(
|
|
Object.entries(cls).map(([k, v]) => {
|
|
const name = PREFIX(v);
|
|
return [
|
|
k,
|
|
{
|
|
name,
|
|
class: `.${name}`,
|
|
id: `#${name}`,
|
|
toString() {
|
|
return name;
|
|
},
|
|
},
|
|
];
|
|
})
|
|
);
|
|
Object.assign(obj, { prefix: PREFIX });
|
|
return obj as {
|
|
[K in keyof T]: {
|
|
name: string;
|
|
class: string;
|
|
id: string;
|
|
};
|
|
};
|
|
};
|
|
|