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.

28 lines
606 B

4 months ago
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;
};
};
};