import { HTMLAttributes } from "react"
import { MaterialIconName, materialIcons } from "./generated"
import { VariantProps } from "class-variance-authority"
import { iconVariants } from "../variants"
import styles from "./index.module.css"
export interface MaterialIconProps
extends
Omit, "color" | "id">,
VariantProps {
icon: MaterialIconName
size?: number
styleName?: "outlined" | "rounded" | "sharp"
isFilled?: boolean
}
export type MaterialIconSetIconProps = Omit
export function MaterialIcon({
icon,
size = 24,
styleName = "outlined",
color = "CurrentColor",
isFilled,
...props
}: MaterialIconProps) {
const iconStyles = materialIcons[icon]
if (!iconStyles) {
console.warn(`Icon "${icon}" not found in registry`)
return null
}
const styleVariants = iconStyles[styleName]
if (!styleVariants) {
console.warn(`Icon "${icon}" does not have style "${styleName}"`)
return null
}
const IconComponent = isFilled ? styleVariants.filled : styleVariants.outlined
if (!IconComponent) {
console.warn(
`Icon "${icon}" does not have ${
isFilled ? "filled" : "outlined"
} variant for style "${styleName}"`
)
return null
}
const iconClassName = iconVariants({ color })
return (
)
}