import styles from "./ui-lib.module.scss"; import LoadingIcon from "../icons/three-dots.svg"; import CloseIcon from "../icons/close.svg"; import { createRoot } from "react-dom/client"; export function Popover(props: { children: JSX.Element; content: JSX.Element; open?: boolean; onClose?: () => void; }) { return (
{props.children} {props.open && (
{props.content}
)}
); } export function Card(props: { children: JSX.Element[]; className?: string }) { return (
{props.children}
); } export function ListItem(props: { children: JSX.Element[] }) { if (props.children.length > 2) { throw Error("Only Support Two Children"); } return
{props.children}
; } export function List(props: { children: JSX.Element[] | JSX.Element }) { return
{props.children}
; } export function Loading() { return (
); } interface ModalProps { title: string; children?: JSX.Element; actions?: JSX.Element[]; onClose?: () => void; } export function Modal(props: ModalProps) { return (
{props.title}
{props.children}
{props.actions?.map((action, i) => (
{action}
))}
); } export function showModal(props: ModalProps) { const div = document.createElement("div"); div.className = "modal-mask"; document.body.appendChild(div); const root = createRoot(div); const closeModal = () => { props.onClose?.(); root.unmount(); div.remove(); }; div.onclick = (e) => { if (e.target === div) { closeModal(); } }; root.render(); } export type ToastProps = { content: string }; export function Toast(props: ToastProps) { return (
{props.content}
); } export function showToast(content: string, delay = 3000) { const div = document.createElement("div"); div.className = styles.show; document.body.appendChild(div); const root = createRoot(div); const close = () => { div.classList.add(styles.hide); setTimeout(() => { root.unmount(); div.remove(); }, 300); }; setTimeout(() => { close(); }, delay); root.render(); }