mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-22 03:07:04 +02:00
36 lines
892 B
TypeScript
36 lines
892 B
TypeScript
import type { FC } from "react";
|
|
import { classNames } from "./classNames";
|
|
|
|
function composeRadixComponent<Props>(
|
|
Component: FC<Props>,
|
|
style: CSSModuleClasses[string],
|
|
) {
|
|
return function (props: Props & { className?: string }) {
|
|
return (
|
|
<Component {...props} className={classNames(style, props.className)} />
|
|
);
|
|
};
|
|
}
|
|
|
|
export function composeRadixComponents<
|
|
Components extends Record<string, unknown>,
|
|
>(components: Components, styles: CSSModuleClasses) {
|
|
const mapped: Partial<Components> = {};
|
|
|
|
for (const key in components) {
|
|
const isMethod = key[0].toLowerCase() === key[0];
|
|
|
|
if (isMethod) {
|
|
mapped[key] = components[key];
|
|
continue;
|
|
}
|
|
|
|
mapped[key] = composeRadixComponent(
|
|
components[key] as FC,
|
|
`radix__${styles[key]}`,
|
|
) as Components[Extract<keyof Components, string>];
|
|
}
|
|
|
|
return mapped as Components;
|
|
}
|