"use client"; import React, { useEffect, useRef } from 'react'; import { createRoot, Root } from 'react-dom/client'; import { BadgeCent, X } from 'lucide-react'; interface InsufficientDetail { current_balance?: number; required_tokens?: number; message?: string; } interface InsufficientModalProps { detail?: InsufficientDetail; onClose?: () => void; } function InsufficientPointsModal(props: InsufficientModalProps) { const { detail, onClose } = props; const containerRef = useRef(null); useEffect(() => { const originalOverflow = document.body.style.overflow; document.body.style.overflow = 'hidden'; return () => { document.body.style.overflow = originalOverflow; }; }, []); const titleText = 'Insufficient credits reminder'; const descriptionText = detail?.message || 'Your credits are insufficient, please upgrade to continue.'; return (

{titleText}

{descriptionText}

{(typeof detail?.current_balance !== 'undefined') && (typeof detail?.required_tokens !== 'undefined') && (
Current balance
{detail?.current_balance}
Required
{detail?.required_tokens}
)}
); } /** * Opens an H5-styled modal to notify insufficient credits. * @param {InsufficientDetail} detail - optional detail including balances and message. */ export function showInsufficientPointsNotification(detail?: InsufficientDetail): void { if (typeof window === 'undefined' || typeof document === 'undefined') { return; } const mount = document.createElement('div'); mount.setAttribute('data-alt', 'insufficient-modal-root'); document.body.appendChild(mount); let root: Root | null = null; try { root = createRoot(mount); } catch { if (mount.parentNode) { mount.parentNode.removeChild(mount); } return; } const close = () => { try { root?.unmount(); } finally { if (mount.parentNode) { mount.parentNode.removeChild(mount); } } }; root.render( ); }