toastify-pro 1.4.0 → 1.6.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/dist/toastify-pro.esm.js +728 -25
- package/dist/toastify-pro.esm.js.map +1 -1
- package/dist/toastify-pro.umd.js +728 -25
- package/dist/toastify-pro.umd.js.map +1 -1
- package/dist/toastify-pro.umd.min.js +10 -6
- package/dist/toastify-pro.umd.min.js.map +1 -1
- package/package.json +2 -2
- package/src/toastify-pro.js +728 -25
|
@@ -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 * - Confirmation dialogs with customizable buttons and callbacks\r\n * - Center position support for enhanced focus\r\n * - Independent positioning for confirmations\r\n * - Loading states for async operations\r\n * - Custom gradient colors with primaryColor/secondaryColor\r\n * - Single instance mode with shake animation\r\n * \r\n * @version 1.4.0\r\n * @author ToastifyPro Team\r\n * @license MIT\r\n */\r\n\r\n// Global active confirmation tracker (shared across all instances)\r\nlet globalActiveConfirmation = null;\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 @keyframes shake {\r\n 0%, 100% { transform: translate(0, 0); }\r\n 10%, 30%, 50%, 70%, 90% { transform: translate(-10px, 0); }\r\n 20%, 40%, 60%, 80% { transform: translate(10px, 0); }\r\n }\r\n \r\n @keyframes shakeCenter {\r\n 0%, 100% { transform: scale(1) translateX(0); }\r\n 10%, 30%, 50%, 70%, 90% { transform: scale(1) translateX(-10px); }\r\n 20%, 40%, 60%, 80% { transform: scale(1) translateX(10px); }\r\n }\r\n \r\n .toastify-pro.shake {\r\n animation: shake 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97) !important;\r\n }\r\n \r\n .toastify-pro-container.center .toastify-pro.shake {\r\n animation: shakeCenter 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97) !important;\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 @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\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 - Enhanced Modern Design */\r\n .toastify-pro.confirmation {\r\n min-width: 380px;\r\n max-width: 500px;\r\n padding: 32px 28px 28px;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 24px;\r\n position: relative;\r\n backdrop-filter: blur(24px) saturate(180%);\r\n box-shadow: \r\n 0 24px 48px -12px rgba(0, 0, 0, 0.25),\r\n 0 12px 24px -8px rgba(0, 0, 0, 0.15),\r\n 0 0 0 1px rgba(255, 255, 255, 0.08),\r\n inset 0 1px 0 0 rgba(255, 255, 255, 0.1);\r\n border: 1.5px solid rgba(255, 255, 255, 0.15);\r\n border-radius: 20px;\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 /* Shimmer effect for confirmation toasts */\r\n .toastify-pro.confirmation::before {\r\n opacity: 0.5;\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: 14px;\r\n right: 14px;\r\n cursor: pointer;\r\n font-size: 20px;\r\n color: inherit;\r\n opacity: 0.5;\r\n padding: 6px;\r\n border-radius: 8px;\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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.08);\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.12);\r\n }\r\n \r\n .toastify-pro.confirmation .conf-close-btn:hover { \r\n opacity: 0.9; \r\n background: rgba(255, 255, 255, 0.15);\r\n transform: scale(1.1) rotate(90deg);\r\n border-color: rgba(255, 255, 255, 0.25);\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn {\r\n background: rgba(15, 23, 42, 0.06);\r\n border-color: rgba(15, 23, 42, 0.12);\r\n opacity: 0.6;\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn:hover { \r\n background: rgba(15, 23, 42, 0.12);\r\n border-color: rgba(15, 23, 42, 0.2);\r\n opacity: 1;\r\n }\r\n\r\n /* Icon styling for confirmation */\r\n .toastify-pro.confirmation .toast-icon {\r\n width: 56px;\r\n height: 56px;\r\n margin: 0 auto 8px;\r\n background: rgba(255, 255, 255, 0.15);\r\n backdrop-filter: blur(12px);\r\n border: 2px solid rgba(255, 255, 255, 0.2);\r\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .toastify-pro.confirmation .toast-icon svg {\r\n width: 28px;\r\n height: 28px;\r\n }\r\n\r\n .toastify-pro.confirmation.light .toast-icon {\r\n background: rgba(15, 23, 42, 0.08);\r\n border-color: rgba(15, 23, 42, 0.15);\r\n }\r\n\r\n .toastify-pro.confirmation .toast-content {\r\n text-align: center;\r\n margin-bottom: 4px;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-message {\r\n font-weight: 700;\r\n font-size: 20px;\r\n margin-bottom: 8px;\r\n letter-spacing: -0.02em;\r\n line-height: 1.3;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-description {\r\n font-size: 15px;\r\n opacity: 0.85;\r\n margin-top: 8px;\r\n line-height: 1.5;\r\n font-weight: 400;\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: 14px;\r\n margin-top: 4px;\r\n }\r\n\r\n .toast-btn {\r\n flex: 1;\r\n padding: 14px 20px;\r\n border: none;\r\n border-radius: 12px;\r\n font-weight: 600;\r\n font-size: 15px;\r\n cursor: pointer;\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n backdrop-filter: blur(10px);\r\n position: relative;\r\n overflow: hidden;\r\n letter-spacing: 0.01em;\r\n }\r\n\r\n .toast-btn::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n width: 0;\r\n height: 0;\r\n border-radius: 50%;\r\n background: rgba(255, 255, 255, 0.3);\r\n transform: translate(-50%, -50%);\r\n transition: width 0.6s, height 0.6s;\r\n }\r\n\r\n .toast-btn:hover::after {\r\n width: 300px;\r\n height: 300px;\r\n }\r\n\r\n .toast-btn:hover {\r\n transform: translateY(-2px);\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);\r\n }\r\n\r\n .toast-btn:active {\r\n transform: translateY(0);\r\n transition: all 0.1s;\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.9);\r\n border: 1.5px solid rgba(255, 255, 255, 0.25);\r\n font-weight: 600;\r\n }\r\n\r\n .toast-btn-cancel:hover {\r\n background: rgba(255, 255, 255, 0.15);\r\n color: white;\r\n border-color: rgba(255, 255, 255, 0.35);\r\n }\r\n \r\n .toast-btn-cancel:disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n pointer-events: none;\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.4);\r\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);\r\n position: relative;\r\n overflow: hidden;\r\n background: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.95));\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.25), transparent);\r\n transition: left 0.6s;\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(255, 255, 255, 0.5);\r\n box-shadow: 0 8px 28px rgba(15, 23, 42, 0.5);\r\n }\r\n \r\n .toast-btn-confirm.loading {\r\n opacity: 0.7;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n \r\n .toast-btn-confirm .btn-spinner {\r\n display: none;\r\n width: 16px;\r\n height: 16px;\r\n border: 2px solid rgba(255, 255, 255, 0.3);\r\n border-top-color: white;\r\n border-radius: 50%;\r\n animation: spin 0.6s linear infinite;\r\n margin-right: 8px;\r\n }\r\n \r\n .toast-btn-confirm.loading .btn-spinner {\r\n display: inline-block;\r\n }\r\n \r\n .toast-btn-confirm.loading .btn-text {\r\n opacity: 0.7;\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.85);\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.35);\r\n background: linear-gradient(135deg, #1e293b 0%, #334155 100%);\r\n color: white;\r\n }\r\n\r\n .toastify-pro.light .toast-btn-confirm:hover {\r\n background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);\r\n border-color: rgba(15, 23, 42, 0.5);\r\n box-shadow: 0 8px 28px rgba(15, 23, 42, 0.3);\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 // Check if there's already an active confirmation (GLOBAL CHECK)\r\n if (globalActiveConfirmation && globalActiveConfirmation.element && globalActiveConfirmation.element.parentNode) {\r\n // Trigger shake animation on existing confirmation toast element\r\n const existingToast = globalActiveConfirmation.element;\r\n existingToast.classList.remove('shake');\r\n // Force reflow to restart animation\r\n void existingToast.offsetWidth;\r\n existingToast.classList.add('shake');\r\n \r\n // Remove shake class after animation completes\r\n setTimeout(() => {\r\n if (existingToast && existingToast.parentNode) {\r\n existingToast.classList.remove('shake');\r\n }\r\n }, 600);\r\n \r\n return globalActiveConfirmation;\r\n }\r\n \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 primaryColor: options.primaryColor || null,\r\n secondaryColor: options.secondaryColor || null,\r\n loading: options.loading || false, // Support external loading state (for React/Vue)\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 // Helper function to determine if a color is light or dark\r\n const isLightColor = (color) => {\r\n if (!color) return false;\r\n const hex = color.replace('#', '');\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n const brightness = ((r * 299) + (g * 587) + (b * 114)) / 1000;\r\n return brightness > 155;\r\n };\r\n\r\n // Determine text color based on background\r\n let textColor = confirmOptions.theme === 'light' ? '#1e293b' : 'white';\r\n if (confirmOptions.primaryColor) {\r\n textColor = isLightColor(confirmOptions.primaryColor) ? '#1e293b' : 'white';\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 // Create control functions for loading state\r\n let confirmBtnElement = null;\r\n let cancelBtnElement = null;\r\n let closeBtnElement = null;\r\n let isLoading = false;\r\n let useLoading = false; // Track if user wants loading behavior\r\n let toastElement = null; // Reference to toast element\r\n \r\n const setLoading = (loading) => {\r\n useLoading = true; // User is manually controlling loading\r\n isLoading = loading;\r\n if (confirmBtnElement) {\r\n if (loading) {\r\n confirmBtnElement.classList.add('loading');\r\n confirmBtnElement.disabled = true;\r\n } else {\r\n confirmBtnElement.classList.remove('loading');\r\n confirmBtnElement.disabled = false;\r\n }\r\n }\r\n // Disable/enable cancel and close buttons during loading\r\n if (cancelBtnElement) {\r\n cancelBtnElement.disabled = loading;\r\n cancelBtnElement.style.opacity = loading ? '0.5' : '1';\r\n cancelBtnElement.style.cursor = loading ? 'not-allowed' : 'pointer';\r\n }\r\n if (closeBtnElement) {\r\n closeBtnElement.style.opacity = loading ? '0.3' : '0.5';\r\n closeBtnElement.style.cursor = loading ? 'not-allowed' : 'pointer';\r\n closeBtnElement.style.pointerEvents = loading ? 'none' : 'auto';\r\n }\r\n };\r\n \r\n const closeConfirmation = () => {\r\n if (toastElement && toastElement.parentNode) {\r\n globalActiveConfirmation = null;\r\n this.removeToast(toastElement);\r\n }\r\n };\r\n \r\n // Helper function to handle confirmation result\r\n const handleConfirmation = async (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 const result = options.onConfirm({ setLoading, close: closeConfirmation });\r\n // Check if it's a promise\r\n if (result && typeof result.then === 'function') {\r\n // If user didn't manually set loading, auto-set it\r\n if (!useLoading) {\r\n setLoading(true);\r\n }\r\n await result;\r\n // Auto-close after promise resolves if user didn't manually close\r\n if (toastElement && toastElement.parentNode) {\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n // Synchronous callback - only close if user didn't start loading\r\n if (!useLoading) {\r\n closeConfirmation();\r\n }\r\n }\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in onConfirm callback:', error);\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n }\r\n // Call unified callback if provided\r\n else if (resultCallback && typeof resultCallback === 'function') {\r\n try {\r\n const result = resultCallback(true, { setLoading, close: closeConfirmation });\r\n if (result && typeof result.then === 'function') {\r\n if (!useLoading) {\r\n setLoading(true);\r\n }\r\n await result;\r\n if (toastElement && toastElement.parentNode) {\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n if (!useLoading) {\r\n closeConfirmation();\r\n }\r\n }\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in confirmation callback:', error);\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n // No callback - just close\r\n closeConfirmation();\r\n }\r\n } else {\r\n // Cancel - no loading needed, check if not currently loading\r\n if (isLoading) return; // Don't allow cancel while loading\r\n \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 closeConfirmation();\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 // Store reference to toast element\r\n toastElement = toast;\r\n\r\n // Apply custom colors if provided\r\n if (confirmOptions.primaryColor) {\r\n const primary = confirmOptions.primaryColor;\r\n const secondary = confirmOptions.secondaryColor;\r\n \r\n if (secondary) {\r\n // Both colors provided - create gradient\r\n toast.style.background = `linear-gradient(135deg, ${primary} 0%, ${secondary} 100%)`;\r\n } else {\r\n // Only primary color - solid with slight transparency\r\n toast.style.background = primary;\r\n }\r\n \r\n // Set text color based on background brightness\r\n toast.style.color = textColor;\r\n \r\n // Adjust border color to match\r\n const borderOpacity = isLightColor(primary) ? '0.2' : '0.15';\r\n toast.style.borderColor = `rgba(255, 255, 255, ${borderOpacity})`;\r\n }\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 if (!isLoading) {\r\n handleConfirmation(false);\r\n }\r\n };\r\n if (confirmOptions.primaryColor) {\r\n closeBtn.style.color = textColor;\r\n }\r\n closeBtnElement = closeBtn;\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 if (confirmOptions.primaryColor) {\r\n iconWrapper.style.color = textColor;\r\n }\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 if (confirmOptions.primaryColor) {\r\n messageElement.style.color = textColor;\r\n }\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 if (confirmOptions.primaryColor) {\r\n descriptionElement.style.color = textColor;\r\n }\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 if (!isLoading) {\r\n handleConfirmation(false);\r\n }\r\n };\r\n \r\n // Store cancel button reference\r\n cancelBtnElement = cancelBtn;\r\n \r\n // Style cancel button with custom colors\r\n if (confirmOptions.primaryColor) {\r\n const isLight = isLightColor(confirmOptions.primaryColor);\r\n cancelBtn.style.background = isLight ? 'rgba(15, 23, 42, 0.08)' : 'rgba(255, 255, 255, 0.1)';\r\n cancelBtn.style.color = textColor;\r\n cancelBtn.style.borderColor = isLight ? 'rgba(15, 23, 42, 0.2)' : 'rgba(255, 255, 255, 0.25)';\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 \r\n // Create spinner element\r\n const spinner = document.createElement(\"span\");\r\n spinner.className = \"btn-spinner\";\r\n confirmBtn.appendChild(spinner);\r\n \r\n // Create text wrapper\r\n const textWrapper = document.createElement(\"span\");\r\n textWrapper.className = \"btn-text\";\r\n textWrapper.textContent = confirmOptions.confirmText;\r\n confirmBtn.appendChild(textWrapper);\r\n \r\n confirmBtn.onclick = () => {\r\n if (!isLoading) {\r\n handleConfirmation(true);\r\n }\r\n };\r\n \r\n // Store reference for loading state control\r\n confirmBtnElement = confirmBtn;\r\n \r\n // Style confirm button with custom colors\r\n if (confirmOptions.primaryColor) {\r\n const primary = confirmOptions.primaryColor;\r\n const secondary = confirmOptions.secondaryColor;\r\n const isLight = isLightColor(primary);\r\n \r\n if (secondary) {\r\n // Gradient confirm button\r\n confirmBtn.style.background = `linear-gradient(135deg, ${primary} 0%, ${secondary} 100%)`;\r\n } else {\r\n // Solid color confirm button with enhanced styling\r\n confirmBtn.style.background = primary;\r\n }\r\n \r\n // Determine button text color (always use contrasting color for readability)\r\n confirmBtn.style.color = isLight ? '#1e293b' : 'white';\r\n confirmBtn.style.borderColor = isLight ? 'rgba(15, 23, 42, 0.3)' : 'rgba(255, 255, 255, 0.4)';\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 // Create control object\r\n const controlObject = {\r\n element: toast,\r\n setLoading: setLoading,\r\n close: closeConfirmation\r\n };\r\n \r\n // Store as global active confirmation (with control object)\r\n globalActiveConfirmation = controlObject;\r\n \r\n // Apply initial loading state if provided (for React/Vue)\r\n if (confirmOptions.loading) {\r\n setLoading(true);\r\n }\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 control object with toast element and control functions\r\n return controlObject;\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 * Alias for conf() method - shows a confirmation toast\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 confirm(message, descriptionOrCallback, callback) {\r\n return this.conf(message, descriptionOrCallback, callback);\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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CA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB;AACA,IAAI,IAAI,QAAQ,CAAC,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,CAA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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 * - Custom color toasts with gradient support (custom method)\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 * - Confirmation overlay with blur effect for focus\r\n * - Center position support for enhanced focus\r\n * - Independent positioning for confirmations\r\n * - Action buttons in toasts with customizable callbacks\r\n * - Pause on hover functionality\r\n * - Queue management (maxToasts, newestOnTop)\r\n * - Full accessibility support (ARIA, keyboard navigation, reduced motion)\r\n * - Focus management for confirmation dialogs\r\n * \r\n * @version 1.6.0\r\n * @author ToastifyPro Team\r\n * @license MIT\r\n */\r\n\r\n// Global active confirmation tracker (shared across all instances)\r\nlet globalActiveConfirmation = null;\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 * @param {string} options.primaryColor - Primary color for custom() method\r\n * @param {string} options.secondaryColor - Secondary color for gradient in custom() method\r\n * @param {boolean} options.pauseOnHover - Pause timeout when hovering over toast (default: true)\r\n * @param {number} options.maxToasts - Maximum number of visible toasts (0 for unlimited)\r\n * @param {boolean} options.newestOnTop - Show newest toasts on top (default: true)\r\n * @param {boolean} options.ariaLive - ARIA live region setting: 'polite' or 'assertive' (default: 'polite')\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 primaryColor: options.primaryColor || null, // Custom primary color for custom() method\r\n secondaryColor: options.secondaryColor || null, // Custom secondary color for gradient\r\n pauseOnHover: options.pauseOnHover !== false, // default true - pause timeout on hover\r\n maxToasts: options.maxToasts || 0, // 0 = unlimited\r\n newestOnTop: options.newestOnTop !== false, // default true\r\n ariaLive: options.ariaLive || 'polite', // 'polite' or 'assertive'\r\n };\r\n \r\n // Track active toasts for queue management\r\n this.activeToasts = [];\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 // Setup global keyboard event listener for accessibility\r\n this.setupKeyboardNavigation();\r\n }\r\n \r\n /**\r\n * Sets up keyboard navigation for accessibility\r\n * - Escape key dismisses the most recent toast or confirmation\r\n * - Tab key cycles through focusable elements in confirmations\r\n */\r\n setupKeyboardNavigation() {\r\n // Only setup once globally\r\n if (window._toastifyProKeyboardSetup) return;\r\n window._toastifyProKeyboardSetup = true;\r\n \r\n document.addEventListener('keydown', (e) => {\r\n // Escape key - dismiss toast or confirmation\r\n if (e.key === 'Escape') {\r\n // First check for active confirmation\r\n if (globalActiveConfirmation && globalActiveConfirmation.element) {\r\n const loadingBtn = globalActiveConfirmation.element.querySelector('.toast-btn-confirm.loading');\r\n if (!loadingBtn) {\r\n globalActiveConfirmation.close();\r\n }\r\n return;\r\n }\r\n \r\n // Otherwise dismiss the most recent toast\r\n const containers = document.querySelectorAll('.toastify-pro-container');\r\n containers.forEach(container => {\r\n const toasts = container.querySelectorAll('.toastify-pro:not(.confirmation)');\r\n if (toasts.length > 0) {\r\n const lastToast = toasts[toasts.length - 1];\r\n if (lastToast && lastToast._toastInstance) {\r\n lastToast._toastInstance.removeToast(lastToast);\r\n }\r\n }\r\n });\r\n }\r\n });\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 @keyframes shake {\r\n 0%, 100% { transform: translate(0, 0); }\r\n 10%, 30%, 50%, 70%, 90% { transform: translate(-10px, 0); }\r\n 20%, 40%, 60%, 80% { transform: translate(10px, 0); }\r\n }\r\n \r\n @keyframes shakeCenter {\r\n 0%, 100% { transform: scale(1) translateX(0); }\r\n 10%, 30%, 50%, 70%, 90% { transform: scale(1) translateX(-10px); }\r\n 20%, 40%, 60%, 80% { transform: scale(1) translateX(10px); }\r\n }\r\n \r\n .toastify-pro.shake {\r\n animation: shake 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97) !important;\r\n }\r\n \r\n .toastify-pro-container.center .toastify-pro.shake {\r\n animation: shakeCenter 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97) !important;\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 @keyframes spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\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 border: none;\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 - Enhanced Modern Design */\r\n .toastify-pro.confirmation {\r\n min-width: 380px;\r\n max-width: 500px;\r\n padding: 32px 28px 28px;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: 24px;\r\n position: relative;\r\n backdrop-filter: blur(24px) saturate(180%);\r\n box-shadow: \r\n 0 24px 48px -12px rgba(0, 0, 0, 0.25),\r\n 0 12px 24px -8px rgba(0, 0, 0, 0.15),\r\n 0 0 0 1px rgba(255, 255, 255, 0.08),\r\n inset 0 1px 0 0 rgba(255, 255, 255, 0.1);\r\n border: 1.5px solid rgba(255, 255, 255, 0.15);\r\n border-radius: 20px;\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 /* Shimmer effect for confirmation toasts */\r\n .toastify-pro.confirmation::before {\r\n opacity: 0.5;\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: 14px;\r\n right: 14px;\r\n cursor: pointer;\r\n font-size: 20px;\r\n color: inherit;\r\n opacity: 0.5;\r\n padding: 6px;\r\n border-radius: 8px;\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\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.08);\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.12);\r\n }\r\n \r\n .toastify-pro.confirmation .conf-close-btn:hover { \r\n opacity: 0.9; \r\n background: rgba(255, 255, 255, 0.15);\r\n transform: scale(1.1) rotate(90deg);\r\n border-color: rgba(255, 255, 255, 0.25);\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn {\r\n background: rgba(15, 23, 42, 0.06);\r\n border-color: rgba(15, 23, 42, 0.12);\r\n opacity: 0.6;\r\n }\r\n \r\n .toastify-pro.confirmation.light .conf-close-btn:hover { \r\n background: rgba(15, 23, 42, 0.12);\r\n border-color: rgba(15, 23, 42, 0.2);\r\n opacity: 1;\r\n }\r\n\r\n /* Icon styling for confirmation */\r\n .toastify-pro.confirmation .toast-icon {\r\n width: 56px;\r\n height: 56px;\r\n margin: 0 auto 8px;\r\n background: rgba(255, 255, 255, 0.15);\r\n backdrop-filter: blur(12px);\r\n border: 2px solid rgba(255, 255, 255, 0.2);\r\n box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);\r\n }\r\n\r\n .toastify-pro.confirmation .toast-icon svg {\r\n width: 28px;\r\n height: 28px;\r\n }\r\n\r\n .toastify-pro.confirmation.light .toast-icon {\r\n background: rgba(15, 23, 42, 0.08);\r\n border-color: rgba(15, 23, 42, 0.15);\r\n }\r\n\r\n .toastify-pro.confirmation .toast-content {\r\n text-align: center;\r\n margin-bottom: 4px;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-message {\r\n font-weight: 700;\r\n font-size: 20px;\r\n margin-bottom: 8px;\r\n letter-spacing: -0.02em;\r\n line-height: 1.3;\r\n }\r\n\r\n .toastify-pro.confirmation .toast-description {\r\n font-size: 15px;\r\n opacity: 0.85;\r\n margin-top: 8px;\r\n line-height: 1.5;\r\n font-weight: 400;\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: 14px;\r\n margin-top: 4px;\r\n }\r\n\r\n .toast-btn {\r\n flex: 1;\r\n padding: 14px 20px;\r\n border: none;\r\n border-radius: 12px;\r\n font-weight: 600;\r\n font-size: 15px;\r\n cursor: pointer;\r\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n backdrop-filter: blur(10px);\r\n position: relative;\r\n overflow: hidden;\r\n letter-spacing: 0.01em;\r\n }\r\n\r\n .toast-btn::after {\r\n content: '';\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n width: 0;\r\n height: 0;\r\n border-radius: 50%;\r\n background: rgba(255, 255, 255, 0.3);\r\n transform: translate(-50%, -50%);\r\n transition: width 0.6s, height 0.6s;\r\n }\r\n\r\n .toast-btn:hover::after {\r\n width: 300px;\r\n height: 300px;\r\n }\r\n\r\n .toast-btn:hover {\r\n transform: translateY(-2px);\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);\r\n }\r\n\r\n .toast-btn:active {\r\n transform: translateY(0);\r\n transition: all 0.1s;\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.9);\r\n border: 1.5px solid rgba(255, 255, 255, 0.25);\r\n font-weight: 600;\r\n }\r\n\r\n .toast-btn-cancel:hover {\r\n background: rgba(255, 255, 255, 0.15);\r\n color: white;\r\n border-color: rgba(255, 255, 255, 0.35);\r\n }\r\n \r\n .toast-btn-cancel:disabled {\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n\r\n .toast-btn-confirm {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: white;\r\n font-weight: 700;\r\n border: 2px solid rgba(255, 255, 255, 0.4);\r\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);\r\n position: relative;\r\n overflow: hidden;\r\n background: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 41, 59, 0.95));\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.25), transparent);\r\n transition: left 0.6s;\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(255, 255, 255, 0.5);\r\n box-shadow: 0 8px 28px rgba(15, 23, 42, 0.5);\r\n }\r\n \r\n .toast-btn-confirm.loading {\r\n opacity: 0.7;\r\n cursor: not-allowed;\r\n pointer-events: none;\r\n }\r\n \r\n .toast-btn-confirm .btn-spinner {\r\n display: none;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n }\r\n \r\n .toast-btn-confirm .btn-spinner svg {\r\n width: 25px;\r\n height: 25px;\r\n animation: spin 1s linear infinite;\r\n color: currentColor;\r\n }\r\n \r\n .toast-btn-confirm.loading .btn-spinner {\r\n display: inline-flex;\r\n }\r\n \r\n .toast-btn-confirm.loading .btn-text {\r\n opacity: 0.7;\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.85);\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.35);\r\n background: linear-gradient(135deg, #1e293b 0%, #334155 100%);\r\n color: white;\r\n }\r\n\r\n .toastify-pro.light .toast-btn-confirm:hover {\r\n background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);\r\n border-color: rgba(15, 23, 42, 0.5);\r\n box-shadow: 0 8px 28px rgba(15, 23, 42, 0.3);\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 /* Custom toast type */\r\n .toastify-pro.custom {\r\n border-color: rgba(255, 255, 255, 0.2);\r\n }\r\n \r\n .toastify-pro.custom.light-text {\r\n color: #1e293b;\r\n }\r\n \r\n .toastify-pro.custom.light-text .toast-icon {\r\n background: rgba(15, 23, 42, 0.1);\r\n }\r\n \r\n .toastify-pro.custom.light-text .close-btn {\r\n background: rgba(15, 23, 42, 0.08);\r\n }\r\n \r\n .toastify-pro.custom.light-text .close-btn:hover {\r\n background: rgba(15, 23, 42, 0.15);\r\n }\r\n \r\n .toastify-pro.custom.light-text::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.custom.light-text::after {\r\n background: rgba(30, 41, 59, 0.6);\r\n }\r\n \r\n /* Confirmation Overlay */\r\n .toastify-pro-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(0, 0, 0, 0.5);\r\n backdrop-filter: blur(8px);\r\n -webkit-backdrop-filter: blur(8px);\r\n z-index: 9998;\r\n opacity: 0;\r\n transition: opacity 0.3s ease;\r\n pointer-events: auto;\r\n }\r\n \r\n .toastify-pro-overlay.show {\r\n opacity: 1;\r\n }\r\n \r\n /* Action Button Styles */\r\n .toastify-pro .toast-action {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 6px 12px;\r\n margin-top: 8px;\r\n border: none;\r\n border-radius: 8px;\r\n font-weight: 600;\r\n font-size: 13px;\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n background: rgba(255, 255, 255, 0.2);\r\n color: inherit;\r\n backdrop-filter: blur(10px);\r\n }\r\n \r\n .toastify-pro .toast-action:hover {\r\n background: rgba(255, 255, 255, 0.3);\r\n transform: translateY(-1px);\r\n }\r\n \r\n .toastify-pro .toast-action:active {\r\n transform: translateY(0);\r\n }\r\n \r\n .toastify-pro.light .toast-action {\r\n background: rgba(15, 23, 42, 0.1);\r\n }\r\n \r\n .toastify-pro.light .toast-action:hover {\r\n background: rgba(15, 23, 42, 0.15);\r\n }\r\n \r\n /* Paused state - pause progress bar */\r\n .toastify-pro.paused::after {\r\n animation-play-state: paused;\r\n }\r\n \r\n /* Focus styles for accessibility */\r\n .toastify-pro .close-btn:focus,\r\n .toastify-pro .toast-action:focus,\r\n .toast-btn:focus {\r\n outline: 1px solid rgba(255, 255, 255, 0.8);\r\n }\r\n \r\n .toastify-pro.light .close-btn:focus,\r\n .toastify-pro.light .toast-action:focus {\r\n outline-color: 1px solid rgba(15, 23, 42, 0.5);\r\n }\r\n \r\n /* Screen reader only class */\r\n .sr-only {\r\n position: absolute;\r\n width: 1px;\r\n height: 1px;\r\n padding: 0;\r\n margin: -1px;\r\n overflow: hidden;\r\n clip: rect(0, 0, 0, 0);\r\n white-space: nowrap;\r\n border: 0;\r\n }\r\n \r\n /* Reduced motion support */\r\n @media (prefers-reduced-motion: reduce) {\r\n .toastify-pro {\r\n transition: opacity 0.3s ease;\r\n transform: none !important;\r\n }\r\n \r\n .toastify-pro.show {\r\n animation: none !important;\r\n opacity: 1;\r\n transform: none !important;\r\n }\r\n \r\n .toastify-pro .toast-icon {\r\n animation: none !important;\r\n }\r\n \r\n .toastify-pro::before {\r\n animation: none !important;\r\n }\r\n \r\n .toastify-pro::after {\r\n animation: progress var(--duration, 5s) linear !important;\r\n }\r\n \r\n .toastify-pro-overlay {\r\n transition: opacity 0.2s ease;\r\n }\r\n \r\n .toast-btn::after {\r\n display: none;\r\n }\r\n \r\n .toast-btn:hover {\r\n transform: none;\r\n }\r\n \r\n .toastify-pro.confirmation .conf-close-btn:hover {\r\n transform: scale(1.05);\r\n }\r\n \r\n .btn-spinner svg {\r\n animation: spin 1.5s linear infinite !important;\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 * @param {Object} opts.action - Action button configuration { label, onClick }\r\n * @param {boolean} opts.pauseOnHover - Pause timeout on hover\r\n * @param {string} opts.ariaLive - ARIA live region type ('polite' or 'assertive')\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 // Queue management - remove oldest toasts if limit exceeded\r\n if (options.maxToasts > 0 && this.activeToasts.length >= options.maxToasts) {\r\n const toastsToRemove = this.activeToasts.length - options.maxToasts + 1;\r\n for (let i = 0; i < toastsToRemove; i++) {\r\n const oldestToast = this.activeToasts.shift();\r\n if (oldestToast && oldestToast.element) {\r\n this.removeToast(oldestToast.element);\r\n }\r\n }\r\n }\r\n \r\n // Create toast element\r\n const toast = document.createElement(\"div\");\r\n toast.className = `toastify-pro ${type}`;\r\n \r\n // Store reference to this instance for keyboard navigation\r\n toast._toastInstance = this;\r\n \r\n // ARIA accessibility attributes\r\n const ariaLive = type === 'error' || type === 'warning' ? 'assertive' : (options.ariaLive || 'polite');\r\n toast.setAttribute('role', type === 'error' ? 'alert' : 'status');\r\n toast.setAttribute('aria-live', ariaLive);\r\n toast.setAttribute('aria-atomic', 'true');\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.setAttribute('aria-hidden', 'true');\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 // Action button support\r\n if (options.action && typeof options.action === 'object') {\r\n const actionBtn = document.createElement(\"button\");\r\n actionBtn.className = \"toast-action\";\r\n actionBtn.textContent = options.action.label || 'Action';\r\n actionBtn.setAttribute('type', 'button');\r\n if (typeof options.action.onClick === 'function') {\r\n actionBtn.onclick = (e) => {\r\n e.stopPropagation();\r\n options.action.onClick({ close: () => this.removeToast(toast), event: e });\r\n };\r\n }\r\n contentWrapper.appendChild(actionBtn);\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(\"button\");\r\n closeBtn.className = \"close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('type', 'button');\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 (respect newestOnTop setting)\r\n if (options.newestOnTop && this.container.firstChild) {\r\n this.container.insertBefore(toast, this.container.firstChild);\r\n } else {\r\n this.container.appendChild(toast);\r\n }\r\n \r\n // Track toast for queue management\r\n const toastData = {\r\n element: toast,\r\n timeout: null,\r\n remainingTime: options.timeout,\r\n startTime: null,\r\n isPaused: false\r\n };\r\n this.activeToasts.push(toastData);\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 // Pause on hover functionality\r\n if (options.pauseOnHover && options.timeout > 0) {\r\n toast.addEventListener('mouseenter', () => {\r\n if (toastData.timeout) {\r\n clearTimeout(toastData.timeout);\r\n toastData.isPaused = true;\r\n toastData.remainingTime -= (Date.now() - toastData.startTime);\r\n toast.classList.add('paused');\r\n }\r\n });\r\n \r\n toast.addEventListener('mouseleave', () => {\r\n if (toastData.isPaused && toastData.remainingTime > 0) {\r\n toastData.isPaused = false;\r\n toastData.startTime = Date.now();\r\n toast.classList.remove('paused');\r\n // Update CSS variable for remaining progress\r\n toast.style.setProperty('--duration', `${toastData.remainingTime}ms`);\r\n // Restart the progress animation\r\n const afterElement = toast.querySelector('::after');\r\n toast.style.animation = 'none';\r\n void toast.offsetHeight; // Force reflow\r\n toast.style.animation = '';\r\n \r\n toastData.timeout = setTimeout(() => this.removeToast(toast), toastData.remainingTime);\r\n }\r\n });\r\n }\r\n\r\n // Auto-remove after timeout\r\n if (options.timeout > 0) {\r\n toastData.startTime = Date.now();\r\n toastData.timeout = setTimeout(() => this.removeToast(toast), options.timeout);\r\n }\r\n\r\n // Return toast control object\r\n return {\r\n element: toast,\r\n dismiss: () => this.removeToast(toast),\r\n update: (newMessage, newOpts) => this.updateToast(toast, newMessage, newOpts)\r\n };\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to create toast:', error);\r\n }\r\n }\r\n \r\n /**\r\n * Updates an existing toast's content\r\n * @param {HTMLElement} toast - Toast element to update\r\n * @param {string} message - New message text\r\n * @param {Object} opts - Options to update\r\n */\r\n updateToast(toast, message, opts = {}) {\r\n if (!toast || !toast.parentNode) return;\r\n \r\n const messageEl = toast.querySelector('.toast-message');\r\n const descEl = toast.querySelector('.toast-description');\r\n \r\n if (message && messageEl) {\r\n messageEl.textContent = message;\r\n }\r\n \r\n if (opts.description && descEl) {\r\n descEl.textContent = opts.description;\r\n } else if (opts.description) {\r\n const descriptionElement = document.createElement(\"div\");\r\n descriptionElement.className = \"toast-description\";\r\n descriptionElement.textContent = opts.description;\r\n toast.querySelector('.toast-content')?.appendChild(descriptionElement);\r\n }\r\n \r\n // Update type/style if provided\r\n if (opts.type) {\r\n const validTypes = ['success', 'error', 'info', 'warning', 'dark', 'light'];\r\n if (validTypes.includes(opts.type)) {\r\n validTypes.forEach(t => toast.classList.remove(t));\r\n toast.classList.add(opts.type);\r\n const iconWrapper = toast.querySelector('.toast-icon');\r\n if (iconWrapper) {\r\n iconWrapper.innerHTML = this.getIconSVG(opts.type);\r\n }\r\n }\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 // Remove from active toasts tracking\r\n const toastIndex = this.activeToasts.findIndex(t => t.element === toast);\r\n if (toastIndex > -1) {\r\n const toastData = this.activeToasts[toastIndex];\r\n if (toastData.timeout) {\r\n clearTimeout(toastData.timeout);\r\n }\r\n this.activeToasts.splice(toastIndex, 1);\r\n }\r\n \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 * Dismisses all active toasts\r\n * @param {string} type - Optional: only dismiss toasts of this type\r\n */\r\n dismissAll(type = null) {\r\n const toastsCopy = [...this.activeToasts];\r\n toastsCopy.forEach(toastData => {\r\n if (toastData.element) {\r\n if (type) {\r\n if (toastData.element.classList.contains(type)) {\r\n this.removeToast(toastData.element);\r\n }\r\n } else {\r\n this.removeToast(toastData.element);\r\n }\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Gets the count of active toasts\r\n * @returns {number} Number of active toasts\r\n */\r\n getActiveCount() {\r\n return this.activeToasts.length;\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 custom-colored toast notification with gradient support\r\n * @param {string} msg - Main message\r\n * @param {string|Object} opts - Description string or options object\r\n * @param {string} opts.primaryColor - Primary color for the toast\r\n * @param {string} opts.secondaryColor - Secondary color for gradient (optional)\r\n */\r\n custom(msg, opts) {\r\n if (typeof opts === 'string') {\r\n opts = { description: opts };\r\n }\r\n \r\n opts = opts || {};\r\n \r\n // Get colors from options or use default options\r\n const primaryColor = opts.primaryColor || this.defaultOptions.primaryColor;\r\n const secondaryColor = opts.secondaryColor || this.defaultOptions.secondaryColor;\r\n \r\n // If no custom colors provided, fallback to success style\r\n if (!primaryColor) {\r\n return this.success(msg, opts);\r\n }\r\n \r\n // Helper function to determine if a color is light\r\n const isLightColor = (color) => {\r\n if (!color) return false;\r\n const hex = color.replace('#', '');\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n const brightness = ((r * 299) + (g * 587) + (b * 114)) / 1000;\r\n return brightness > 155;\r\n };\r\n \r\n // Helper function to lighten or darken a color\r\n const adjustColor = (color, percent) => {\r\n const hex = color.replace('#', '');\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n \r\n const adjust = (c) => {\r\n const adjusted = Math.round(c + (percent / 100) * (percent > 0 ? (255 - c) : c));\r\n return Math.max(0, Math.min(255, adjusted));\r\n };\r\n \r\n const newR = adjust(r).toString(16).padStart(2, '0');\r\n const newG = adjust(g).toString(16).padStart(2, '0');\r\n const newB = adjust(b).toString(16).padStart(2, '0');\r\n \r\n return `#${newR}${newG}${newB}`;\r\n };\r\n \r\n // Determine gradient colors\r\n let gradientStart = primaryColor;\r\n let gradientEnd;\r\n \r\n if (secondaryColor) {\r\n // Both colors provided\r\n gradientEnd = secondaryColor;\r\n } else {\r\n // Only primary color - create gradient with lighter/darker shade\r\n const isLight = isLightColor(primaryColor);\r\n gradientEnd = isLight ? adjustColor(primaryColor, -25) : adjustColor(primaryColor, 25);\r\n }\r\n \r\n // Determine text color\r\n const needsLightText = isLightColor(primaryColor);\r\n \r\n // Create custom options\r\n const customOpts = {\r\n ...opts,\r\n customGradient: `linear-gradient(135deg, ${gradientStart} 0%, ${gradientEnd} 100%)`,\r\n customTextLight: needsLightText\r\n };\r\n \r\n this.showCustom(msg, customOpts);\r\n }\r\n\r\n /**\r\n * Internal method to show a custom-styled toast\r\n * @param {string} message - Main message text\r\n * @param {Object} opts - Options including customGradient and customTextLight\r\n */\r\n showCustom(message, opts = {}) {\r\n if (typeof message !== '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 const options = { ...this.defaultOptions, ...opts };\r\n\r\n try {\r\n const toast = document.createElement(\"div\");\r\n toast.className = `toastify-pro custom${options.customTextLight ? ' light-text' : ''}`;\r\n \r\n // Store reference to this instance\r\n toast._toastInstance = this;\r\n \r\n // ARIA accessibility attributes\r\n toast.setAttribute('role', 'status');\r\n toast.setAttribute('aria-live', options.ariaLive || 'polite');\r\n toast.setAttribute('aria-atomic', 'true');\r\n \r\n // Apply custom gradient\r\n if (options.customGradient) {\r\n toast.style.background = options.customGradient;\r\n }\r\n \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.setAttribute('aria-hidden', 'true');\r\n iconWrapper.innerHTML = this.getIconSVG('success'); // Use success icon for custom\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 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 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 if (options.allowClose) {\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.className = \"close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('type', 'button');\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 (respect newestOnTop setting)\r\n if (options.newestOnTop && this.container.firstChild) {\r\n this.container.insertBefore(toast, this.container.firstChild);\r\n } else {\r\n this.container.appendChild(toast);\r\n }\r\n \r\n // Track toast for queue management\r\n const toastData = {\r\n element: toast,\r\n timeout: null,\r\n remainingTime: options.timeout,\r\n startTime: null,\r\n isPaused: false\r\n };\r\n this.activeToasts.push(toastData);\r\n\r\n // Pause on hover functionality\r\n if (options.pauseOnHover && options.timeout > 0) {\r\n toast.addEventListener('mouseenter', () => {\r\n if (toastData.timeout) {\r\n clearTimeout(toastData.timeout);\r\n toastData.isPaused = true;\r\n toastData.remainingTime -= (Date.now() - toastData.startTime);\r\n toast.classList.add('paused');\r\n }\r\n });\r\n \r\n toast.addEventListener('mouseleave', () => {\r\n if (toastData.isPaused && toastData.remainingTime > 0) {\r\n toastData.isPaused = false;\r\n toastData.startTime = Date.now();\r\n toast.classList.remove('paused');\r\n toast.style.setProperty('--duration', `${toastData.remainingTime}ms`);\r\n toastData.timeout = setTimeout(() => this.removeToast(toast), toastData.remainingTime);\r\n }\r\n });\r\n }\r\n\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 if (options.timeout > 0) {\r\n toastData.startTime = Date.now();\r\n toastData.timeout = setTimeout(() => this.removeToast(toast), options.timeout);\r\n }\r\n\r\n return {\r\n element: toast,\r\n dismiss: () => this.removeToast(toast),\r\n update: (newMessage, newOpts) => this.updateToast(toast, newMessage, newOpts)\r\n };\r\n } catch (error) {\r\n console.error('ToastifyPro: Failed to create custom toast:', error);\r\n }\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 // Check if there's already an active confirmation (GLOBAL CHECK)\r\n if (globalActiveConfirmation && globalActiveConfirmation.element && globalActiveConfirmation.element.parentNode) {\r\n // Trigger shake animation on existing confirmation toast element\r\n const existingToast = globalActiveConfirmation.element;\r\n existingToast.classList.remove('shake');\r\n // Force reflow to restart animation\r\n void existingToast.offsetWidth;\r\n existingToast.classList.add('shake');\r\n \r\n // Remove shake class after animation completes\r\n setTimeout(() => {\r\n if (existingToast && existingToast.parentNode) {\r\n existingToast.classList.remove('shake');\r\n }\r\n }, 600);\r\n \r\n return globalActiveConfirmation;\r\n }\r\n \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 primaryColor: options.primaryColor || null,\r\n secondaryColor: options.secondaryColor || null,\r\n loading: options.loading || false, // Support external loading state (for React/Vue)\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 // Helper function to determine if a color is light or dark\r\n const isLightColor = (color) => {\r\n if (!color) return false;\r\n const hex = color.replace('#', '');\r\n const r = parseInt(hex.substr(0, 2), 16);\r\n const g = parseInt(hex.substr(2, 2), 16);\r\n const b = parseInt(hex.substr(4, 2), 16);\r\n const brightness = ((r * 299) + (g * 587) + (b * 114)) / 1000;\r\n return brightness > 155;\r\n };\r\n\r\n // Determine text color based on background\r\n let textColor = confirmOptions.theme === 'light' ? '#1e293b' : 'white';\r\n if (confirmOptions.primaryColor) {\r\n textColor = isLightColor(confirmOptions.primaryColor) ? '#1e293b' : 'white';\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 // Create control functions for loading state\r\n let confirmBtnElement = null;\r\n let cancelBtnElement = null;\r\n let closeBtnElement = null;\r\n let isLoading = false;\r\n let useLoading = false; // Track if user wants loading behavior\r\n let toastElement = null; // Reference to toast element\r\n let overlayElement = null; // Reference to overlay element\r\n \r\n // Create overlay for confirmation\r\n const createOverlay = () => {\r\n overlayElement = document.createElement(\"div\");\r\n overlayElement.className = \"toastify-pro-overlay\";\r\n document.body.appendChild(overlayElement);\r\n \r\n // Trigger show animation\r\n setTimeout(() => {\r\n overlayElement.classList.add(\"show\");\r\n }, 10);\r\n \r\n return overlayElement;\r\n };\r\n \r\n // Remove overlay\r\n const removeOverlay = () => {\r\n if (overlayElement && overlayElement.parentNode) {\r\n overlayElement.classList.remove(\"show\");\r\n setTimeout(() => {\r\n if (overlayElement && overlayElement.parentNode) {\r\n overlayElement.remove();\r\n }\r\n overlayElement = null;\r\n }, 300);\r\n }\r\n };\r\n \r\n const setLoading = (loading) => {\r\n useLoading = true; // User is manually controlling loading\r\n isLoading = loading;\r\n if (confirmBtnElement) {\r\n if (loading) {\r\n confirmBtnElement.classList.add('loading');\r\n confirmBtnElement.disabled = true;\r\n } else {\r\n confirmBtnElement.classList.remove('loading');\r\n confirmBtnElement.disabled = false;\r\n }\r\n }\r\n // Disable/enable cancel and close buttons during loading\r\n if (cancelBtnElement) {\r\n cancelBtnElement.disabled = loading;\r\n cancelBtnElement.style.opacity = loading ? '0.5' : '1';\r\n cancelBtnElement.style.cursor = loading ? 'not-allowed' : 'pointer';\r\n }\r\n if (closeBtnElement) {\r\n closeBtnElement.style.opacity = loading ? '0.3' : '0.5';\r\n closeBtnElement.style.cursor = loading ? 'not-allowed' : 'pointer';\r\n closeBtnElement.style.pointerEvents = loading ? 'none' : 'auto';\r\n }\r\n };\r\n \r\n const closeConfirmation = () => {\r\n if (toastElement && toastElement.parentNode) {\r\n globalActiveConfirmation = null;\r\n removeOverlay(); // Remove the overlay when closing\r\n this.removeToast(toastElement);\r\n }\r\n };\r\n \r\n // Helper function to handle confirmation result\r\n const handleConfirmation = async (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 const result = options.onConfirm({ setLoading, close: closeConfirmation });\r\n // Check if it's a promise\r\n if (result && typeof result.then === 'function') {\r\n // If user didn't manually set loading, auto-set it\r\n if (!useLoading) {\r\n setLoading(true);\r\n }\r\n await result;\r\n // Auto-close after promise resolves if user didn't manually close\r\n if (toastElement && toastElement.parentNode) {\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n // Synchronous callback - only close if user didn't start loading\r\n if (!useLoading) {\r\n closeConfirmation();\r\n }\r\n }\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in onConfirm callback:', error);\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n }\r\n // Call unified callback if provided\r\n else if (resultCallback && typeof resultCallback === 'function') {\r\n try {\r\n const result = resultCallback(true, { setLoading, close: closeConfirmation });\r\n if (result && typeof result.then === 'function') {\r\n if (!useLoading) {\r\n setLoading(true);\r\n }\r\n await result;\r\n if (toastElement && toastElement.parentNode) {\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n if (!useLoading) {\r\n closeConfirmation();\r\n }\r\n }\r\n } catch (error) {\r\n console.error('ToastifyPro: Error in confirmation callback:', error);\r\n setLoading(false);\r\n closeConfirmation();\r\n }\r\n } else {\r\n // No callback - just close\r\n closeConfirmation();\r\n }\r\n } else {\r\n // Cancel - no loading needed, check if not currently loading\r\n if (isLoading) return; // Don't allow cancel while loading\r\n \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 closeConfirmation();\r\n }\r\n };\r\n\r\n try {\r\n // Create overlay first\r\n createOverlay();\r\n \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 // Store reference to toast element\r\n toastElement = toast;\r\n\r\n // Apply custom colors if provided\r\n if (confirmOptions.primaryColor) {\r\n const primary = confirmOptions.primaryColor;\r\n const secondary = confirmOptions.secondaryColor;\r\n \r\n if (secondary) {\r\n // Both colors provided - create gradient\r\n toast.style.background = `linear-gradient(135deg, ${primary} 0%, ${secondary} 100%)`;\r\n } else {\r\n // Only primary color - solid with slight transparency\r\n toast.style.background = primary;\r\n }\r\n \r\n // Set text color based on background brightness\r\n toast.style.color = textColor;\r\n \r\n // Adjust border color to match\r\n const borderOpacity = isLightColor(primary) ? '0.2' : '0.15';\r\n toast.style.borderColor = `rgba(255, 255, 255, ${borderOpacity})`;\r\n }\r\n\r\n // Create close button for confirmation\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.className = \"conf-close-btn\";\r\n closeBtn.innerHTML = \"×\";\r\n closeBtn.setAttribute('type', 'button');\r\n closeBtn.setAttribute('aria-label', 'Cancel confirmation');\r\n closeBtn.onclick = () => {\r\n if (!isLoading) {\r\n handleConfirmation(false);\r\n }\r\n };\r\n if (confirmOptions.primaryColor) {\r\n closeBtn.style.color = textColor;\r\n }\r\n closeBtnElement = closeBtn;\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.setAttribute('aria-hidden', 'true');\r\n iconWrapper.innerHTML = this.getIconSVG('info'); // Default to info icon\r\n if (confirmOptions.primaryColor) {\r\n iconWrapper.style.color = textColor;\r\n }\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 if (confirmOptions.primaryColor) {\r\n messageElement.style.color = textColor;\r\n }\r\n contentWrapper.appendChild(messageElement);\r\n \r\n // Optional description\r\n let descriptionElement = null;\r\n if (description) {\r\n descriptionElement = document.createElement(\"div\");\r\n descriptionElement.className = \"toast-description\";\r\n descriptionElement.textContent = description.substring(0, this.defaultOptions.maxLength * 2);\r\n if (confirmOptions.primaryColor) {\r\n descriptionElement.style.color = textColor;\r\n }\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.setAttribute('type', 'button');\r\n cancelBtn.textContent = confirmOptions.cancelText;\r\n cancelBtn.onclick = () => {\r\n if (!isLoading) {\r\n handleConfirmation(false);\r\n }\r\n };\r\n \r\n // Store cancel button reference\r\n cancelBtnElement = cancelBtn;\r\n \r\n // Style cancel button with custom colors\r\n if (confirmOptions.primaryColor) {\r\n const isLight = isLightColor(confirmOptions.primaryColor);\r\n cancelBtn.style.background = isLight ? 'rgba(15, 23, 42, 0.08)' : 'rgba(255, 255, 255, 0.1)';\r\n cancelBtn.style.color = textColor;\r\n cancelBtn.style.borderColor = isLight ? 'rgba(15, 23, 42, 0.2)' : 'rgba(255, 255, 255, 0.25)';\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.setAttribute('type', 'button');\r\n\r\n // Create text wrapper\r\n const textWrapper = document.createElement(\"span\");\r\n textWrapper.className = \"btn-text\";\r\n textWrapper.textContent = confirmOptions.confirmText;\r\n confirmBtn.appendChild(textWrapper);\r\n \r\n // Create spinner element with custom SVG\r\n const spinner = document.createElement(\"span\");\r\n spinner.className = \"btn-spinner\";\r\n spinner.innerHTML = `\r\n <svg width=\"25\" height=\"25\" viewBox=\"0 0 19 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9.5 2.9375V5.5625M9.5 13.4375V16.0625M2.9375 9.5H5.5625M13.4375 9.5H16.0625\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-linecap=\"round\" />\r\n <path d=\"M4.86011 4.85961L6.71627 6.71577M12.2847 12.2842L14.1409 14.1404M4.86011 14.1404L6.71627 12.2842M12.2847 6.71577L14.1409 4.85961\" stroke=\"currentColor\" stroke-width=\"1.875\" stroke-linecap=\"round\" />\r\n </svg>\r\n `;\r\n confirmBtn.appendChild(spinner);\r\n \r\n confirmBtn.onclick = () => {\r\n if (!isLoading) {\r\n handleConfirmation(true);\r\n }\r\n };\r\n \r\n // Store reference for loading state control\r\n confirmBtnElement = confirmBtn;\r\n \r\n // Style confirm button with custom colors\r\n if (confirmOptions.primaryColor) {\r\n const primary = confirmOptions.primaryColor;\r\n const secondary = confirmOptions.secondaryColor;\r\n const isLight = isLightColor(primary);\r\n \r\n if (secondary) {\r\n // Gradient confirm button\r\n confirmBtn.style.background = `linear-gradient(135deg, ${primary} 0%, ${secondary} 100%)`;\r\n } else {\r\n // Solid color confirm button with enhanced styling\r\n confirmBtn.style.background = primary;\r\n }\r\n \r\n // Determine button text color (always use contrasting color for readability)\r\n confirmBtn.style.color = isLight ? '#1e293b' : 'white';\r\n confirmBtn.style.borderColor = isLight ? 'rgba(15, 23, 42, 0.3)' : 'rgba(255, 255, 255, 0.4)';\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 // Create control object\r\n const controlObject = {\r\n element: toast,\r\n setLoading: setLoading,\r\n close: closeConfirmation\r\n };\r\n \r\n // Store as global active confirmation (with control object)\r\n globalActiveConfirmation = controlObject;\r\n \r\n // Apply initial loading state if provided (for React/Vue)\r\n if (confirmOptions.loading) {\r\n setLoading(true);\r\n }\r\n\r\n // ARIA accessibility for confirmation dialog\r\n toast.setAttribute('role', 'alertdialog');\r\n toast.setAttribute('aria-modal', 'true');\r\n toast.setAttribute('aria-labelledby', 'toast-conf-title');\r\n if (description) {\r\n toast.setAttribute('aria-describedby', 'toast-conf-desc');\r\n }\r\n messageElement.id = 'toast-conf-title';\r\n if (description && descriptionElement) {\r\n descriptionElement.id = 'toast-conf-desc';\r\n }\r\n \r\n // Store previously focused element for restoration\r\n const previouslyFocused = document.activeElement;\r\n \r\n // Focus trap for confirmation dialog\r\n const focusableElements = [cancelBtn, confirmBtn, closeBtn].filter(Boolean);\r\n let currentFocusIndex = 0;\r\n \r\n const handleTabKey = (e) => {\r\n if (e.key === 'Tab' && toastElement && toastElement.parentNode) {\r\n e.preventDefault();\r\n if (e.shiftKey) {\r\n currentFocusIndex = (currentFocusIndex - 1 + focusableElements.length) % focusableElements.length;\r\n } else {\r\n currentFocusIndex = (currentFocusIndex + 1) % focusableElements.length;\r\n }\r\n focusableElements[currentFocusIndex]?.focus();\r\n }\r\n };\r\n \r\n document.addEventListener('keydown', handleTabKey);\r\n \r\n // Store cleanup function\r\n const originalClose = closeConfirmation;\r\n const cleanupAndClose = () => {\r\n document.removeEventListener('keydown', handleTabKey);\r\n // Restore focus to previously focused element\r\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\r\n setTimeout(() => previouslyFocused.focus(), 100);\r\n }\r\n originalClose();\r\n };\r\n \r\n // Update control object with enhanced close\r\n controlObject.close = cleanupAndClose;\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 \r\n // Focus the confirm button after animation\r\n setTimeout(() => {\r\n confirmBtn.focus();\r\n }, 100);\r\n }, 10);\r\n\r\n // Return control object with toast element and control functions\r\n return controlObject;\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 * Alias for conf() method - shows a confirmation toast\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 confirm(message, descriptionOrCallback, callback) {\r\n return this.conf(message, descriptionOrCallback, callback);\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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AAM,OAAO,EAAE,CAAC;AAChB;AACA,YAAY,CAAC;AACb,MAAM,IAAI,EAAE,CAAC;AACb;AACA,YAAY,CAAC;AACb,MAAM,KAAK,EAAE,CAAC;AACd;AACA,YAAY,CAAC;AACb,KAAK,CAAC;AACN;AACA,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;AACrC,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,YAAY,GAAG;AACjB;AACA,IAAI,IAAI,QAAQ,CAAC,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,E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"}
|