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 (
)
}
//
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)