toastify-pro 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +341 -40
- package/dist/toastify-pro.esm.js +404 -4
- package/dist/toastify-pro.esm.js.map +1 -1
- package/dist/toastify-pro.umd.js +404 -4
- package/dist/toastify-pro.umd.js.map +1 -1
- package/dist/toastify-pro.umd.min.js +5 -2
- package/dist/toastify-pro.umd.min.js.map +1 -1
- package/package.json +2 -2
- package/src/toastify-pro.js +404 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toastify-pro.esm.js","sources":["../src/toastify-pro.js"],"sourcesContent":["/**\r\n * ToastifyPro - Modern Toast Notification Library\r\n * A beautiful, customizable toast notification library with glassmorphism design,\r\n * Apple AirDrop-style animations, and car swipe exit effects.\r\n * \r\n * Features:\r\n * - Glassmorphism design with backdrop-filter effects\r\n * - Apple AirDrop-style entrance animations\r\n * - Position-aware car swipe exit animations \r\n * - Description support for enhanced messaging\r\n * - Six theme variants (success, error, info, warning, dark, light)\r\n * - Progress bar with shimmer effects\r\n * - Responsive design for mobile devices\r\n * - Framework agnostic (works with React, Vue, Angular, etc.)\r\n * \r\n * @version 1.2.0\r\n * @author ToastifyPro Team\r\n * @license MIT\r\n */\r\nclass ToastifyPro {\r\n /**\r\n * Creates a new ToastifyPro instance\r\n * @param {Object} options - Configuration options\r\n * @param {string} options.position - Toast position (top-left, top-right, bottom-left, bottom-right, top-center, bottom-center)\r\n * @param {number} options.timeout - Auto-dismiss timeout in milliseconds (0 to disable)\r\n * @param {boolean} options.allowClose - Whether to show close button\r\n * @param {number} options.maxLength - Maximum message length\r\n */\r\n constructor(options = {}) {\r\n // Validate options parameter\r\n if (typeof options !== 'object' || options === null) {\r\n console.warn('ToastifyPro: Invalid options parameter. Using defaults.');\r\n options = {};\r\n }\r\n\r\n // Merge with default options\r\n this.defaultOptions = {\r\n position: options.position || \"bottom-center\", // top-left, top-right, bottom-left, bottom-right, top-center, bottom-center\r\n timeout: options.timeout || 3000,\r\n allowClose: options.allowClose !== false, // default true\r\n maxLength: options.maxLength || 100,\r\n };\r\n\r\n // Validate position\r\n const validPositions = ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center'];\r\n if (!validPositions.includes(this.defaultOptions.position)) {\r\n console.warn(`ToastifyPro: Invalid position \"${this.defaultOptions.position}\". Using \"bottom-center\".`);\r\n this.defaultOptions.position = \"bottom-center\";\r\n }\r\n\r\n // Check if we're in a browser environment\r\n if (typeof document === 'undefined') {\r\n throw new Error('ToastifyPro: This library requires a DOM environment (browser).');\r\n }\r\n\r\n // Create or reuse container for this position\r\n const existing = document.querySelector(\r\n `.toastify-pro-container.${this.defaultOptions.position}`\r\n );\r\n \r\n if (existing) {\r\n this.container = existing;\r\n } else {\r\n try {\r\n this.container = document.createElement(\"div\");\r\n this.container.className = `toastify-pro-container ${this.defaultOptions.position}`;\r\n document.body.appendChild(this.container);\r\n } catch (error) {\r\n throw new Error('ToastifyPro: Failed to create container element. DOM may not be ready.');\r\n }\r\n }\r\n\r\n // Inject styles once\r\n this.injectStyles();\r\n }\r\n\r\n /**\r\n * Returns the SVG icon for a given toast type\r\n * @param {string} type - Toast type (success, error, info, warning, dark, light)\r\n * @returns {string} SVG icon markup\r\n */\r\n getIconSVG(type) {\r\n // Validate type parameter\r\n if (typeof type !== 'string') {\r\n console.warn('ToastifyPro: Invalid icon type. Using default info icon.');\r\n type = 'info';\r\n }\r\n\r\n const icons = {\r\n success: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n error: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n info: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n warning: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n dark: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n light: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 11H7v6h2v-6zm4 0h-2v6h2v-6zm4 0h-2v6h2v-6zm2.5-9H19V1h-2v1H7V1H5v1H4.5C3.11 2 2 3.11 2 4.5v14C2 19.89 3.11 21 4.5 21h15c1.39 0 2.5-1.11 2.5-2.5v-14C22 3.11 20.89 2 19.5 2zm0 16h-15v-11h15v11z\" fill=\"currentColor\"/>\r\n </svg>`\r\n };\r\n \r\n return icons[type] || icons.info;\r\n }\r\n\r\n /**\r\n * Injects the CSS styles into the document head\r\n * Styles include glassmorphism design, animations, and responsive layout\r\n */\r\n injectStyles() {\r\n // Prevent duplicate style injection\r\n if (document.getElementById(\"toastify-pro-styles\")) return;\r\n \r\n try {\r\n const style = document.createElement(\"style\");\r\n style.id = \"toastify-pro-styles\";\r\n style.textContent = `\r\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');\r\n \r\n .toastify-pro-container {\r\n position: fixed;\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 16px;\r\n pointer-events: none;\r\n }\r\n .toastify-pro-container.top-left { top: 50px; left: 24px; align-items: flex-start; }\r\n .toastify-pro-container.top-right { top: 50px; right: 24px; align-items: flex-end; }\r\n .toastify-pro-container.bottom-left { bottom: 50px; left: 24px; align-items: flex-start; }\r\n .toastify-pro-container.bottom-right { bottom: 50px; right: 24px; align-items: flex-end; }\r\n .toastify-pro-container.top-center { top: 50px; left: 50%; transform: translateX(-50%); }\r\n .toastify-pro-container.bottom-center { bottom: 50px; left: 50%; transform: translateX(-50%); }\r\n\r\n .toastify-pro {\r\n min-width: 280px;\r\n max-width: 400px;\r\n padding: 20px 24px;\r\n border-radius: 16px;\r\n font-size: 15px;\r\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n font-weight: 500;\r\n color: white;\r\n opacity: 0;\r\n transform: scale(0.3);\r\n transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n pointer-events: auto;\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n backdrop-filter: blur(20px);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n box-shadow: \r\n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\r\n 0 10px 10px -5px rgba(0, 0, 0, 0.04),\r\n 0 0 0 1px rgba(255, 255, 255, 0.05);\r\n overflow: hidden;\r\n }\r\n \r\n .toastify-pro::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n height: 3px;\r\n background: linear-gradient(90deg, \r\n rgba(255, 255, 255, 0.8) 0%,\r\n rgba(255, 255, 255, 0.4) 50%,\r\n rgba(255, 255, 255, 0.8) 100%);\r\n animation: shimmer 2s infinite;\r\n transition: opacity 0.8s ease;\r\n }\r\n \r\n .toastify-pro::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n height: 3px;\r\n background: rgba(255, 255, 255, 0.6);\r\n animation: progress var(--duration, 5s) linear;\r\n border-radius: 0 0 16px 16px;\r\n }\r\n \r\n @keyframes airdropPop {\r\n 0% { \r\n opacity: 0;\r\n transform: scale(0.3) rotateY(-20deg); \r\n }\r\n 30% { \r\n opacity: 0.8;\r\n transform: scale(1.1) rotateY(10deg); \r\n }\r\n 60% { \r\n opacity: 1;\r\n transform: scale(0.98) rotateY(-3deg); \r\n }\r\n 100% { \r\n opacity: 1;\r\n transform: scale(1) rotateY(0deg); \r\n }\r\n }\r\n \r\n @keyframes carSwipeBottom {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(-8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateY(200px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeTop {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateY(-200px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeLeft {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateX(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateX(8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateX(-300px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeRight {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateX(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateX(-8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateX(300px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeCenter {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(-5px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.6) translateY(150px); \r\n }\r\n }\r\n \r\n @keyframes progress {\r\n 0% { width: 100%; }\r\n 100% { width: 0%; }\r\n }\r\n \r\n @keyframes shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n \r\n .toastify-pro.show { \r\n opacity: 1; \r\n transform: scale(1);\r\n animation: airdropPop 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n }\r\n \r\n .toastify-pro.success { \r\n background: linear-gradient(135deg, \r\n rgba(34, 197, 94, 0.9) 0%,\r\n rgba(21, 128, 61, 0.9) 100%);\r\n border-color: rgba(34, 197, 94, 0.3);\r\n }\r\n \r\n .toastify-pro.error { \r\n background: linear-gradient(135deg, \r\n rgba(239, 68, 68, 0.9) 0%,\r\n rgba(185, 28, 28, 0.9) 100%);\r\n border-color: rgba(239, 68, 68, 0.3);\r\n }\r\n \r\n .toastify-pro.info { \r\n background: linear-gradient(135deg, \r\n rgba(59, 130, 246, 0.9) 0%,\r\n rgba(29, 78, 216, 0.9) 100%);\r\n border-color: rgba(59, 130, 246, 0.3);\r\n }\r\n \r\n .toastify-pro.warning { \r\n background: linear-gradient(135deg, \r\n rgba(245, 158, 11, 0.9) 0%,\r\n rgba(217, 119, 6, 0.9) 100%);\r\n border-color: rgba(245, 158, 11, 0.3);\r\n }\r\n \r\n .toastify-pro.dark { \r\n background: linear-gradient(135deg, \r\n rgba(15, 23, 42, 0.95) 0%,\r\n rgba(30, 41, 59, 0.95) 100%);\r\n border-color: rgba(148, 163, 184, 0.2);\r\n }\r\n \r\n .toastify-pro.light { \r\n background: linear-gradient(135deg, \r\n rgba(255, 255, 255, 0.95) 0%,\r\n rgba(248, 250, 252, 0.95) 100%);\r\n color: #1e293b;\r\n border-color: rgba(226, 232, 240, 0.8);\r\n box-shadow: \r\n 0 20px 25px -5px rgba(0, 0, 0, 0.08),\r\n 0 10px 10px -5px rgba(0, 0, 0, 0.03);\r\n }\r\n \r\n .toastify-pro.light::before {\r\n background: linear-gradient(90deg, \r\n rgba(30, 41, 59, 0.8) 0%,\r\n rgba(30, 41, 59, 0.4) 50%,\r\n rgba(30, 41, 59, 0.8) 100%);\r\n }\r\n \r\n .toastify-pro.light::after {\r\n background: rgba(30, 41, 59, 0.6);\r\n }\r\n\r\n .toastify-pro .toast-icon {\r\n flex-shrink: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n background: rgba(255, 255, 255, 0.2);\r\n backdrop-filter: blur(10px);\r\n animation: iconPulse 2s infinite;\r\n }\r\n \r\n @keyframes iconPulse {\r\n 0%, 100% { transform: scale(1); }\r\n 50% { transform: scale(1.05); }\r\n }\r\n \r\n @keyframes iconBounce {\r\n 0% { transform: scale(0.2) rotate(-15deg); }\r\n 40% { transform: scale(1.2) rotate(8deg); }\r\n 70% { transform: scale(0.95) rotate(-3deg); }\r\n 100% { transform: scale(1) rotate(0deg); }\r\n }\r\n \r\n @keyframes iconCarExit {\r\n 0% { \r\n transform: scale(1) rotate(0deg); \r\n opacity: 1;\r\n }\r\n 20% { \r\n transform: scale(1.1) rotate(-10deg); \r\n opacity: 0.9;\r\n }\r\n 100% { \r\n transform: scale(0.3) rotate(180deg); \r\n opacity: 0;\r\n }\r\n }\r\n\r\n .toastify-pro .toast-icon svg {\r\n width: 18px;\r\n height: 18px;\r\n color: inherit;\r\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));\r\n }\r\n\r\n .toastify-pro.light .toast-icon {\r\n background: rgba(15, 23, 42, 0.1);\r\n }\r\n\r\n .toastify-pro .toast-content {\r\n flex: 1;\r\n line-height: 1.5;\r\n font-weight: 500;\r\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\r\n }\r\n\r\n .toastify-pro .toast-message {\r\n font-size: 15px;\r\n font-weight: 500;\r\n margin-bottom: 0;\r\n }\r\n\r\n .toastify-pro .toast-description {\r\n font-size: 13px;\r\n font-weight: 400;\r\n opacity: 0.85;\r\n margin-top: 4px;\r\n line-height: 1.4;\r\n }\r\n\r\n .toastify-pro .close-btn {\r\n cursor: pointer;\r\n font-size: 20px;\r\n color: inherit;\r\n opacity: 0.7;\r\n padding: 8px;\r\n border-radius: 50%;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n width: 32px;\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.1);\r\n backdrop-filter: blur(10px);\r\n font-weight: 300;\r\n line-height: 1;\r\n }\r\n \r\n .toastify-pro .close-btn:hover { \r\n opacity: 1; \r\n background: rgba(255, 255, 255, 0.2);\r\n transform: scale(1.1);\r\n }\r\n \r\n .toastify-pro.light .close-btn {\r\n background: rgba(15, 23, 42, 0.08);\r\n }\r\n \r\n .toastify-pro.light .close-btn:hover { \r\n background: rgba(15, 23, 42, 0.15);\r\n }\r\n \r\n @media (max-width: 640px) {\r\n .toastify-pro {\r\n min-width: 260px;\r\n max-width: calc(100vw - 48px);\r\n margin: 0 8px;\r\n }\r\n \r\n .toastify-pro-container.top-left,\r\n .toastify-pro-container.bottom-left { left: 16px; }\r\n .toastify-pro-container.top-right,\r\n .toastify-pro-container.bottom-right { right: 16px; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to inject styles:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Creates and displays a toast notification\r\n * @param {string} message - Main message text\r\n * @param {string} type - Toast type (success, error, info, warning, dark, light)\r\n * @param {Object} opts - Additional options\r\n * @param {string} opts.description - Optional description text\r\n * @param {number} opts.timeout - Override default timeout\r\n * @param {boolean} opts.allowClose - Override close button setting\r\n * @param {number} opts.maxLength - Override max message length\r\n */\r\n show(message, type = \"dark\", opts = {}) {\r\n // Input validation\r\n if (typeof message !== 'string') {\r\n console.warn('ToastifyPro: Message must be a string. Converting to string.');\r\n message = String(message);\r\n }\r\n\r\n if (!message.trim()) {\r\n console.warn('ToastifyPro: Empty message provided.');\r\n return;\r\n }\r\n\r\n // Validate type\r\n const validTypes = ['success', 'error', 'info', 'warning', 'dark', 'light'];\r\n if (!validTypes.includes(type)) {\r\n console.warn(`ToastifyPro: Invalid type \"${type}\". Using \"dark\".`);\r\n type = 'dark';\r\n }\r\n\r\n // Validate and merge options\r\n if (typeof opts !== 'object' || opts === null) {\r\n console.warn('ToastifyPro: Invalid options parameter. Using defaults.');\r\n opts = {};\r\n }\r\n\r\n const options = { ...this.defaultOptions, ...opts };\r\n\r\n try {\r\n // Create toast element\r\n const toast = document.createElement(\"div\");\r\n toast.className = `toastify-pro ${type}`;\r\n \r\n // Set duration for progress bar animation\r\n if (options.timeout > 0) {\r\n toast.style.setProperty('--duration', `${options.timeout}ms`);\r\n }\r\n\r\n // Create icon wrapper\r\n const iconWrapper = document.createElement(\"div\");\r\n iconWrapper.className = \"toast-icon\";\r\n iconWrapper.innerHTML = this.getIconSVG(type);\r\n toast.appendChild(iconWrapper);\r\n\r\n // Create content wrapper for the message and description\r\n const contentWrapper = document.createElement(\"div\");\r\n contentWrapper.className = \"toast-content\";\r\n \r\n // Main message\r\n const messageElement = document.createElement(\"div\");\r\n messageElement.className = \"toast-message\";\r\n messageElement.textContent = message.substring(0, options.maxLength);\r\n contentWrapper.appendChild(messageElement);\r\n \r\n // Optional description (if provided)\r\n if (options.description && typeof options.description === 'string') {\r\n const descriptionElement = document.createElement(\"div\");\r\n descriptionElement.className = \"toast-description\";\r\n descriptionElement.textContent = options.description.substring(0, options.maxLength * 2);\r\n contentWrapper.appendChild(descriptionElement);\r\n }\r\n \r\n toast.appendChild(contentWrapper);\r\n\r\n // Add close button if enabled\r\n if (options.allowClose) {\r\n const closeBtn = document.createElement(\"span\");\r\n closeBtn.className = \"close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('aria-label', 'Close notification');\r\n closeBtn.onclick = () => this.removeToast(toast);\r\n toast.appendChild(closeBtn);\r\n }\r\n\r\n // Add toast to container\r\n this.container.appendChild(toast);\r\n\r\n // Apple AirDrop-style entrance animation\r\n setTimeout(() => {\r\n toast.classList.add(\"show\");\r\n // Add icon bounce effect with Apple-style timing\r\n const icon = toast.querySelector('.toast-icon');\r\n if (icon) {\r\n icon.style.animation = 'iconBounce 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275)';\r\n }\r\n }, 10);\r\n\r\n // Auto-remove after timeout\r\n if (options.timeout > 0) {\r\n setTimeout(() => this.removeToast(toast), options.timeout);\r\n }\r\n\r\n return toast; // Return element for potential future manipulation\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to create toast:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a toast with position-aware car swipe animation\r\n * @param {HTMLElement} toast - Toast element to remove\r\n */\r\n removeToast(toast) {\r\n if (!toast || !toast.parentNode) {\r\n console.warn('ToastifyPro: Invalid toast element for removal.');\r\n return;\r\n }\r\n\r\n try {\r\n // Detect position to choose the right swipe direction\r\n const container = toast.parentNode;\r\n const position = container.className.split(' ')[1]; // get position class\r\n \r\n let swipeAnimation = 'carSwipeBottom'; // default fallback\r\n \r\n // Choose animation based on position - car swipes away from screen edge\r\n if (position.includes('bottom')) {\r\n swipeAnimation = 'carSwipeBottom'; // swipe down off screen\r\n } else if (position.includes('top')) {\r\n swipeAnimation = 'carSwipeTop'; // swipe up off screen\r\n } else if (position.includes('left')) {\r\n swipeAnimation = 'carSwipeLeft'; // swipe left off screen\r\n } else if (position.includes('right')) {\r\n swipeAnimation = 'carSwipeRight'; // swipe right off screen\r\n } else if (position.includes('center')) {\r\n swipeAnimation = 'carSwipeCenter'; // swipe down for center\r\n }\r\n \r\n // Apply fast car swipe animation with improved easing\r\n toast.style.animation = `${swipeAnimation} 0.4s cubic-bezier(0.4, 0.0, 1, 1) forwards`;\r\n \r\n // Add spinning icon animation for extra polish\r\n const icon = toast.querySelector('.toast-icon');\r\n if (icon) {\r\n icon.style.animation = 'iconCarExit 0.4s cubic-bezier(0.4, 0.0, 1, 1) forwards';\r\n }\r\n \r\n // Remove element after animation completes\r\n setTimeout(() => {\r\n if (toast.parentNode) {\r\n toast.remove();\r\n }\r\n }, 400);\r\n } catch (error) {\r\n console.error('ToastifyPro: Error removing toast:', error);\r\n // Fallback: remove immediately if animation fails\r\n if (toast.parentNode) {\r\n toast.remove();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Shows a success toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n success(msg, opts) {\r\n // Handle both (message) and (message, description) formats\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"success\", opts);\r\n }\r\n\r\n /**\r\n * Shows an error toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n error(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"error\", opts);\r\n }\r\n\r\n /**\r\n * Shows an info toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n info(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"info\", opts);\r\n }\r\n\r\n /**\r\n * Shows a warning toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n warning(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"warning\", opts);\r\n }\r\n\r\n /**\r\n * Shows a dark-themed toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n dark(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"dark\", opts);\r\n }\r\n\r\n /**\r\n * Shows a light-themed toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n light(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"light\", opts);\r\n }\r\n}\r\n\r\n/**\r\n * Export for different environments\r\n * Supports CommonJS (Node.js), AMD, and browser globals\r\n */\r\n\r\n// CommonJS export (Node.js/npm)\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = ToastifyPro;\r\n}\r\n\r\n// ES6 module export\r\nif (typeof exports !== 'undefined') {\r\n exports.ToastifyPro = ToastifyPro;\r\n exports.default = ToastifyPro;\r\n}\r\n\r\n// AMD export (RequireJS)\r\nif (typeof define === 'function' && define.amd) {\r\n define(function() {\r\n return ToastifyPro;\r\n });\r\n}\r\n\r\n// Browser global\r\nif (typeof window !== 'undefined') {\r\n window.ToastifyPro = ToastifyPro;\r\n}\r\n"],"names":[],"mappings":"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AE,OAAO;AAC/D;AACA,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,KAAK,CAAC,EAAE,GAAG,qBAAqB,CAAC;AACvC,MAAM,KAAK,CAAC,WAAW,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,CAAC;AACJ,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACvC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;AACpE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;AAC1C;AACA,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACrC,MAAM,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;AACnF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,C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"}
|
|
1
|
+
{"version":3,"file":"toastify-pro.esm.js","sources":["../src/toastify-pro.js"],"sourcesContent":["/**\r\n * ToastifyPro - Modern Toast Notification Library\r\n * A beautiful, customizable toast notification library with glassmorphism design,\r\n * Apple AirDrop-style animations, and car swipe exit effects.\r\n * \r\n * Features:\r\n * - Glassmorphism design with backdrop-filter effects\r\n * - Apple AirDrop-style entrance animations\r\n * - Position-aware car swipe exit animations \r\n * - Description support for enhanced messaging\r\n * - Six theme variants (success, error, info, warning, dark, light)\r\n * - Progress bar with shimmer effects\r\n * - Responsive design for mobile devices\r\n * - Framework agnostic (works with React, Vue, Angular, etc.)\r\n * - Confirmation dialogs with customizable buttons and callbacks\r\n * - Center position support for enhanced focus\r\n * - Independent positioning for confirmations\r\n * \r\n * @version 1.3.0\r\n * @author ToastifyPro Team\r\n * @license MIT\r\n */\r\nclass ToastifyPro {\r\n /**\r\n * Creates a new ToastifyPro instance\r\n * @param {Object} options - Configuration options\r\n * @param {string} options.position - Toast position (top-left, top-right, bottom-left, bottom-right, top-center, bottom-center, center)\r\n * @param {number} options.timeout - Auto-dismiss timeout in milliseconds (0 to disable)\r\n * @param {boolean} options.allowClose - Whether to show close button\r\n * @param {number} options.maxLength - Maximum message length\r\n */\r\n constructor(options = {}) {\r\n // Validate options parameter\r\n if (typeof options !== 'object' || options === null) {\r\n console.warn('ToastifyPro: Invalid options parameter. Using defaults.');\r\n options = {};\r\n }\r\n\r\n // Merge with default options\r\n this.defaultOptions = {\r\n position: options.position || \"bottom-center\", // top-left, top-right, bottom-left, bottom-right, top-center, bottom-center, center\r\n timeout: options.timeout || 3000,\r\n allowClose: options.allowClose !== false, // default true\r\n maxLength: options.maxLength || 100,\r\n };\r\n\r\n // Validate position\r\n const validPositions = ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'center'];\r\n if (!validPositions.includes(this.defaultOptions.position)) {\r\n console.warn(`ToastifyPro: Invalid position \"${this.defaultOptions.position}\". Using \"bottom-center\".`);\r\n this.defaultOptions.position = \"bottom-center\";\r\n }\r\n\r\n // Check if we're in a browser environment\r\n if (typeof document === 'undefined') {\r\n throw new Error('ToastifyPro: This library requires a DOM environment (browser).');\r\n }\r\n\r\n // Create or reuse container for this position\r\n const existing = document.querySelector(\r\n `.toastify-pro-container.${this.defaultOptions.position}`\r\n );\r\n \r\n if (existing) {\r\n this.container = existing;\r\n } else {\r\n try {\r\n this.container = document.createElement(\"div\");\r\n this.container.className = `toastify-pro-container ${this.defaultOptions.position}`;\r\n document.body.appendChild(this.container);\r\n } catch (error) {\r\n throw new Error('ToastifyPro: Failed to create container element. DOM may not be ready.');\r\n }\r\n }\r\n\r\n // Inject styles once\r\n this.injectStyles();\r\n }\r\n\r\n /**\r\n * Returns the SVG icon for a given toast type\r\n * @param {string} type - Toast type (success, error, info, warning, dark, light)\r\n * @returns {string} SVG icon markup\r\n */\r\n getIconSVG(type) {\r\n // Validate type parameter\r\n if (typeof type !== 'string') {\r\n console.warn('ToastifyPro: Invalid icon type. Using default info icon.');\r\n type = 'info';\r\n }\r\n\r\n const icons = {\r\n success: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n error: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n info: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n warning: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n dark: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" fill=\"currentColor\"/>\r\n </svg>`,\r\n light: `<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 11H7v6h2v-6zm4 0h-2v6h2v-6zm4 0h-2v6h2v-6zm2.5-9H19V1h-2v1H7V1H5v1H4.5C3.11 2 2 3.11 2 4.5v14C2 19.89 3.11 21 4.5 21h15c1.39 0 2.5-1.11 2.5-2.5v-14C22 3.11 20.89 2 19.5 2zm0 16h-15v-11h15v11z\" fill=\"currentColor\"/>\r\n </svg>`\r\n };\r\n \r\n return icons[type] || icons.info;\r\n }\r\n\r\n /**\r\n * Injects the CSS styles into the document head\r\n * Styles include glassmorphism design, animations, and responsive layout\r\n */\r\n injectStyles() {\r\n // Prevent duplicate style injection\r\n if (document.getElementById(\"toastify-pro-styles\")) return;\r\n \r\n try {\r\n const style = document.createElement(\"style\");\r\n style.id = \"toastify-pro-styles\";\r\n style.textContent = `\r\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');\r\n \r\n .toastify-pro-container {\r\n position: fixed;\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 16px;\r\n pointer-events: none;\r\n }\r\n .toastify-pro-container.top-left { top: 50px; left: 24px; align-items: flex-start; }\r\n .toastify-pro-container.top-right { top: 50px; right: 24px; align-items: flex-end; }\r\n .toastify-pro-container.bottom-left { bottom: 50px; left: 24px; align-items: flex-start; }\r\n .toastify-pro-container.bottom-right { bottom: 50px; right: 24px; align-items: flex-end; }\r\n .toastify-pro-container.top-center { top: 50px; left: 50%; transform: translateX(-50%); }\r\n .toastify-pro-container.bottom-center { bottom: 50px; left: 50%; transform: translateX(-50%); }\r\n .toastify-pro-container.center { top: 50%; left: 50%; transform: translate(-50%, -50%); }\r\n\r\n .toastify-pro {\r\n min-width: 280px;\r\n max-width: 400px;\r\n padding: 20px 24px;\r\n border-radius: 16px;\r\n font-size: 15px;\r\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n font-weight: 500;\r\n color: white;\r\n opacity: 0;\r\n transform: scale(0.3);\r\n transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n pointer-events: auto;\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n backdrop-filter: blur(20px);\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n box-shadow: \r\n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\r\n 0 10px 10px -5px rgba(0, 0, 0, 0.04),\r\n 0 0 0 1px rgba(255, 255, 255, 0.05);\r\n overflow: hidden;\r\n }\r\n \r\n .toastify-pro::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n height: 3px;\r\n background: linear-gradient(90deg, \r\n rgba(255, 255, 255, 0.8) 0%,\r\n rgba(255, 255, 255, 0.4) 50%,\r\n rgba(255, 255, 255, 0.8) 100%);\r\n animation: shimmer 2s infinite;\r\n transition: opacity 0.8s ease;\r\n }\r\n \r\n .toastify-pro::after {\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n height: 3px;\r\n background: rgba(255, 255, 255, 0.6);\r\n animation: progress var(--duration, 5s) linear;\r\n border-radius: 0 0 16px 16px;\r\n }\r\n \r\n @keyframes airdropPop {\r\n 0% { \r\n opacity: 0;\r\n transform: scale(0.3) rotateY(-20deg); \r\n }\r\n 30% { \r\n opacity: 0.8;\r\n transform: scale(1.1) rotateY(10deg); \r\n }\r\n 60% { \r\n opacity: 1;\r\n transform: scale(0.98) rotateY(-3deg); \r\n }\r\n 100% { \r\n opacity: 1;\r\n transform: scale(1) rotateY(0deg); \r\n }\r\n }\r\n \r\n @keyframes carSwipeBottom {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(-8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateY(200px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeTop {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateY(-200px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeLeft {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateX(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateX(8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateX(-300px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeRight {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateX(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateX(-8px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.8) translateX(300px); \r\n }\r\n }\r\n \r\n @keyframes carSwipeCenter {\r\n 0% { \r\n opacity: 1;\r\n transform: scale(1) translateY(0); \r\n }\r\n 15% { \r\n opacity: 1;\r\n transform: scale(1.02) translateY(-5px); \r\n }\r\n 100% { \r\n opacity: 0;\r\n transform: scale(0.6) translateY(150px); \r\n }\r\n }\r\n \r\n @keyframes progress {\r\n 0% { width: 100%; }\r\n 100% { width: 0%; }\r\n }\r\n \r\n @keyframes shimmer {\r\n 0% { transform: translateX(-100%); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n \r\n .toastify-pro.show { \r\n opacity: 1; \r\n transform: scale(1);\r\n animation: airdropPop 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n }\r\n \r\n .toastify-pro.success { \r\n background: linear-gradient(135deg, \r\n rgba(34, 197, 94, 0.9) 0%,\r\n rgba(21, 128, 61, 0.9) 100%);\r\n border-color: rgba(34, 197, 94, 0.3);\r\n }\r\n \r\n .toastify-pro.error { \r\n background: linear-gradient(135deg, \r\n rgba(239, 68, 68, 0.9) 0%,\r\n rgba(185, 28, 28, 0.9) 100%);\r\n border-color: rgba(239, 68, 68, 0.3);\r\n }\r\n \r\n .toastify-pro.info { \r\n background: linear-gradient(135deg, \r\n rgba(59, 130, 246, 0.9) 0%,\r\n rgba(29, 78, 216, 0.9) 100%);\r\n border-color: rgba(59, 130, 246, 0.3);\r\n }\r\n \r\n .toastify-pro.warning { \r\n background: linear-gradient(135deg, \r\n rgba(245, 158, 11, 0.9) 0%,\r\n rgba(217, 119, 6, 0.9) 100%);\r\n border-color: rgba(245, 158, 11, 0.3);\r\n }\r\n \r\n .toastify-pro.dark { \r\n background: linear-gradient(135deg, \r\n rgba(15, 23, 42, 0.95) 0%,\r\n rgba(30, 41, 59, 0.95) 100%);\r\n border-color: rgba(148, 163, 184, 0.2);\r\n }\r\n \r\n .toastify-pro.light { \r\n background: linear-gradient(135deg, \r\n rgba(255, 255, 255, 0.95) 0%,\r\n rgba(248, 250, 252, 0.95) 100%);\r\n color: #1e293b;\r\n border-color: rgba(226, 232, 240, 0.8);\r\n box-shadow: \r\n 0 20px 25px -5px rgba(0, 0, 0, 0.08),\r\n 0 10px 10px -5px rgba(0, 0, 0, 0.03);\r\n }\r\n \r\n .toastify-pro.light::before {\r\n background: linear-gradient(90deg, \r\n rgba(30, 41, 59, 0.8) 0%,\r\n rgba(30, 41, 59, 0.4) 50%,\r\n rgba(30, 41, 59, 0.8) 100%);\r\n }\r\n \r\n .toastify-pro.light::after {\r\n background: rgba(30, 41, 59, 0.6);\r\n }\r\n\r\n .toastify-pro .toast-icon {\r\n flex-shrink: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 28px;\r\n height: 28px;\r\n border-radius: 50%;\r\n background: rgba(255, 255, 255, 0.2);\r\n backdrop-filter: blur(10px);\r\n animation: iconPulse 2s infinite;\r\n }\r\n \r\n @keyframes iconPulse {\r\n 0%, 100% { transform: scale(1); }\r\n 50% { transform: scale(1.05); }\r\n }\r\n \r\n @keyframes iconBounce {\r\n 0% { transform: scale(0.2) rotate(-15deg); }\r\n 40% { transform: scale(1.2) rotate(8deg); }\r\n 70% { transform: scale(0.95) rotate(-3deg); }\r\n 100% { transform: scale(1) rotate(0deg); }\r\n }\r\n \r\n @keyframes iconCarExit {\r\n 0% { \r\n transform: scale(1) rotate(0deg); \r\n opacity: 1;\r\n }\r\n 20% { \r\n transform: scale(1.1) rotate(-10deg); \r\n opacity: 0.9;\r\n }\r\n 100% { \r\n transform: scale(0.3) rotate(180deg); \r\n opacity: 0;\r\n }\r\n }\r\n\r\n .toastify-pro .toast-icon svg {\r\n width: 18px;\r\n height: 18px;\r\n color: inherit;\r\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));\r\n }\r\n\r\n .toastify-pro.light .toast-icon {\r\n background: rgba(15, 23, 42, 0.1);\r\n }\r\n\r\n .toastify-pro .toast-content {\r\n flex: 1;\r\n line-height: 1.5;\r\n font-weight: 500;\r\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\r\n }\r\n\r\n .toastify-pro .toast-message {\r\n font-size: 15px;\r\n font-weight: 500;\r\n margin-bottom: 0;\r\n }\r\n\r\n .toastify-pro .toast-description {\r\n font-size: 13px;\r\n font-weight: 400;\r\n opacity: 0.85;\r\n margin-top: 4px;\r\n line-height: 1.4;\r\n }\r\n\r\n .toastify-pro .close-btn {\r\n cursor: pointer;\r\n font-size: 20px;\r\n color: inherit;\r\n opacity: 0.7;\r\n padding: 8px;\r\n border-radius: 50%;\r\n transition: all 0.2s ease;\r\n flex-shrink: 0;\r\n width: 32px;\r\n height: 32px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.1);\r\n backdrop-filter: blur(10px);\r\n font-weight: 300;\r\n line-height: 1;\r\n }\r\n \r\n .toastify-pro .close-btn:hover { \r\n opacity: 1; \r\n background: rgba(255, 255, 255, 0.2);\r\n transform: scale(1.1);\r\n }\r\n \r\n .toastify-pro.light .close-btn {\r\n background: rgba(15, 23, 42, 0.08);\r\n }\r\n \r\n .toastify-pro.light .close-btn:hover { \r\n background: rgba(15, 23, 42, 0.15);\r\n }\r\n \r\n @media (max-width: 640px) {\r\n .toastify-pro {\r\n min-width: 260px;\r\n max-width: calc(100vw - 48px);\r\n margin: 0 8px;\r\n }\r\n \r\n .toastify-pro-container.top-left,\r\n .toastify-pro-container.bottom-left { left: 16px; }\r\n .toastify-pro-container.top-right,\r\n .toastify-pro-container.bottom-right { right: 16px; }\r\n }\r\n\r\n /* Confirmation Toast Styles */\r\n .toastify-pro.confirmation {\r\n min-width: 320px;\r\n max-width: 450px;\r\n padding: 24px;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 20px;\r\n position: relative;\r\n }\r\n\r\n /* Hide progress bar for confirmation toasts */\r\n .toastify-pro.confirmation::after {\r\n display: none;\r\n }\r\n\r\n /* Close button for confirmation dialogs */\r\n .toastify-pro.confirmation .conf-close-btn {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px;\r\n cursor: pointer;\r\n font-size: 18px;\r\n color: inherit;\r\n opacity: 0.6;\r\n padding: 4px;\r\n border-radius: 50%;\r\n transition: all 0.2s ease;\r\n width: 24px;\r\n height: 24px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.1);\r\n backdrop-filter: blur(10px);\r\n font-weight: 300;\r\n line-height: 1;\r\n border: 1px solid rgba(255, 255, 255, 0.1);\r\n }\r\n \r\n .toastify-pro.confirmation .conf-close-btn:hover { \r\n opacity: 1; \r\n background: rgba(255, 255, 255, 0.2);\r\n transform: scale(1.1);\r\n border-color: rgba(255, 255, 255, 0.2);\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn {\r\n background: rgba(15, 23, 42, 0.08);\r\n border-color: rgba(15, 23, 42, 0.1);\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn:hover { \r\n background: rgba(15, 23, 42, 0.15);\r\n border-color: rgba(15, 23, 42, 0.2);\r\n }\r\n\r\n .toastify-pro.confirmation .toast-content {\r\n text-align: center;\r\n margin-bottom: 8px;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-message {\r\n font-weight: 600;\r\n font-size: 16px;\r\n margin-bottom: 6px;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-description {\r\n font-size: 14px;\r\n opacity: 0.9;\r\n margin-top: 6px;\r\n }\r\n\r\n /* Fix text visibility for dark/light variants */\r\n .toastify-pro.confirmation.dark .toast-message,\r\n .toastify-pro.confirmation.dark .toast-description {\r\n color: white;\r\n }\r\n\r\n .toastify-pro.confirmation.light .toast-message,\r\n .toastify-pro.confirmation.light .toast-description {\r\n color: #1e293b;\r\n }\r\n\r\n .toast-actions {\r\n display: flex;\r\n gap: 12px;\r\n margin-top: 8px;\r\n }\r\n\r\n .toast-btn {\r\n flex: 1;\r\n padding: 10px 16px;\r\n border: none;\r\n border-radius: 8px;\r\n font-weight: 600;\r\n font-size: 14px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n backdrop-filter: blur(10px);\r\n border: 1px solid rgba(255, 255, 255, 0.2);\r\n }\r\n\r\n .toast-btn:hover {\r\n transform: translateY(-1px);\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .toast-btn:active {\r\n transform: translateY(0);\r\n }\r\n\r\n .toast-btn-cancel {\r\n background: rgba(255, 255, 255, 0.1);\r\n color: rgba(255, 255, 255, 0.8);\r\n border: 1px solid rgba(255, 255, 255, 0.3);\r\n font-weight: 500;\r\n }\r\n\r\n .toast-btn-cancel:hover {\r\n background: rgba(255, 255, 255, 0.15);\r\n color: rgba(255, 255, 255, 0.9);\r\n border-color: rgba(255, 255, 255, 0.4);\r\n }\r\n\r\n .toast-btn-confirm {\r\n color: white;\r\n font-weight: 700;\r\n border: 2px solid rgba(255, 255, 255, 0.3);\r\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);\r\n position: relative;\r\n overflow: hidden;\r\n background: linear-gradient(135deg, rgba(15, 23, 42, 0.9), rgba(30, 41, 59, 0.9));\r\n border-color: rgba(148, 163, 184, 0.5);\r\n }\r\n\r\n .toast-btn-confirm::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -100%;\r\n width: 100%;\r\n height: 100%;\r\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\r\n transition: left 0.5s;\r\n }\r\n\r\n .toast-btn-confirm:hover::before {\r\n left: 100%;\r\n }\r\n\r\n .toast-btn-confirm:hover {\r\n background: linear-gradient(135deg, rgba(15, 23, 42, 1), rgba(30, 41, 59, 1));\r\n border-color: rgba(148, 163, 184, 0.7);\r\n box-shadow: 0 6px 20px rgba(15, 23, 42, 0.4);\r\n }\r\n\r\n .toastify-pro.light .toast-btn-cancel {\r\n background: rgba(15, 23, 42, 0.08);\r\n color: rgba(15, 23, 42, 0.8);\r\n border-color: rgba(15, 23, 42, 0.2);\r\n }\r\n\r\n .toastify-pro.light .toast-btn-cancel:hover {\r\n background: rgba(15, 23, 42, 0.12);\r\n color: rgba(15, 23, 42, 1);\r\n border-color: rgba(15, 23, 42, 0.3);\r\n }\r\n\r\n /* Enhanced light theme confirm buttons */\r\n .toastify-pro.light .toast-btn-confirm {\r\n border-color: rgba(15, 23, 42, 0.3);\r\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(248, 250, 252, 0.9));\r\n color: #1e293b;\r\n }\r\n\r\n .toastify-pro.light .toast-btn-confirm:hover {\r\n background: linear-gradient(135deg, rgba(255, 255, 255, 1), rgba(248, 250, 252, 1));\r\n border-color: rgba(15, 23, 42, 0.4);\r\n box-shadow: 0 6px 20px rgba(15, 23, 42, 0.2);\r\n }\r\n\r\n @media (max-width: 640px) {\r\n .toastify-pro.confirmation {\r\n min-width: 280px;\r\n max-width: calc(100vw - 32px);\r\n }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to inject styles:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Creates and displays a toast notification\r\n * @param {string} message - Main message text\r\n * @param {string} type - Toast type (success, error, info, warning, dark, light)\r\n * @param {Object} opts - Additional options\r\n * @param {string} opts.description - Optional description text\r\n * @param {number} opts.timeout - Override default timeout\r\n * @param {boolean} opts.allowClose - Override close button setting\r\n * @param {number} opts.maxLength - Override max message length\r\n */\r\n show(message, type = \"dark\", opts = {}) {\r\n // Input validation\r\n if (typeof message !== 'string') {\r\n console.warn('ToastifyPro: Message must be a string. Converting to string.');\r\n message = String(message);\r\n }\r\n\r\n if (!message.trim()) {\r\n console.warn('ToastifyPro: Empty message provided.');\r\n return;\r\n }\r\n\r\n // Validate type\r\n const validTypes = ['success', 'error', 'info', 'warning', 'dark', 'light'];\r\n if (!validTypes.includes(type)) {\r\n console.warn(`ToastifyPro: Invalid type \"${type}\". Using \"dark\".`);\r\n type = 'dark';\r\n }\r\n\r\n // Validate and merge options\r\n if (typeof opts !== 'object' || opts === null) {\r\n console.warn('ToastifyPro: Invalid options parameter. Using defaults.');\r\n opts = {};\r\n }\r\n\r\n const options = { ...this.defaultOptions, ...opts };\r\n\r\n try {\r\n // Create toast element\r\n const toast = document.createElement(\"div\");\r\n toast.className = `toastify-pro ${type}`;\r\n \r\n // Set duration for progress bar animation\r\n if (options.timeout > 0) {\r\n toast.style.setProperty('--duration', `${options.timeout}ms`);\r\n }\r\n\r\n // Create icon wrapper\r\n const iconWrapper = document.createElement(\"div\");\r\n iconWrapper.className = \"toast-icon\";\r\n iconWrapper.innerHTML = this.getIconSVG(type);\r\n toast.appendChild(iconWrapper);\r\n\r\n // Create content wrapper for the message and description\r\n const contentWrapper = document.createElement(\"div\");\r\n contentWrapper.className = \"toast-content\";\r\n \r\n // Main message\r\n const messageElement = document.createElement(\"div\");\r\n messageElement.className = \"toast-message\";\r\n messageElement.textContent = message.substring(0, options.maxLength);\r\n contentWrapper.appendChild(messageElement);\r\n \r\n // Optional description (if provided)\r\n if (options.description && typeof options.description === 'string') {\r\n const descriptionElement = document.createElement(\"div\");\r\n descriptionElement.className = \"toast-description\";\r\n descriptionElement.textContent = options.description.substring(0, options.maxLength * 2);\r\n contentWrapper.appendChild(descriptionElement);\r\n }\r\n \r\n toast.appendChild(contentWrapper);\r\n\r\n // Add close button if enabled\r\n if (options.allowClose) {\r\n const closeBtn = document.createElement(\"span\");\r\n closeBtn.className = \"close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('aria-label', 'Close notification');\r\n closeBtn.onclick = () => this.removeToast(toast);\r\n toast.appendChild(closeBtn);\r\n }\r\n\r\n // Add toast to container\r\n this.container.appendChild(toast);\r\n\r\n // Apple AirDrop-style entrance animation\r\n setTimeout(() => {\r\n toast.classList.add(\"show\");\r\n // Add icon bounce effect with Apple-style timing\r\n const icon = toast.querySelector('.toast-icon');\r\n if (icon) {\r\n icon.style.animation = 'iconBounce 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275)';\r\n }\r\n }, 10);\r\n\r\n // Auto-remove after timeout\r\n if (options.timeout > 0) {\r\n setTimeout(() => this.removeToast(toast), options.timeout);\r\n }\r\n\r\n return toast; // Return element for potential future manipulation\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to create toast:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a toast with position-aware car swipe animation\r\n * @param {HTMLElement} toast - Toast element to remove\r\n */\r\n removeToast(toast) {\r\n if (!toast || !toast.parentNode) {\r\n console.warn('ToastifyPro: Invalid toast element for removal.');\r\n return;\r\n }\r\n\r\n try {\r\n // Detect position to choose the right swipe direction\r\n const container = toast.parentNode;\r\n const position = container.className.split(' ')[1]; // get position class\r\n \r\n let swipeAnimation = 'carSwipeBottom'; // default fallback\r\n \r\n // Choose animation based on position - car swipes away from screen edge\r\n if (position.includes('bottom')) {\r\n swipeAnimation = 'carSwipeBottom'; // swipe down off screen\r\n } else if (position.includes('top')) {\r\n swipeAnimation = 'carSwipeTop'; // swipe up off screen\r\n } else if (position.includes('left')) {\r\n swipeAnimation = 'carSwipeLeft'; // swipe left off screen\r\n } else if (position.includes('right')) {\r\n swipeAnimation = 'carSwipeRight'; // swipe right off screen\r\n } else if (position.includes('center')) {\r\n swipeAnimation = 'carSwipeCenter'; // swipe down for center\r\n }\r\n \r\n // Apply fast car swipe animation with improved easing\r\n toast.style.animation = `${swipeAnimation} 0.4s cubic-bezier(0.4, 0.0, 1, 1) forwards`;\r\n \r\n // Add spinning icon animation for extra polish\r\n const icon = toast.querySelector('.toast-icon');\r\n if (icon) {\r\n icon.style.animation = 'iconCarExit 0.4s cubic-bezier(0.4, 0.0, 1, 1) forwards';\r\n }\r\n \r\n // Remove element after animation completes\r\n setTimeout(() => {\r\n if (toast.parentNode) {\r\n toast.remove();\r\n }\r\n }, 400);\r\n } catch (error) {\r\n console.error('ToastifyPro: Error removing toast:', error);\r\n // Fallback: remove immediately if animation fails\r\n if (toast.parentNode) {\r\n toast.remove();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Shows a success toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n success(msg, opts) {\r\n // Handle both (message) and (message, description) formats\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"success\", opts);\r\n }\r\n\r\n /**\r\n * Shows an error toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n error(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"error\", opts);\r\n }\r\n\r\n /**\r\n * Shows an info toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n info(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"info\", opts);\r\n }\r\n\r\n /**\r\n * Shows a warning toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n warning(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"warning\", opts);\r\n }\r\n\r\n /**\r\n * Shows a dark-themed toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n dark(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"dark\", opts);\r\n }\r\n\r\n /**\r\n * Shows a light-themed toast notification\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n */\r\n light(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n this.show(msg, \"light\", opts);\r\n }\r\n\r\n /**\r\n * Shows a confirmation toast with confirm/cancel buttons\r\n * @param {string} message - Main confirmation question\r\n * @param {string|Function|Object} descriptionOrCallback - Description text, callback function, or options object\r\n * @param {Function} callback - Callback function (if description provided)\r\n */\r\n conf(message, descriptionOrCallback, callback) {\r\n // Parse arguments to support multiple usage patterns\r\n let description = '';\r\n let options = {};\r\n let resultCallback = null;\r\n\r\n // Pattern 1: conf('message', callback)\r\n if (typeof descriptionOrCallback === 'function' && !callback) {\r\n resultCallback = descriptionOrCallback;\r\n }\r\n // Pattern 2: conf('message', 'description', callback)\r\n else if (typeof descriptionOrCallback === 'string' && typeof callback === 'function') {\r\n description = descriptionOrCallback;\r\n resultCallback = callback;\r\n }\r\n // Pattern 3: conf('message', options) with onConfirm/onCancel\r\n else if (typeof descriptionOrCallback === 'object' && descriptionOrCallback !== null) {\r\n options = descriptionOrCallback;\r\n description = options.description || '';\r\n \r\n // Use onConfirm/onCancel if provided, otherwise use callback parameter\r\n if (options.onConfirm || options.onCancel) {\r\n // Don't use the callback parameter if onConfirm/onCancel are provided\r\n resultCallback = null;\r\n } else if (typeof callback === 'function') {\r\n resultCallback = callback;\r\n }\r\n }\r\n // Pattern 4: conf('message', 'description', options) - legacy support\r\n else if (typeof descriptionOrCallback === 'string' && typeof callback === 'object') {\r\n description = descriptionOrCallback;\r\n options = callback || {};\r\n // In this case, no unified callback, rely on onConfirm/onCancel\r\n resultCallback = null;\r\n }\r\n\r\n // Default options for confirmation\r\n const confirmOptions = {\r\n timeout: 0, // No auto-dismiss for confirmations\r\n allowClose: false, // No close button, must choose\r\n confirmText: options.confirmText || 'Confirm',\r\n cancelText: options.cancelText || 'Cancel',\r\n theme: options.theme || options.color || 'dark', // Support both theme and color for backward compatibility\r\n position: options.position || 'center', // Default to center for confirmations\r\n ...options\r\n };\r\n\r\n // Validate and set theme to only dark or light\r\n if (confirmOptions.theme === 'light' || confirmOptions.theme === 'white') {\r\n confirmOptions.theme = 'light';\r\n } else {\r\n confirmOptions.theme = 'dark'; // Default to dark for all other values\r\n }\r\n\r\n // Validate position for confirmation toast\r\n const validPositions = ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'top-center', 'bottom-center', 'center'];\r\n if (!validPositions.includes(confirmOptions.position)) {\r\n console.warn(`ToastifyPro: Invalid confirmation position \"${confirmOptions.position}\". Using default position.`);\r\n confirmOptions.position = this.defaultOptions.position;\r\n }\r\n\r\n // Get or create container for the specified position\r\n let confirmContainer = document.querySelector(`.toastify-pro-container.${confirmOptions.position}`);\r\n \r\n if (!confirmContainer) {\r\n try {\r\n confirmContainer = document.createElement(\"div\");\r\n confirmContainer.className = `toastify-pro-container ${confirmOptions.position}`;\r\n document.body.appendChild(confirmContainer);\r\n } catch (error) {\r\n console.warn('ToastifyPro: Failed to create confirmation container. Using default container.');\r\n confirmContainer = this.container;\r\n }\r\n }\r\n\r\n // Helper function to handle confirmation result\r\n const handleConfirmation = (confirmed) => {\r\n if (confirmed) {\r\n // Call onConfirm if provided\r\n if (options.onConfirm && typeof options.onConfirm === 'function') {\r\n try {\r\n options.onConfirm();\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in onConfirm callback:', error);\r\n }\r\n }\r\n // Call unified callback if provided\r\n if (resultCallback && typeof resultCallback === 'function') {\r\n try {\r\n resultCallback(true);\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in confirmation callback:', error);\r\n }\r\n }\r\n } else {\r\n // Call onCancel if provided\r\n if (options.onCancel && typeof options.onCancel === 'function') {\r\n try {\r\n options.onCancel();\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in onCancel callback:', error);\r\n }\r\n }\r\n // Call unified callback if provided\r\n if (resultCallback && typeof resultCallback === 'function') {\r\n try {\r\n resultCallback(false);\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in confirmation callback:', error);\r\n }\r\n }\r\n }\r\n };\r\n\r\n try {\r\n // Create confirmation toast element\r\n const toast = document.createElement(\"div\");\r\n toast.className = `toastify-pro confirmation ${confirmOptions.theme}`;\r\n\r\n // Create close button for confirmation\r\n const closeBtn = document.createElement(\"span\");\r\n closeBtn.className = \"conf-close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('aria-label', 'Cancel confirmation');\r\n closeBtn.onclick = () => {\r\n handleConfirmation(false);\r\n this.removeToast(toast);\r\n };\r\n toast.appendChild(closeBtn);\r\n\r\n // Create icon wrapper\r\n const iconWrapper = document.createElement(\"div\");\r\n iconWrapper.className = \"toast-icon\";\r\n iconWrapper.innerHTML = this.getIconSVG('info'); // Default to info icon\r\n toast.appendChild(iconWrapper);\r\n\r\n // Create content wrapper\r\n const contentWrapper = document.createElement(\"div\");\r\n contentWrapper.className = \"toast-content\";\r\n \r\n // Main message\r\n const messageElement = document.createElement(\"div\");\r\n messageElement.className = \"toast-message\";\r\n messageElement.textContent = message.substring(0, this.defaultOptions.maxLength);\r\n contentWrapper.appendChild(messageElement);\r\n \r\n // Optional description\r\n if (description) {\r\n const descriptionElement = document.createElement(\"div\");\r\n descriptionElement.className = \"toast-description\";\r\n descriptionElement.textContent = description.substring(0, this.defaultOptions.maxLength * 2);\r\n contentWrapper.appendChild(descriptionElement);\r\n }\r\n \r\n toast.appendChild(contentWrapper);\r\n\r\n // Create action buttons container\r\n const actionsWrapper = document.createElement(\"div\");\r\n actionsWrapper.className = \"toast-actions\";\r\n\r\n // Cancel button\r\n const cancelBtn = document.createElement(\"button\");\r\n cancelBtn.className = \"toast-btn toast-btn-cancel\";\r\n cancelBtn.textContent = confirmOptions.cancelText;\r\n cancelBtn.onclick = () => {\r\n handleConfirmation(false);\r\n this.removeToast(toast);\r\n };\r\n\r\n // Confirm button\r\n const confirmBtn = document.createElement(\"button\");\r\n confirmBtn.className = `toast-btn toast-btn-confirm`;\r\n confirmBtn.textContent = confirmOptions.confirmText;\r\n confirmBtn.onclick = () => {\r\n handleConfirmation(true);\r\n this.removeToast(toast);\r\n };\r\n\r\n actionsWrapper.appendChild(cancelBtn);\r\n actionsWrapper.appendChild(confirmBtn);\r\n toast.appendChild(actionsWrapper);\r\n\r\n // Add toast to the specified container (not default container)\r\n confirmContainer.appendChild(toast);\r\n\r\n // Entrance animation\r\n setTimeout(() => {\r\n toast.classList.add(\"show\");\r\n const icon = toast.querySelector('.toast-icon');\r\n if (icon) {\r\n icon.style.animation = 'iconBounce 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275)';\r\n }\r\n }, 10);\r\n\r\n return toast;\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to create confirmation toast:', error);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Export for different environments\r\n * Supports CommonJS (Node.js), AMD, and browser globals\r\n */\r\n\r\n// CommonJS export (Node.js/npm)\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = ToastifyPro;\r\n}\r\n\r\n// ES6 module export\r\nif (typeof exports !== 'undefined') {\r\n exports.ToastifyPro = ToastifyPro;\r\n exports.default = ToastifyPro;\r\n}\r\n\r\n// AMD export (RequireJS)\r\nif (typeof define === 'function' && define.amd) {\r\n define(function() {\r\n return ToastifyPro;\r\n });\r\n}\r\n\r\n// Browser global\r\nif (typeof window !== 'undefined') {\r\n window.ToastifyPro = ToastifyPro;\r\n}\r\n"],"names":[],"mappings":"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,cAAc,CAAC,qBAAqB,CAAC,EAAE,OAAO;AAC/D;AACA,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,KAAK,CAAC,EAAE,GAAG,qBAAqB,CAAC;AACvC,MAAM,KAAK,CAAC,WAAW,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,CAAC;AACJ,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACvC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;AACpE,IAAI,CAAC;AACL,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;AAC1C;AACA,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACrC,MAAM,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;AACnF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAChC,IAAI,CAAC;AACL;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AACzB,MAAM,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;AAC3D,MAAM,OAAO;AACb,IAAI,CAAC;AACL;AACA;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,S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"}
|