import { forwardRef, type ButtonHTMLAttributes, type MouseEventHandler, type PropsWithChildren, type HTMLAttributes, type ForwardedRef, } from 'react' import { getAdmonitionProps, getAdmonitionHeadingProps, getAdmonitionTextProps, getAdmonitionIconProps, getAdmonitionCloseButtonProps, getIconProps, getIconButtonProps, splitClassNameProp, } from '@pluralsight/headless-styles' import type { AdmonitionOptions } from '@pluralsight/headless-styles/types' import { CloseIcon, InfoCircleIcon, WarningTriangleIcon, DangerDiamondIcon, CheckCircleIcon, } from '@pluralsight/icons' type MatchIconProps = Exclude function MatchIcon(props: MatchIconProps) { const iconProps = getIconProps(getAdmonitionIconProps()) switch (props.sentiment) { case 'info': return case 'warning': return case 'danger': return case 'success': return default: return } } function AdmonitionCloseButton(props: ButtonHTMLAttributes) { const { button, iconOptions } = getIconButtonProps( getAdmonitionCloseButtonProps(splitClassNameProp(props.className)) ) return ( ) } // interface AdmonitionProps extends HTMLAttributes, AdmonitionOptions { onClose?: MouseEventHandler } function AdmonitionEl( props: PropsWithChildren, ref: ForwardedRef ) { const { sentiment, children, onClose, ...nativeDivProps } = props const admonition = getAdmonitionProps({ classNames: splitClassNameProp(nativeDivProps.className), sentiment, }) return (
{children}
{onClose && }
) } // type AdmonitionHeadingProps = HTMLAttributes function AdmonitionHeadingEl( props: PropsWithChildren, ref: ForwardedRef ) { const { children, ...nativeProps } = props const heading = getAdmonitionHeadingProps( splitClassNameProp(nativeProps.className) ) return (

{children}

) } // type AdmonitionTextProps = HTMLAttributes function AdmonitionTextEl( props: PropsWithChildren, ref: ForwardedRef ) { const { children, ...nativeProps } = props const text = getAdmonitionTextProps(splitClassNameProp(nativeProps.className)) return ( {children} ) } // public exports export const Admonition = forwardRef( AdmonitionEl ) export const AdmonitionHeading = forwardRef< HTMLParagraphElement, AdmonitionHeadingProps >(AdmonitionHeadingEl) export const AdmonitionText = forwardRef< HTMLParagraphElement, AdmonitionTextProps >(AdmonitionTextEl)