import React, { type FunctionComponent, createElement } from "react"; import { cn } from "~/lib/utils"; export type RenderIcon = | FunctionComponent<{ className?: string }> | React.ReactNode; export type IconProps = { icon?: RenderIcon; className?: string; }; /** Use this icon to either render a passed in React component, or a NamedIcon/CompanyIcon */ export function Icon(props: IconProps) { if (!props.icon) return null; if (typeof props.icon === "function") { const Icon = props.icon; return ; } if (React.isValidElement(props.icon)) { return <>{props.icon}; } if ( props.icon && typeof props.icon === "object" && ("type" in props.icon || "$$typeof" in props.icon) ) { return createElement>( props.icon as any, { className: props.className } as any, ); } console.error("Invalid icon", props); return null; } export function IconInBox({ boxClassName, ...props }: IconProps & { boxClassName?: string }) { return (
); }