import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { createIconComponent } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type CSSProperties } from 'react'; import { object, optional, pipe, readonly, string, union, type InferInput } from 'valibot'; import styles from './FluentIcon.module.css'; const baseFluentIconPropsSchema = pipe( object({ className: optional(string()), mask: optional(string()) }), readonly() ); function BaseFluentIcon(props: InferInput) { const { className } = validateProps(baseFluentIconPropsSchema, props); const classNames = useStyles(styles); const maskStyle = useMemo( () => props.mask ? ({ '--webchat__fluent-icon--mask': `url(${JSON.stringify(props.mask)})` } as CSSProperties) : {}, [props.mask] ); return
; } const { component: FluentIcon, modifierPropsSchema } = createIconComponent( styles, ['appearance', 'icon'], BaseFluentIcon ); FluentIcon.displayName = 'FluentIcon'; const fluentIconPropsSchema = pipe(union([baseFluentIconPropsSchema, modifierPropsSchema]), readonly()); type FluentIconProps = InferInput; export default memo(FluentIcon); export { fluentIconPropsSchema, type FluentIconProps };