import React from 'react'; import { createRoot } from 'react-dom/client'; import BookReader from './components/BookReader'; // Auto-initialize function function initializeBookReaders() { const containers = document.querySelectorAll('#book-reader'); containers.forEach((container: Element) => { // Prevent double initialization if ((container as HTMLElement).dataset.initialized === 'true') return; const bookId = container.getAttribute('data-book-id'); if (!bookId) { console.warn('BookReader: No book-id provided'); return; } // Add loading state (container as HTMLElement).innerHTML = '
Loading book reader...
'; try { const root = createRoot(container as HTMLElement); root.render(); // Mark as initialized (container as HTMLElement).dataset.initialized = 'true'; } catch (error) { console.error('BookReader initialization failed:', error); (container as HTMLElement).innerHTML = '
Failed to load book reader
'; } }); } // Initialize on DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initializeBookReaders); } else { initializeBookReaders(); } // Watch for dynamically added elements const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE) { const element = node as Element; if (element.id === 'book-reader' || element.querySelector('#book-reader')) { initializeBookReaders(); } } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); // Expose globally for manual initialization if needed (window as any).BookReader = { init: initializeBookReaders, version: '1.0.0' }; // Export for UMD library export default initializeBookReaders;