import { JSXElement, Show } from "solid-js" import { useClassList } from "../utils/useProps" import { Icon } from "../Icon" import { useSlots } from "../utils/useSlots" import createModel from "../utils/createModel" export interface BannerProps { type: 'warning'|'info'|'success'|'error' classList?: any class?: string bordered?: boolean icon?: JSXElement closeIcon?: JSXElement | null children?: any onClose?(): void title?: JSXElement | string fullMode?: boolean visible?: any } export function Banner (props: BannerProps) { const [visible, setVisible] = createModel(props, 'visible', true); const classList = () => useClassList(props, 'cm-banner', { [`cm-banner-${props.type}`]: props.type, [`cm-banner-bordered`]: props.bordered, [`cm-banner-full`]: props.fullMode ?? true, [`cm-banner-not-full`]: props.fullMode === false, }) const getIconByType = () => { let icon = ''; switch (props.type) { case 'info': { icon = 'info'; break; } case 'success': { icon = 'check-circle'; break; } case 'warning': { icon = 'alert-circle'; break; } case 'error': { icon = 'x-circle'; break; } default: { icon = 'info'; } } return ; } const onClickClose = () => { setVisible(false); props.onClose && props.onClose(); } const slots = useSlots(props.children); const icon = props.icon === null ? null : props.icon ?? getIconByType(); return
{icon}
{props.title}
{slots.default}
{props.closeIcon ?? }
{slots.extra}
}