import classNames from 'classnames' import { memo, useLayoutEffect, useRef } from 'react' import { useAssetUrls } from '../../hooks/useAssetUrls' import { TLUiIconType } from '../../icon-types' /** @public */ export interface TLUiIconProps extends React.HTMLProps { icon: TLUiIconType | Exclude small?: boolean color?: string children?: undefined invertIcon?: boolean crossOrigin?: 'anonymous' | 'use-credentials' } /** @public */ export const Icon = memo(function Icon({ small, invertIcon, icon, color, className, ...props }: TLUiIconProps) { const assetUrls = useAssetUrls() const asset = assetUrls.icons[icon as TLUiIconType] ?? assetUrls.icons['question-mark-circle'] const ref = useRef(null) useLayoutEffect(() => { if (!asset) { console.error(`Icon not found: ${icon}. Add it to the assetUrls.icons object.`) } if (ref?.current) { // HACK: Fix for // It seems that passing `WebkitMask` to react will cause a render on each call, no idea why... but this appears to be the fix. // @ts-ignore // eslint-disable-next-line deprecation/deprecation ref.current.style.webkitMask = `url(${asset}) center 100% / 100% no-repeat` } }, [ref, asset, icon]) return (
) })