Changeset 3473372
- Timestamp:
- 03/03/2026 08:24:15 AM (4 weeks ago)
- Location:
- wp-before-after-image-slider
- Files:
-
- 186 added
- 14 edited
-
tags/2.2.0 (added)
-
tags/2.2.0/CHANGELOG (added)
-
tags/2.2.0/LICENSE (added)
-
tags/2.2.0/assets (added)
-
tags/2.2.0/assets/admin (added)
-
tags/2.2.0/assets/admin/carousel-admin.asset.php (added)
-
tags/2.2.0/assets/admin/carousel-admin.js (added)
-
tags/2.2.0/assets/admin/carousel-admin.js.map (added)
-
tags/2.2.0/assets/admin/css (added)
-
tags/2.2.0/assets/admin/css/carousel-admin-rtl.css (added)
-
tags/2.2.0/assets/admin/css/carousel-admin.css (added)
-
tags/2.2.0/assets/admin/css/carousel-admin.css.map (added)
-
tags/2.2.0/assets/admin/css/carousel-panel-rtl.css (added)
-
tags/2.2.0/assets/admin/css/carousel-panel.css (added)
-
tags/2.2.0/assets/admin/css/carousel-panel.css.map (added)
-
tags/2.2.0/assets/admin/css/components-rtl.css (added)
-
tags/2.2.0/assets/admin/css/components.css (added)
-
tags/2.2.0/assets/admin/css/components.css.map (added)
-
tags/2.2.0/assets/admin/css/dashboard-rtl.css (added)
-
tags/2.2.0/assets/admin/css/dashboard.css (added)
-
tags/2.2.0/assets/admin/css/dashboard.css.map (added)
-
tags/2.2.0/assets/admin/css/lazy-load-admin-rtl.css (added)
-
tags/2.2.0/assets/admin/css/lazy-load-admin.css (added)
-
tags/2.2.0/assets/admin/css/lazy-load-admin.css.map (added)
-
tags/2.2.0/assets/admin/css/panel-rtl.css (added)
-
tags/2.2.0/assets/admin/css/panel.css (added)
-
tags/2.2.0/assets/admin/css/panel.css.map (added)
-
tags/2.2.0/assets/admin/js (added)
-
tags/2.2.0/assets/admin/js/carousel-panel.asset.php (added)
-
tags/2.2.0/assets/admin/js/carousel-panel.js (added)
-
tags/2.2.0/assets/admin/js/carousel-panel.js.map (added)
-
tags/2.2.0/assets/admin/js/copy-shortcode.asset.php (added)
-
tags/2.2.0/assets/admin/js/copy-shortcode.js (added)
-
tags/2.2.0/assets/admin/js/copy-shortcode.js.map (added)
-
tags/2.2.0/assets/admin/js/dashboard.asset.php (added)
-
tags/2.2.0/assets/admin/js/dashboard.js (added)
-
tags/2.2.0/assets/admin/js/dashboard.js.map (added)
-
tags/2.2.0/assets/admin/js/lazy-load-admin.asset.php (added)
-
tags/2.2.0/assets/admin/js/lazy-load-admin.js (added)
-
tags/2.2.0/assets/admin/js/lazy-load-admin.js.map (added)
-
tags/2.2.0/assets/admin/js/panel.asset.php (added)
-
tags/2.2.0/assets/admin/js/panel.js (added)
-
tags/2.2.0/assets/admin/js/panel.js.map (added)
-
tags/2.2.0/assets/admin/js/save-carousel.asset.php (added)
-
tags/2.2.0/assets/admin/js/save-carousel.js (added)
-
tags/2.2.0/assets/admin/js/save-carousel.js.map (added)
-
tags/2.2.0/assets/admin/js/save-post.asset.php (added)
-
tags/2.2.0/assets/admin/js/save-post.js (added)
-
tags/2.2.0/assets/admin/js/save-post.js.map (added)
-
tags/2.2.0/assets/common (added)
-
tags/2.2.0/assets/common/carousel.asset.php (added)
-
tags/2.2.0/assets/common/carousel.js (added)
-
tags/2.2.0/assets/common/carousel.js.map (added)
-
tags/2.2.0/assets/common/css (added)
-
tags/2.2.0/assets/common/css/carousel-rtl.css (added)
-
tags/2.2.0/assets/common/css/carousel.css (added)
-
tags/2.2.0/assets/common/css/carousel.css.map (added)
-
tags/2.2.0/assets/common/css/image-compare-rtl.css (added)
-
tags/2.2.0/assets/common/css/image-compare-triple-rtl.css (added)
-
tags/2.2.0/assets/common/css/image-compare-triple.css (added)
-
tags/2.2.0/assets/common/css/image-compare-triple.css.map (added)
-
tags/2.2.0/assets/common/css/image-compare.css (added)
-
tags/2.2.0/assets/common/css/image-compare.css.map (added)
-
tags/2.2.0/assets/common/css/image-picker-rtl.css (added)
-
tags/2.2.0/assets/common/css/image-picker.css (added)
-
tags/2.2.0/assets/common/css/image-picker.css.map (added)
-
tags/2.2.0/assets/common/css/lazy-load-rtl.css (added)
-
tags/2.2.0/assets/common/css/lazy-load.css (added)
-
tags/2.2.0/assets/common/css/lazy-load.css.map (added)
-
tags/2.2.0/assets/common/css/popup-rtl.css (added)
-
tags/2.2.0/assets/common/css/popup.css (added)
-
tags/2.2.0/assets/common/css/popup.css.map (added)
-
tags/2.2.0/assets/common/js (added)
-
tags/2.2.0/assets/common/js/image-picker.asset.php (added)
-
tags/2.2.0/assets/common/js/image-picker.js (added)
-
tags/2.2.0/assets/common/js/image-picker.js.map (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare-triple.asset.php (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare-triple.js (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare-triple.js.map (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare.asset.php (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare.js (added)
-
tags/2.2.0/assets/common/js/jquery.image-compare.js.map (added)
-
tags/2.2.0/assets/common/js/jquery.popup.asset.php (added)
-
tags/2.2.0/assets/common/js/jquery.popup.js (added)
-
tags/2.2.0/assets/common/js/jquery.popup.js.map (added)
-
tags/2.2.0/assets/common/js/jquery.widgets-common.asset.php (added)
-
tags/2.2.0/assets/common/js/jquery.widgets-common.js (added)
-
tags/2.2.0/assets/common/js/jquery.widgets-common.js.map (added)
-
tags/2.2.0/assets/common/js/lazy-load.asset.php (added)
-
tags/2.2.0/assets/common/js/lazy-load.js (added)
-
tags/2.2.0/assets/common/js/lazy-load.js.map (added)
-
tags/2.2.0/assets/lib (added)
-
tags/2.2.0/assets/lib/images (added)
-
tags/2.2.0/assets/lib/images/1.png (added)
-
tags/2.2.0/assets/lib/images/2.png (added)
-
tags/2.2.0/assets/lib/images/3.png (added)
-
tags/2.2.0/assets/lib/images/4.png (added)
-
tags/2.2.0/assets/lib/images/5.png (added)
-
tags/2.2.0/assets/lib/images/6.png (added)
-
tags/2.2.0/assets/lib/images/7.png (added)
-
tags/2.2.0/assets/lib/images/8.png (added)
-
tags/2.2.0/assets/lib/images/Horizontal.png (added)
-
tags/2.2.0/assets/lib/images/Vertical.png (added)
-
tags/2.2.0/assets/lib/images/dashboard-banner.png (added)
-
tags/2.2.0/assets/lib/images/feature-image.png (added)
-
tags/2.2.0/assets/lib/images/logo.png (added)
-
tags/2.2.0/assets/lib/images/placeholder.svg (added)
-
tags/2.2.0/assets/lib/images/premium-icon.svg (added)
-
tags/2.2.0/assets/lib/images/video-banner.png (added)
-
tags/2.2.0/assets/lib/images/video-placeholder.svg (added)
-
tags/2.2.0/assets/lib/js (added)
-
tags/2.2.0/assets/lib/js/imagesloaded.pkgd.min.js (added)
-
tags/2.2.0/assets/lib/js/jquery.event.move.js (added)
-
tags/2.2.0/assets/shortcodes (added)
-
tags/2.2.0/assets/shortcodes/css (added)
-
tags/2.2.0/assets/shortcodes/css/bais-default-rtl.css (added)
-
tags/2.2.0/assets/shortcodes/css/bais-default.css (added)
-
tags/2.2.0/assets/shortcodes/css/bais-default.css.map (added)
-
tags/2.2.0/assets/shortcodes/css/bais-triple-rtl.css (added)
-
tags/2.2.0/assets/shortcodes/css/bais-triple.css (added)
-
tags/2.2.0/assets/shortcodes/css/bais-triple.css.map (added)
-
tags/2.2.0/assets/shortcodes/js (added)
-
tags/2.2.0/assets/shortcodes/js/bais-default.asset.php (added)
-
tags/2.2.0/assets/shortcodes/js/bais-default.js (added)
-
tags/2.2.0/assets/shortcodes/js/bais-default.js.map (added)
-
tags/2.2.0/assets/shortcodes/js/bais-triple.asset.php (added)
-
tags/2.2.0/assets/shortcodes/js/bais-triple.js (added)
-
tags/2.2.0/assets/shortcodes/js/bais-triple.js.map (added)
-
tags/2.2.0/assets/widgets (added)
-
tags/2.2.0/assets/widgets/css (added)
-
tags/2.2.0/assets/widgets/css/bais-default-rtl.css (added)
-
tags/2.2.0/assets/widgets/css/bais-default.css (added)
-
tags/2.2.0/assets/widgets/css/bais-default.css.map (added)
-
tags/2.2.0/assets/widgets/css/bais-triple-rtl.css (added)
-
tags/2.2.0/assets/widgets/css/bais-triple.css (added)
-
tags/2.2.0/assets/widgets/css/bais-triple.css.map (added)
-
tags/2.2.0/assets/widgets/js (added)
-
tags/2.2.0/assets/widgets/js/bais-default.asset.php (added)
-
tags/2.2.0/assets/widgets/js/bais-default.js (added)
-
tags/2.2.0/assets/widgets/js/bais-default.js.map (added)
-
tags/2.2.0/assets/widgets/js/bais-triple.asset.php (added)
-
tags/2.2.0/assets/widgets/js/bais-triple.js (added)
-
tags/2.2.0/assets/widgets/js/bais-triple.js.map (added)
-
tags/2.2.0/includes (added)
-
tags/2.2.0/includes/admin (added)
-
tags/2.2.0/includes/admin/CarouselUpgrade.php (added)
-
tags/2.2.0/includes/admin/Dashboard.php (added)
-
tags/2.2.0/includes/admin/LazyLoadSettings.php (added)
-
tags/2.2.0/includes/admin/MetaBoxes.php (added)
-
tags/2.2.0/includes/admin/Panel.php (added)
-
tags/2.2.0/includes/admin/PostType.php (added)
-
tags/2.2.0/includes/admin/RestApiRoutes.php (added)
-
tags/2.2.0/includes/admin/ShortCode.php (added)
-
tags/2.2.0/includes/features (added)
-
tags/2.2.0/includes/features/Admin (added)
-
tags/2.2.0/includes/features/Admin/PluginSync.php (added)
-
tags/2.2.0/includes/features/LazyLoad.php (added)
-
tags/2.2.0/includes/widgets (added)
-
tags/2.2.0/includes/widgets/BeforeAfterImageSlider.php (added)
-
tags/2.2.0/languages (added)
-
tags/2.2.0/languages/wp-before-after-image-slider-pro.pot (added)
-
tags/2.2.0/languages/wp-before-after-image-slider.pot (added)
-
tags/2.2.0/readme.txt (added)
-
tags/2.2.0/wp-before-after-image-slider.php (added)
-
trunk/CHANGELOG (modified) (1 diff)
-
trunk/assets/admin/carousel-admin.asset.php (added)
-
trunk/assets/admin/carousel-admin.js (added)
-
trunk/assets/admin/carousel-admin.js.map (added)
-
trunk/assets/admin/css/carousel-admin-rtl.css (added)
-
trunk/assets/admin/css/carousel-admin.css (added)
-
trunk/assets/admin/css/carousel-admin.css.map (added)
-
trunk/assets/admin/css/carousel-panel-rtl.css (added)
-
trunk/assets/admin/css/carousel-panel.css (added)
-
trunk/assets/admin/css/carousel-panel.css.map (added)
-
trunk/assets/admin/js/carousel-panel.asset.php (added)
-
trunk/assets/admin/js/carousel-panel.js (added)
-
trunk/assets/admin/js/carousel-panel.js.map (added)
-
trunk/assets/admin/js/copy-shortcode.asset.php (modified) (1 diff)
-
trunk/assets/admin/js/copy-shortcode.js (modified) (3 diffs)
-
trunk/assets/admin/js/copy-shortcode.js.map (modified) (1 diff)
-
trunk/assets/admin/js/save-carousel.asset.php (added)
-
trunk/assets/admin/js/save-carousel.js (added)
-
trunk/assets/admin/js/save-carousel.js.map (added)
-
trunk/assets/admin/js/save-post.asset.php (modified) (1 diff)
-
trunk/assets/admin/js/save-post.js (modified) (1 diff)
-
trunk/assets/admin/js/save-post.js.map (modified) (1 diff)
-
trunk/assets/common/carousel.asset.php (added)
-
trunk/assets/common/carousel.js (added)
-
trunk/assets/common/carousel.js.map (added)
-
trunk/assets/common/css/carousel-rtl.css (added)
-
trunk/assets/common/css/carousel.css (added)
-
trunk/assets/common/css/carousel.css.map (added)
-
trunk/assets/common/js/jquery.image-compare.asset.php (modified) (1 diff)
-
trunk/assets/common/js/jquery.image-compare.js (modified) (1 diff)
-
trunk/assets/common/js/jquery.image-compare.js.map (modified) (1 diff)
-
trunk/includes/admin/CarouselUpgrade.php (added)
-
trunk/includes/admin/Panel.php (modified) (3 diffs)
-
trunk/includes/admin/RestApiRoutes.php (modified) (4 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/wp-before-after-image-slider.php (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wp-before-after-image-slider/trunk/CHANGELOG
r3457783 r3473372 1 1 == Changelog == 2 = 2.2.0 = 3 * Added: Carousel feature for displaying multiple before-after sliders 2 4 3 5 = 2.1.2 = -
wp-before-after-image-slider/trunk/assets/admin/js/copy-shortcode.asset.php
r3457783 r3473372 1 <?php return array('dependencies' => array(), 'version' => ' 9c6f15c281b9b31daafc');1 <?php return array('dependencies' => array(), 'version' => 'eff278aebc44972a636d'); -
wp-before-after-image-slider/trunk/assets/admin/js/copy-shortcode.js
r3457783 r3473372 2 2 !*** ./src/common/scripts/copy.js ***! 3 3 \************************************/ 4 // coca_do_copy_the_shortcode 4 // Show notification animation 5 const showCopyNotification = () => { 6 let time = 0; 7 const elem = document.getElementById('coca_bais_copy_html'); 8 if (!elem) return; 9 elem.style.display = 'block'; 10 const copyAlert = function () { 11 if (time === 200) { 12 window.clearInterval(id); 13 elem.style.transform = 'translateX(200%)'; 14 elem.style.opacity = '0'; 15 } else { 16 time++; 17 elem.style.transform = 'translateX(0%)'; 18 elem.style.opacity = '1'; 19 } 20 }; 21 const id = window.setInterval(copyAlert, 10); 22 }; 23 24 // coca_do_copy_the_shortcode - for input fields (.coca_bais_slider_shortcode) 5 25 const cocaDoCopyTheShortcode = event => { 6 26 const copyText = event.target; 7 let time = 0;8 27 if (copyText.value !== '') { 9 28 copyText.focus(); … … 11 30 copyText.setSelectionRange(0, 99999); 12 31 document.execCommand('copy'); 13 const elem = document.getElementById('coca_bais_copy_html'); 14 elem.style.display = 'block'; 15 const copyAlert = function () { 16 if (time === 200) { 17 window.clearInterval(id); 18 elem.style.transform = 'translateX(200%)'; 19 elem.style.opacity = '0'; 20 } else { 21 time++; 22 elem.style.transform = 'translateX(0%)'; 23 elem.style.opacity = '1'; 24 } 25 }; 26 const id = window.setInterval(copyAlert, 10); 32 showCopyNotification(); 27 33 } 28 34 }; 29 35 30 // fire copy 36 // Copy shortcode from button data attribute (.copy-shortcode and .copy-shortcode-text) 37 const cocaDoCopyFromButton = event => { 38 event.preventDefault(); 39 const element = event.target.closest('.copy-shortcode') || event.target.closest('.copy-shortcode-text'); 40 if (!element) return; 41 const shortcode = element.getAttribute('data-shortcode'); 42 if (!shortcode) return; 43 44 // Use modern clipboard API with fallback 45 if (navigator.clipboard && navigator.clipboard.writeText) { 46 navigator.clipboard.writeText(shortcode).then(() => { 47 showCopyNotification(); 48 }).catch(() => { 49 // Fallback to execCommand 50 fallbackCopyText(shortcode); 51 }); 52 } else { 53 fallbackCopyText(shortcode); 54 } 55 }; 56 57 // Fallback copy method for older browsers 58 const fallbackCopyText = text => { 59 const textArea = document.createElement('textarea'); 60 textArea.value = text; 61 textArea.style.position = 'fixed'; 62 textArea.style.left = '-999999px'; 63 textArea.style.top = '-999999px'; 64 document.body.appendChild(textArea); 65 textArea.focus(); 66 textArea.select(); 67 document.execCommand('copy'); 68 textArea.remove(); 69 showCopyNotification(); 70 }; 71 72 // Fire copy for input fields (All Sliders page) 31 73 if (!!document.querySelectorAll('.coca_bais_slider_shortcode').length) { 32 74 [].map.call(document.querySelectorAll('.coca_bais_slider_shortcode'), shortcode => { … … 35 77 } 36 78 79 // Fire copy for buttons (Carousel page and row actions) 80 if (!!document.querySelectorAll('.copy-shortcode').length) { 81 [].map.call(document.querySelectorAll('.copy-shortcode'), button => { 82 button.addEventListener('click', cocaDoCopyFromButton); 83 }); 84 } 85 86 // Fire copy for shortcode text elements (clickable shortcode text) 87 if (!!document.querySelectorAll('.copy-shortcode-text').length) { 88 [].map.call(document.querySelectorAll('.copy-shortcode-text'), textElement => { 89 textElement.addEventListener('click', cocaDoCopyFromButton); 90 }); 91 } 92 37 93 //# sourceMappingURL=copy-shortcode.js.map -
wp-before-after-image-slider/trunk/assets/admin/js/copy-shortcode.js.map
r3457783 r3473372 1 {"version":3,"file":"admin/js/copy-shortcode.js","mappings":";;;AAAA;AACA,MAAMA, sBAAsB,GAAKC,KAAK,IAAM;EAC3C,MAAMC,QAAQ,GAAGD,KAAK,CAACE,MAAM;EAC7B,IAAIC,IAAI,GAAG,CAAC;EAEZ,IAAKF,QAAQ,CAACG,KAAK,KAAK,EAAE,EAAG;IAC5BH,QAAQ,CAACI,KAAK,CAAC,CAAC;IAChBJ,QAAQ,CAACK,MAAM,CAAC,CAAC;IACjBL,QAAQ,CAACM,iBAAiB,CAAE,CAAC,EAAE,KAAM,CAAC;IACtCC,QAAQ,CAACC,WAAW,CAAE,MAAO,CAAC;IAE9B,MAAMC,IAAI,GAAGF,QAAQ,CAACG,cAAc,CAAE,qBAAsB,CAAC;IAC7DD,IAAI,CAACE,KAAK,CAACC,OAAO,GAAG,OAAO;IAE5B,MAAMC,SAAS,GAAG,SAAAA,CAAA,EAAW;MAC5B,IAAKX,IAAI,KAAK,GAAG,EAAG;QACnBY,MAAM,CAACC,aAAa,CAAEC,EAAG,CAAC;QAC1BP,IAAI,CAACE,KAAK,CAACM,SAAS,GAAG,kBAAkB;QACzCR,IAAI,CAACE,KAAK,CAACO,OAAO,GAAG,GAAG;MACzB,CAAC,MAAM;QACNhB,IAAI,EAAE;QACNO,IAAI,CAACE,KAAK,CAACM,SAAS,GAAG,gBAAgB;QACvCR,IAAI,CAACE,KAAK,CAACO,OAAO,GAAG,GAAG;MACzB;IACD,CAAC;IAED,MAAMF,EAAE,GAAGF,MAAM,CAACK,WAAW,CAAEN,SAAS,EAAE,EAAG,CAAC;EAC/C;AACD,CAAC;;AAED;AACA,IAAK,CAAC,CAAEN,QAAQ,CAACa,gBAAgB,CAAE,6BAA8B,CAAC,CAACC,MAAM,EAAG;EAC3E,EAAE,CAACC,GAAG,CAACC,IAAI,CACVhB,QAAQ,CAACa,gBAAgB,CAAE,6BAA8B,CAAC,EACxDI,SAAS,IAAM;IAChBA,SAAS,CAACC,gBAAgB,CAAE,OAAO,EAAE3B,sBAAuB,CAAC;EAC9D,CACD,CAAC;AACF,C","sources":["webpack://@codecanel/before-after-image-slider/./src/common/scripts/copy.js"],"sourcesContent":["// coca_do_copy_the_shortcode\nconst cocaDoCopyTheShortcode = ( event ) => {\n\tconst copyText = event.target;\n\tlet time = 0;\n\n\tif ( copyText.value !== '' ) {\n\t\tcopyText.focus();\n\t\tcopyText.select();\n\t\tcopyText.setSelectionRange( 0, 99999 );\n\t\tdocument.execCommand( 'copy' );\n\n\t\tconst elem = document.getElementById( 'coca_bais_copy_html' );\n\t\telem.style.display = 'block';\n\n\t\tconst copyAlert = function() {\n\t\t\tif ( time === 200 ) {\n\t\t\t\twindow.clearInterval( id );\n\t\t\t\telem.style.transform = 'translateX(200%)';\n\t\t\t\telem.style.opacity = '0';\n\t\t\t} else {\n\t\t\t\ttime++;\n\t\t\t\telem.style.transform = 'translateX(0%)';\n\t\t\t\telem.style.opacity = '1';\n\t\t\t}\n\t\t};\n\n\t\tconst id = window.setInterval( copyAlert, 10 );\n\t}\n};\n\n// fire copy\nif ( !! document.querySelectorAll( '.coca_bais_slider_shortcode' ).length ) {\n\t[].map.call(\n\t\tdocument.querySelectorAll( '.coca_bais_slider_shortcode' ),\n\t\t( shortcode ) => {\n\t\t\tshortcode.addEventListener( 'click', cocaDoCopyTheShortcode );\n\t\t}\n\t);\n}\n"],"names":["cocaDoCopyTheShortcode","event","copyText","target","time","value","focus","select","setSelectionRange","document","execCommand","elem","getElementById","style","display","copyAlert","window","clearInterval","id","transform","opacity","setInterval","querySelectorAll","length","map","call","shortcode","addEventListener"],"sourceRoot":""}1 {"version":3,"file":"admin/js/copy-shortcode.js","mappings":"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","sources":["webpack://@codecanel/before-after-image-slider/./src/common/scripts/copy.js"],"sourcesContent":["// Show notification animation\nconst showCopyNotification = () => {\n\tlet time = 0;\n\tconst elem = document.getElementById( 'coca_bais_copy_html' );\n\tif ( ! elem ) return;\n\n\telem.style.display = 'block';\n\n\tconst copyAlert = function() {\n\t\tif ( time === 200 ) {\n\t\t\twindow.clearInterval( id );\n\t\t\telem.style.transform = 'translateX(200%)';\n\t\t\telem.style.opacity = '0';\n\t\t} else {\n\t\t\ttime++;\n\t\t\telem.style.transform = 'translateX(0%)';\n\t\t\telem.style.opacity = '1';\n\t\t}\n\t};\n\n\tconst id = window.setInterval( copyAlert, 10 );\n};\n\n// coca_do_copy_the_shortcode - for input fields (.coca_bais_slider_shortcode)\nconst cocaDoCopyTheShortcode = ( event ) => {\n\tconst copyText = event.target;\n\n\tif ( copyText.value !== '' ) {\n\t\tcopyText.focus();\n\t\tcopyText.select();\n\t\tcopyText.setSelectionRange( 0, 99999 );\n\t\tdocument.execCommand( 'copy' );\n\t\tshowCopyNotification();\n\t}\n};\n\n// Copy shortcode from button data attribute (.copy-shortcode and .copy-shortcode-text)\nconst cocaDoCopyFromButton = ( event ) => {\n\tevent.preventDefault();\n\tconst element = event.target.closest( '.copy-shortcode' ) || event.target.closest( '.copy-shortcode-text' );\n\tif ( ! element ) return;\n\n\tconst shortcode = element.getAttribute( 'data-shortcode' );\n\tif ( ! shortcode ) return;\n\n\t// Use modern clipboard API with fallback\n\tif ( navigator.clipboard && navigator.clipboard.writeText ) {\n\t\tnavigator.clipboard.writeText( shortcode ).then( () => {\n\t\t\tshowCopyNotification();\n\t\t} ).catch( () => {\n\t\t\t// Fallback to execCommand\n\t\t\tfallbackCopyText( shortcode );\n\t\t} );\n\t} else {\n\t\tfallbackCopyText( shortcode );\n\t}\n};\n\n// Fallback copy method for older browsers\nconst fallbackCopyText = ( text ) => {\n\tconst textArea = document.createElement( 'textarea' );\n\ttextArea.value = text;\n\ttextArea.style.position = 'fixed';\n\ttextArea.style.left = '-999999px';\n\ttextArea.style.top = '-999999px';\n\tdocument.body.appendChild( textArea );\n\ttextArea.focus();\n\ttextArea.select();\n\tdocument.execCommand( 'copy' );\n\ttextArea.remove();\n\tshowCopyNotification();\n};\n\n// Fire copy for input fields (All Sliders page)\nif ( !! document.querySelectorAll( '.coca_bais_slider_shortcode' ).length ) {\n\t[].map.call(\n\t\tdocument.querySelectorAll( '.coca_bais_slider_shortcode' ),\n\t\t( shortcode ) => {\n\t\t\tshortcode.addEventListener( 'click', cocaDoCopyTheShortcode );\n\t\t}\n\t);\n}\n\n// Fire copy for buttons (Carousel page and row actions)\nif ( !! document.querySelectorAll( '.copy-shortcode' ).length ) {\n\t[].map.call(\n\t\tdocument.querySelectorAll( '.copy-shortcode' ),\n\t\t( button ) => {\n\t\t\tbutton.addEventListener( 'click', cocaDoCopyFromButton );\n\t\t}\n\t);\n}\n\n// Fire copy for shortcode text elements (clickable shortcode text)\nif ( !! document.querySelectorAll( '.copy-shortcode-text' ).length ) {\n\t[].map.call(\n\t\tdocument.querySelectorAll( '.copy-shortcode-text' ),\n\t\t( textElement ) => {\n\t\t\ttextElement.addEventListener( 'click', cocaDoCopyFromButton );\n\t\t}\n\t);\n}\n"],"names":["showCopyNotification","time","elem","document","getElementById","style","display","copyAlert","window","clearInterval","id","transform","opacity","setInterval","cocaDoCopyTheShortcode","event","copyText","target","value","focus","select","setSelectionRange","execCommand","cocaDoCopyFromButton","preventDefault","element","closest","shortcode","getAttribute","navigator","clipboard","writeText","then","catch","fallbackCopyText","text","textArea","createElement","position","left","top","body","appendChild","remove","querySelectorAll","length","map","call","addEventListener","button","textElement"],"sourceRoot":""} -
wp-before-after-image-slider/trunk/assets/admin/js/save-post.asset.php
r3457783 r3473372 1 <?php return array('dependencies' => array('jquery', 'wp-api-fetch'), 'version' => ' fedcbbc6e009c700233e');1 <?php return array('dependencies' => array('jquery', 'wp-api-fetch'), 'version' => '6808cc7ff3ec34565b19'); -
wp-before-after-image-slider/trunk/assets/admin/js/save-post.js
r3457783 r3473372 249 249 }); 250 250 251 // Carousel form submission handler - simpler, just clears beforeunload warning 252 jquery__WEBPACK_IMPORTED_MODULE_0___default()('.post-type-coca_bais_carousel form#post').on('submit', function (event) { 253 // Clear WordPress "unsaved changes" warning for carousel 254 window.onbeforeunload = null; 255 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('beforeunload'); 256 257 // Let the form submit normally 258 return true; 259 }); 260 251 261 // Cross-browser safe form submission 252 262 function submitFormSafely(form, isPublish, isRetry) { -
wp-before-after-image-slider/trunk/assets/admin/js/save-post.js.map
r3457783 r3473372 1 {"version":3,"file":"admin/js/save-post.js","mappings":"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","sources":["webpack://@codecanel/before-after-image-slider/external window [\"wp\",\"apiFetch\"]","webpack://@codecanel/before-after-image-slider/external window \"jQuery\"","webpack://@codecanel/before-after-image-slider/webpack/bootstrap","webpack://@codecanel/before-after-image-slider/webpack/runtime/compat get default export","webpack://@codecanel/before-after-image-slider/webpack/runtime/define property getters","webpack://@codecanel/before-after-image-slider/webpack/runtime/hasOwnProperty shorthand","webpack://@codecanel/before-after-image-slider/webpack/runtime/make namespace object","webpack://@codecanel/before-after-image-slider/./src/admin/scripts/save-post.js"],"sourcesContent":["module.exports = window[\"wp\"][\"apiFetch\"];","module.exports = window[\"jQuery\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// External dependencies\nimport jQuery from 'jquery';\n\n// Wordpress dependencies\nimport apiFetch from '@wordpress/api-fetch';\n\n// jQuery( document ).ready( () => {\n// \tjQuery( '.post-type-coca_bais form#post' ).on( 'submit', ( ) => {\n// \t\t// Saved data from browser storage.\n// \t\tconst savedOptions = window.localStorage.getItem( 'coca_bais_data' );\n\n// \t\tif ( !! savedOptions && !! JSON.parse( savedOptions ) ) {\n// \t\t\tapiFetch( { path: '/coca-bais/v1/save-post-meta', method: 'post', data: JSON.parse( savedOptions ) } );\n// \t\t}\n\n// \t\t// Just land here.\n// \t\t// event.preventDefault();\n// \t} );\n// } );\njQuery(document).ready(function() {\n var lastClickedButton = null;\n var isProcessing = false;\n \n // Cross-browser button capture\n function captureButtonClick() {\n jQuery('.post-type-coca_bais form#post input[type=\"submit\"], .post-type-coca_bais form#post button[type=\"submit\"]').on('click touchstart', function(e) {\n lastClickedButton = jQuery(this);\n \n // Store additional button info for cross-browser compatibility\n lastClickedButton.clickedAt = Date.now();\n lastClickedButton.buttonName = jQuery(this).attr('name') || '';\n lastClickedButton.buttonValue = jQuery(this).val() || jQuery(this).text() || '';\n lastClickedButton.buttonId = jQuery(this).attr('id') || '';\n });\n }\n \n // Initialize button capture\n captureButtonClick();\n \n // Cross-browser publish action detection\n function isPublishAction(button) {\n if (!button) return false;\n \n var name = button.buttonName || button.attr('name') || '';\n var value = button.buttonValue || button.val() || button.text() || '';\n var id = button.buttonId || button.attr('id') || '';\n var className = button.attr('class') || '';\n \n return (\n name === 'publish' || \n value === 'Publish' ||\n value.indexOf('Publish') !== -1 ||\n id === 'publish' ||\n id.indexOf('publish') !== -1 ||\n className.indexOf('publish') !== -1 ||\n className.indexOf('editor-post-publish-button') !== -1\n );\n }\n \n // Form submission handler\n jQuery('.post-type-coca_bais form#post').on('submit', function(event) {\n // Prevent double processing\n if (isProcessing) {\n return false;\n }\n \n var savedOptions;\n try {\n savedOptions = window.localStorage.getItem('coca_bais_data');\n } catch (e) {\n // localStorage not supported or blocked\n console.warn('localStorage not available:', e);\n return; // Let form submit normally\n }\n \n if (!savedOptions) return; // Let form submit normally\n \n var form = this;\n var clickedButton = lastClickedButton;\n \n // Fallback button detection for browsers that don't capture click properly\n if (!clickedButton || (Date.now() - (clickedButton.clickedAt || 0)) > 5000) {\n // Look for recently focused elements or form submitter\n clickedButton = jQuery(document.activeElement);\n \n // If that doesn't work, look for publish buttons in the form\n if (!clickedButton || !clickedButton.is('input, button')) {\n clickedButton = jQuery(form).find('input[name=\"publish\"], button[name=\"publish\"], #publish, .editor-post-publish-button').first();\n }\n }\n \n var publishAction = isPublishAction(clickedButton);\n \n var parsedData;\n try {\n parsedData = JSON.parse(savedOptions);\n } catch (e) {\n console.error('Invalid localStorage JSON:', e);\n \n var continueAnyway = confirm('Invalid meta data format. Do you want to continue anyway?');\n if (!continueAnyway) {\n event.preventDefault();\n return false;\n }\n return; // Let form submit normally\n }\n \n if (parsedData && typeof parsedData === 'object') {\n event.preventDefault();\n isProcessing = true;\n \n // Prepare API data\n parsedData.post_id = jQuery('#post_ID').val();\n parsedData.intended_status = publishAction ? 'publish' : 'draft';\n \n // Cross-browser API call with fallback\n var apiCall;\n if (typeof wp !== 'undefined' && wp.apiFetch) {\n apiCall = wp.apiFetch({\n path: '/coca-bais/v1/save-post-meta',\n method: 'POST',\n data: parsedData\n });\n } else if (typeof apiFetch !== 'undefined') {\n apiCall = apiFetch({\n path: '/coca-bais/v1/save-post-meta',\n method: 'POST',\n data: parsedData\n });\n } else {\n // Fallback to jQuery AJAX\n apiCall = jQuery.ajax({\n url: '/wp-json/coca-bais/v1/save-post-meta',\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(parsedData),\n beforeSend: function(xhr) {\n // Add nonce if available\n var nonce = jQuery('#_wpnonce').val() || jQuery('input[name=\"_wpnonce\"]').val();\n if (nonce) {\n xhr.setRequestHeader('X-WP-Nonce', nonce);\n }\n }\n });\n }\n \n // Handle API response\n apiCall.then(function(response) {\n submitFormSafely(form, publishAction, false);\n }).catch(function(error) {\n console.error('Meta save failed:', error);\n \n var continueAnyway = confirm('Failed to save meta data. Do you want to continue anyway?');\n if (continueAnyway) {\n submitFormSafely(form, publishAction, false);\n } else {\n isProcessing = false;\n }\n });\n }\n \n // Reset button tracking\n lastClickedButton = null;\n });\n \n // Cross-browser safe form submission\n function submitFormSafely(form, isPublish, isRetry) {\n try {\n // Remove event handlers to prevent infinite loop\n jQuery(form).off('submit');\n jQuery('.post-type-coca_bais form#post input[type=\"submit\"], .post-type-coca_bais form#post button[type=\"submit\"]').off('click touchstart');\n \n // 🛠 FIX: Clear WordPress \"unsaved changes\" warning\n window.onbeforeunload = null;\n jQuery(window).off('beforeunload');\n \n if (isPublish) {\n // Set post status fields for different WordPress setups\n var statusFields = ['#post_status', '#original_post_status', '#hidden_post_status'];\n statusFields.forEach(function(selector) {\n if (jQuery(selector).length) {\n jQuery(selector).val('publish');\n }\n });\n \n // Remove any existing hidden publish inputs\n jQuery('input[name=\"publish\"][type=\"hidden\"]').remove();\n \n // Add hidden publish input\n jQuery('<input>').attr({\n type: 'hidden',\n name: 'publish',\n value: 'Publish'\n }).appendTo(form);\n \n // Set post action if field exists\n if (jQuery('#post_action').length) {\n jQuery('#post_action').val('publish');\n }\n }\n \n // Cross-browser form submission\n var submitFunction = function() {\n isProcessing = false;\n \n // Try different submission methods\n if (form.submit && typeof form.submit === 'function') {\n form.submit();\n } else {\n // Fallback: create and click a submit button\n var submitBtn = document.createElement('input');\n submitBtn.type = 'submit';\n submitBtn.style.display = 'none';\n if (isPublish) {\n submitBtn.name = 'publish';\n submitBtn.value = 'Publish';\n }\n form.appendChild(submitBtn);\n submitBtn.click();\n }\n };\n \n // Different browsers need different timing\n var userAgent = navigator.userAgent.toLowerCase();\n if (userAgent.indexOf('safari') !== -1 && userAgent.indexOf('chrome') === -1) {\n // Safari needs more delay\n setTimeout(submitFunction, 150);\n } else if (userAgent.indexOf('firefox') !== -1) {\n // Firefox can be immediate\n setTimeout(submitFunction, 10);\n } else {\n // Chrome and others\n setTimeout(submitFunction, 50);\n }\n \n } catch (e) {\n console.error('Form submission error:', e);\n isProcessing = false;\n \n // Ultimate fallback - reload page with query params\n if (!isRetry) {\n var url = window.location.href;\n url += (url.indexOf('?') !== -1 ? '&' : '?') + 'submit_failed=1';\n window.location.href = url;\n }\n }\n }\n \n // Reinitialize button capture after AJAX calls (for dynamic content)\n jQuery(document).ajaxComplete(function() {\n setTimeout(captureButtonClick, 100);\n });\n \n // Handle page visibility change (mobile browsers)\n if (document.addEventListener) {\n document.addEventListener('visibilitychange', function() {\n if (!document.hidden) {\n isProcessing = false; // Reset processing flag when page becomes visible\n }\n });\n }\n});"],"names":["jQuery","apiFetch","document","ready","lastClickedButton","isProcessing","captureButtonClick","on","e","clickedAt","Date","now","buttonName","attr","buttonValue","val","text","buttonId","isPublishAction","button","name","value","id","className","indexOf","event","savedOptions","window","localStorage","getItem","console","warn","form","clickedButton","activeElement","is","find","first","publishAction","parsedData","JSON","parse","error","continueAnyway","confirm","preventDefault","post_id","intended_status","apiCall","wp","path","method","data","ajax","url","contentType","stringify","beforeSend","xhr","nonce","setRequestHeader","then","response","submitFormSafely","catch","isPublish","isRetry","off","onbeforeunload","statusFields","forEach","selector","length","remove","type","appendTo","submitFunction","submit","submitBtn","createElement","style","display","appendChild","click","userAgent","navigator","toLowerCase","setTimeout","location","href","ajaxComplete","addEventListener","hidden"],"sourceRoot":""}1 {"version":3,"file":"admin/js/save-post.js","mappings":"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","sources":["webpack://@codecanel/before-after-image-slider/external window [\"wp\",\"apiFetch\"]","webpack://@codecanel/before-after-image-slider/external window \"jQuery\"","webpack://@codecanel/before-after-image-slider/webpack/bootstrap","webpack://@codecanel/before-after-image-slider/webpack/runtime/compat get default export","webpack://@codecanel/before-after-image-slider/webpack/runtime/define property getters","webpack://@codecanel/before-after-image-slider/webpack/runtime/hasOwnProperty shorthand","webpack://@codecanel/before-after-image-slider/webpack/runtime/make namespace object","webpack://@codecanel/before-after-image-slider/./src/admin/scripts/save-post.js"],"sourcesContent":["module.exports = window[\"wp\"][\"apiFetch\"];","module.exports = window[\"jQuery\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// External dependencies\nimport jQuery from 'jquery';\n\n// Wordpress dependencies\nimport apiFetch from '@wordpress/api-fetch';\n\n// jQuery( document ).ready( () => {\n// \tjQuery( '.post-type-coca_bais form#post' ).on( 'submit', ( ) => {\n// \t\t// Saved data from browser storage.\n// \t\tconst savedOptions = window.localStorage.getItem( 'coca_bais_data' );\n\n// \t\tif ( !! savedOptions && !! JSON.parse( savedOptions ) ) {\n// \t\t\tapiFetch( { path: '/coca-bais/v1/save-post-meta', method: 'post', data: JSON.parse( savedOptions ) } );\n// \t\t}\n\n// \t\t// Just land here.\n// \t\t// event.preventDefault();\n// \t} );\n// } );\njQuery(document).ready(function() {\n var lastClickedButton = null;\n var isProcessing = false;\n \n // Cross-browser button capture\n function captureButtonClick() {\n jQuery('.post-type-coca_bais form#post input[type=\"submit\"], .post-type-coca_bais form#post button[type=\"submit\"]').on('click touchstart', function(e) {\n lastClickedButton = jQuery(this);\n \n // Store additional button info for cross-browser compatibility\n lastClickedButton.clickedAt = Date.now();\n lastClickedButton.buttonName = jQuery(this).attr('name') || '';\n lastClickedButton.buttonValue = jQuery(this).val() || jQuery(this).text() || '';\n lastClickedButton.buttonId = jQuery(this).attr('id') || '';\n });\n }\n \n // Initialize button capture\n captureButtonClick();\n \n // Cross-browser publish action detection\n function isPublishAction(button) {\n if (!button) return false;\n \n var name = button.buttonName || button.attr('name') || '';\n var value = button.buttonValue || button.val() || button.text() || '';\n var id = button.buttonId || button.attr('id') || '';\n var className = button.attr('class') || '';\n \n return (\n name === 'publish' || \n value === 'Publish' ||\n value.indexOf('Publish') !== -1 ||\n id === 'publish' ||\n id.indexOf('publish') !== -1 ||\n className.indexOf('publish') !== -1 ||\n className.indexOf('editor-post-publish-button') !== -1\n );\n }\n \n // Form submission handler\n jQuery('.post-type-coca_bais form#post').on('submit', function(event) {\n // Prevent double processing\n if (isProcessing) {\n return false;\n }\n \n var savedOptions;\n try {\n savedOptions = window.localStorage.getItem('coca_bais_data');\n } catch (e) {\n // localStorage not supported or blocked\n console.warn('localStorage not available:', e);\n return; // Let form submit normally\n }\n \n if (!savedOptions) return; // Let form submit normally\n \n var form = this;\n var clickedButton = lastClickedButton;\n \n // Fallback button detection for browsers that don't capture click properly\n if (!clickedButton || (Date.now() - (clickedButton.clickedAt || 0)) > 5000) {\n // Look for recently focused elements or form submitter\n clickedButton = jQuery(document.activeElement);\n \n // If that doesn't work, look for publish buttons in the form\n if (!clickedButton || !clickedButton.is('input, button')) {\n clickedButton = jQuery(form).find('input[name=\"publish\"], button[name=\"publish\"], #publish, .editor-post-publish-button').first();\n }\n }\n \n var publishAction = isPublishAction(clickedButton);\n \n var parsedData;\n try {\n parsedData = JSON.parse(savedOptions);\n } catch (e) {\n console.error('Invalid localStorage JSON:', e);\n \n var continueAnyway = confirm('Invalid meta data format. Do you want to continue anyway?');\n if (!continueAnyway) {\n event.preventDefault();\n return false;\n }\n return; // Let form submit normally\n }\n \n if (parsedData && typeof parsedData === 'object') {\n event.preventDefault();\n isProcessing = true;\n \n // Prepare API data\n parsedData.post_id = jQuery('#post_ID').val();\n parsedData.intended_status = publishAction ? 'publish' : 'draft';\n \n // Cross-browser API call with fallback\n var apiCall;\n if (typeof wp !== 'undefined' && wp.apiFetch) {\n apiCall = wp.apiFetch({\n path: '/coca-bais/v1/save-post-meta',\n method: 'POST',\n data: parsedData\n });\n } else if (typeof apiFetch !== 'undefined') {\n apiCall = apiFetch({\n path: '/coca-bais/v1/save-post-meta',\n method: 'POST',\n data: parsedData\n });\n } else {\n // Fallback to jQuery AJAX\n apiCall = jQuery.ajax({\n url: '/wp-json/coca-bais/v1/save-post-meta',\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(parsedData),\n beforeSend: function(xhr) {\n // Add nonce if available\n var nonce = jQuery('#_wpnonce').val() || jQuery('input[name=\"_wpnonce\"]').val();\n if (nonce) {\n xhr.setRequestHeader('X-WP-Nonce', nonce);\n }\n }\n });\n }\n \n // Handle API response\n apiCall.then(function(response) {\n submitFormSafely(form, publishAction, false);\n }).catch(function(error) {\n console.error('Meta save failed:', error);\n \n var continueAnyway = confirm('Failed to save meta data. Do you want to continue anyway?');\n if (continueAnyway) {\n submitFormSafely(form, publishAction, false);\n } else {\n isProcessing = false;\n }\n });\n }\n \n // Reset button tracking\n lastClickedButton = null;\n });\n \n // Carousel form submission handler - simpler, just clears beforeunload warning\n jQuery('.post-type-coca_bais_carousel form#post').on('submit', function(event) {\n // Clear WordPress \"unsaved changes\" warning for carousel\n window.onbeforeunload = null;\n jQuery(window).off('beforeunload');\n \n // Let the form submit normally\n return true;\n });\n \n // Cross-browser safe form submission\n function submitFormSafely(form, isPublish, isRetry) {\n try {\n // Remove event handlers to prevent infinite loop\n jQuery(form).off('submit');\n jQuery('.post-type-coca_bais form#post input[type=\"submit\"], .post-type-coca_bais form#post button[type=\"submit\"]').off('click touchstart');\n \n // 🛠 FIX: Clear WordPress \"unsaved changes\" warning\n window.onbeforeunload = null;\n jQuery(window).off('beforeunload');\n \n if (isPublish) {\n // Set post status fields for different WordPress setups\n var statusFields = ['#post_status', '#original_post_status', '#hidden_post_status'];\n statusFields.forEach(function(selector) {\n if (jQuery(selector).length) {\n jQuery(selector).val('publish');\n }\n });\n \n // Remove any existing hidden publish inputs\n jQuery('input[name=\"publish\"][type=\"hidden\"]').remove();\n \n // Add hidden publish input\n jQuery('<input>').attr({\n type: 'hidden',\n name: 'publish',\n value: 'Publish'\n }).appendTo(form);\n \n // Set post action if field exists\n if (jQuery('#post_action').length) {\n jQuery('#post_action').val('publish');\n }\n }\n \n // Cross-browser form submission\n var submitFunction = function() {\n isProcessing = false;\n \n // Try different submission methods\n if (form.submit && typeof form.submit === 'function') {\n form.submit();\n } else {\n // Fallback: create and click a submit button\n var submitBtn = document.createElement('input');\n submitBtn.type = 'submit';\n submitBtn.style.display = 'none';\n if (isPublish) {\n submitBtn.name = 'publish';\n submitBtn.value = 'Publish';\n }\n form.appendChild(submitBtn);\n submitBtn.click();\n }\n };\n \n // Different browsers need different timing\n var userAgent = navigator.userAgent.toLowerCase();\n if (userAgent.indexOf('safari') !== -1 && userAgent.indexOf('chrome') === -1) {\n // Safari needs more delay\n setTimeout(submitFunction, 150);\n } else if (userAgent.indexOf('firefox') !== -1) {\n // Firefox can be immediate\n setTimeout(submitFunction, 10);\n } else {\n // Chrome and others\n setTimeout(submitFunction, 50);\n }\n \n } catch (e) {\n console.error('Form submission error:', e);\n isProcessing = false;\n \n // Ultimate fallback - reload page with query params\n if (!isRetry) {\n var url = window.location.href;\n url += (url.indexOf('?') !== -1 ? '&' : '?') + 'submit_failed=1';\n window.location.href = url;\n }\n }\n }\n \n // Reinitialize button capture after AJAX calls (for dynamic content)\n jQuery(document).ajaxComplete(function() {\n setTimeout(captureButtonClick, 100);\n });\n \n // Handle page visibility change (mobile browsers)\n if (document.addEventListener) {\n document.addEventListener('visibilitychange', function() {\n if (!document.hidden) {\n isProcessing = false; // Reset processing flag when page becomes visible\n }\n });\n }\n});"],"names":["jQuery","apiFetch","document","ready","lastClickedButton","isProcessing","captureButtonClick","on","e","clickedAt","Date","now","buttonName","attr","buttonValue","val","text","buttonId","isPublishAction","button","name","value","id","className","indexOf","event","savedOptions","window","localStorage","getItem","console","warn","form","clickedButton","activeElement","is","find","first","publishAction","parsedData","JSON","parse","error","continueAnyway","confirm","preventDefault","post_id","intended_status","apiCall","wp","path","method","data","ajax","url","contentType","stringify","beforeSend","xhr","nonce","setRequestHeader","then","response","submitFormSafely","catch","onbeforeunload","off","isPublish","isRetry","statusFields","forEach","selector","length","remove","type","appendTo","submitFunction","submit","submitBtn","createElement","style","display","appendChild","click","userAgent","navigator","toLowerCase","setTimeout","location","href","ajaxComplete","addEventListener","hidden"],"sourceRoot":""} -
wp-before-after-image-slider/trunk/assets/common/js/jquery.image-compare.asset.php
r3457783 r3473372 1 <?php return array('dependencies' => array(), 'version' => ' a7670517a4ff18815041');1 <?php return array('dependencies' => array(), 'version' => '5f8f8912d41f475ff872'); -
wp-before-after-image-slider/trunk/assets/common/js/jquery.image-compare.js
r3457783 r3473372 849 849 if (orientation === "vertical") { 850 850 beforeImg.css("clip", `rect( 0, ${offset.w}, ${offset.ch}, 0)`); 851 // Also update parent div clip for videos 852 if (isIframeOrVideo && beforeImg.parent().length) { 853 beforeImg.parent().css("clip", `rect( 0, ${offset.w}, ${offset.ch}, 0)`); 854 } 851 855 if (hasAfter && !isIframeOrVideo) { 852 856 // Only clip after for images, not for iframes/videos 853 857 afterImg.css("clip", `rect( ${offset.ch}, ${offset.w}, ${offset.h}, 0)`); 854 858 } 859 // Update after parent div clip for videos to allow full visibility 860 if (isIframeOrVideo && afterImg.parent().length) { 861 afterImg.parent().css("clip", `rect( ${offset.ch}, ${offset.w}, ${offset.h}, 0)`); 862 } 855 863 } else { 856 864 beforeImg.css("clip", `rect( 0, ${offset.cw}, ${offset.h}, 0)`); 865 // Also update parent div clip for videos 866 if (isIframeOrVideo && beforeImg.parent().length) { 867 beforeImg.parent().css("clip", `rect( 0, ${offset.cw}, ${offset.h}, 0)`); 868 } 857 869 if (hasAfter && !isIframeOrVideo) { 858 870 // Only clip after for images, not for iframes/videos 859 871 afterImg.css("clip", `rect( 0, ${offset.w}, ${offset.h} , ${offset.cw})`); 872 } 873 // Update after parent div clip for videos to allow full visibility 874 if (isIframeOrVideo && afterImg.parent().length) { 875 afterImg.parent().css("clip", `rect( 0, ${offset.w}, ${offset.h} , ${offset.cw})`); 860 876 } 861 877 } -
wp-before-after-image-slider/trunk/assets/common/js/jquery.image-compare.js.map
r3457783 r3473372 1 {"version":3,"file":"common/js/jquery.image-compare.js","mappings":";;;AAAA;AACA,IAAIA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,MAAMC,WAAW,GAAG,CAAC,CAAC;AACtB,IAAIC,YAAY,GAAG,CAAC,CAAC;AACrB,IAAIC,GAAG,GAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;AAC1CF,GAAG,CAACG,GAAG,GAAG,oCAAoC;AAC9C,IAAIC,cAAc,GAAGH,QAAQ,CAACI,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE/DD,cAAc,CAACE,UAAU,CAACC,YAAY,CAACP,GAAG,EAAEI,cAAc,CAAC;;AAE3D;AACA,CAAC,YAAW;EACX,IAAI,OAAOI,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,OAAO,EAAE;IACpD;IACA,MAAMC,YAAY,GAAIC,IAAI,IAAK;MAC9B,MAAMC,OAAO,GAAGD,IAAI,CAACE,IAAI,CAAC,GAAG,CAAC;MAC9B,MAAMC,cAAc,GAAGF,OAAO,CAACG,QAAQ,CAAC,4CAA4C,CAAC,IAC7EH,OAAO,CAACG,QAAQ,CAAC,kBAAkB,CAAC,IACnCH,OAAO,CAACG,QAAQ,CAAC,cAAc,CAAC,IAAIH,OAAO,CAACG,QAAQ,CAAC,WAAW,CAAE;;MAE3E;MACA,KAAK,IAAIC,GAAG,IAAIL,IAAI,EAAE;QACrB,IAAIK,GAAG,YAAYC,KAAK,IAAID,GAAG,CAACJ,OAAO,IACtCI,GAAG,CAACJ,OAAO,CAACG,QAAQ,CAAC,4CAA4C,CAAC,EAAE;UACpE,OAAO,IAAI;QACZ;QACA,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACD,QAAQ,CAAC,kBAAkB,CAAC,EAAE;UAChE,OAAO,IAAI;QACZ;MACD;MAEA,OAAOD,cAAc;IACtB,CAAC;;IAED;IACA,IAAIN,MAAM,CAACC,OAAO,CAACS,KAAK,EAAE;MACzB,MAAMC,oBAAoB,GAAGX,MAAM,CAACC,OAAO,CAACS,KAAK;MACjDV,MAAM,CAACC,OAAO,CAACS,KAAK,GAAG,UAAS,GAAGP,IAAI,EAAE;QACxC,IAAID,YAAY,CAACC,IAAI,CAAC,EAAE;QACxBQ,oBAAoB,CAACC,KAAK,CAACX,OAAO,EAAEE,IAAI,CAAC;MAC1C,CAAC;IACF;;IAEA;IACA,IAAIH,MAAM,CAACC,OAAO,CAACY,IAAI,EAAE;MACxB,MAAMC,mBAAmB,GAAGd,MAAM,CAACC,OAAO,CAACY,IAAI;MAC/Cb,MAAM,CAACC,OAAO,CAACY,IAAI,GAAG,UAAS,GAAGV,IAAI,EAAE;QACvC,IAAID,YAAY,CAACC,IAAI,CAAC,EAAE;QACxBW,mBAAmB,CAACF,KAAK,CAACX,OAAO,EAAEE,IAAI,CAAC;MACzC,CAAC;IACF;;IAEA;IACA,IAAIH,MAAM,CAACC,OAAO,CAACc,GAAG,EAAE;MACvB,MAAMC,kBAAkB,GAAGhB,MAAM,CAACC,OAAO,CAACc,GAAG;MAC7Cf,MAAM,CAACC,OAAO,CAACc,GAAG,GAAG,UAAS,GAAGZ,IAAI,EAAE;QACtC,IAAID,YAAY,CAACC,IAAI,CAAC,EAAE;QACxBa,kBAAkB,CAACJ,KAAK,CAACX,OAAO,EAAEE,IAAI,CAAC;MACxC,CAAC;IACF;;IAEA;IACA,MAAMc,eAAe,GAAGjB,MAAM,CAACkB,OAAO;IACtClB,MAAM,CAACkB,OAAO,GAAG,UAASd,OAAO,EAAEe,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEX,KAAK,EAAE;MAChE,IAAIN,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;QAC3C,IAAIA,OAAO,CAACG,QAAQ,CAAC,4CAA4C,CAAC,IAChEY,MAAM,IAAIA,MAAM,CAACZ,QAAQ,CAAC,kBAAkB,CAAE,EAAE;UACjD,OAAO,IAAI,CAAC,CAAC;QACd;MACD;MACA,IAAIU,eAAe,EAAE;QACpB,OAAOA,eAAe,CAACK,IAAI,CAAC,IAAI,EAAElB,OAAO,EAAEe,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEX,KAAK,CAAC;MACzE;MACA,OAAO,KAAK;IACb,CAAC;EACF;AACD,CAAC,EAAE,CAAC;;AAEJ;AACA,MAAMa,iBAAiB,GAAG,IAAIC,GAAG,CAAC,CAAC;AAEnC,SAASC,qBAAqBA,CAAA,EAAG;EAChChC,QAAQ,CACNiC,gBAAgB,CAAC,iEAAiE,CAAC,CACnFC,OAAO,CAAC,UAAUC,YAAY,EAAE;IAChC,MAAMC,SAAS,GAAGC,UAAU,CAACF,YAAY,CAACG,OAAO,CAACF,SAAS,CAAC,IAAI,CAAC;IACjE,MAAMG,OAAO,GAAGF,UAAU,CAACF,YAAY,CAACG,OAAO,CAACC,OAAO,CAAC,IAAIJ,YAAY,CAACK,QAAQ;IACjF,MAAMC,OAAO,GAAGN,YAAY,CAACO,YAAY,CAAC,MAAM,CAAC;IACjD,MAAMC,WAAW,GAAGR,YAAY,CAACO,YAAY,CAAC,UAAU,CAAC;IACzD,MAAME,kBAAkB,GACvBT,YAAY,CAACU,aAAa,CAACA,aAAa,CAACA,aAAa,CAACA,aAAa,CAACC,gBAAgB,CAACC,iBAAiB;IAExG,IAAIJ,WAAW,EAAE;MAChBC,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;MACzDN,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;MACpDP,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;MACvDN,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;IACvD;;IAEA;IACA,IAAIf,SAAS,GAAG,CAAC,EAAE;MAClBD,YAAY,CAACiB,WAAW,GAAGhB,SAAS;IACrC;;IAEA;IACA,IAAIG,OAAO,GAAG,CAAC,EAAE;MAChBJ,YAAY,CAACkB,gBAAgB,CAAC,YAAY,EAAE,YAAY;QACvD,IAAI,IAAI,CAACD,WAAW,IAAIb,OAAO,EAAE;UAChC,IAAIE,OAAO,EAAE;YACZ,IAAI,CAACW,WAAW,GAAGhB,SAAS;UAC7B,CAAC,MAAM;YACN;YACA,MAAMkB,SAAS,GAAGC,CAAC,CAAC,IAAI,CAAC,CAACC,OAAO,CAAC,+BAA+B,CAAC;YAClE,MAAMC,gBAAgB,GAAGH,SAAS,CAACI,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,IAChEJ,SAAS,CAACK,IAAI,CAAC,yBAAyB,CAAC,KAAK,MAAM,IACpDL,SAAS,CAACK,IAAI,CAAC,yBAAyB,CAAC,KAAK,GAAG;;YAEvD;YACA,IAAI,CAACF,gBAAgB,EAAE;cACtBb,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;cACzDN,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;cACpDP,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;cACvDN,kBAAkB,CAACI,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACvD;YAEA,IAAI,CAACS,KAAK,CAAC,CAAC;YACZ,IAAI,CAACR,WAAW,GAAGhB,SAAS;UAC7B;QACD;MACD,CAAC,CAAC;IACH;;IAEA;IACAD,YAAY,CAACkB,gBAAgB,CAAC,MAAM,EAAE,YAAY;MACjD,IAAI,IAAI,CAACD,WAAW,GAAGhB,SAAS,IAAKG,OAAO,GAAG,CAAC,IAAI,IAAI,CAACa,WAAW,GAAGb,OAAQ,EAAE;QAChF,IAAI,CAACa,WAAW,GAAGhB,SAAS;MAC7B;IACD,CAAC,CAAC;IAEFpC,QAAQ,CAACqD,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;MACnD,MAAMQ,MAAM,GAAG7D,QAAQ,CAACiC,gBAAgB,CACvC,iEACD,CAAC;MAED,IAAIjC,QAAQ,CAAC8D,MAAM,EAAE;QACpB;QACAD,MAAM,CAAC3B,OAAO,CAAE6B,KAAK,IAAK;UACzB,IAAI,CAACA,KAAK,CAACC,MAAM,IAAI,CAACD,KAAK,CAACE,KAAK,EAAE;YAClCnC,iBAAiB,CAACoC,GAAG,CAACH,KAAK,EAAEA,KAAK,CAACX,WAAW,CAAC;YAC/CW,KAAK,CAACH,KAAK,CAAC,CAAC;UACd;QACD,CAAC,CAAC;MACH,CAAC,MAAM;QACN;QACA9B,iBAAiB,CAACI,OAAO,CAAC,CAACiC,IAAI,EAAEJ,KAAK,KAAK;UAC1CA,KAAK,CAACX,WAAW,GAAGe,IAAI;UACxBJ,KAAK,CAACK,IAAI,CAAC,CAAC;QACb,CAAC,CAAC;QACFtC,iBAAiB,CAACuC,KAAK,CAAC,CAAC;MAC1B;IACD,CAAC,CAAC;EACF,CAAC,CAAC;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,kBAAkBA,CAAA,EAAG;EAC7B,IAAI,OAAOC,EAAE,KAAK,WAAW,IAAI,OAAOA,EAAE,CAACC,MAAM,KAAK,WAAW,EAAE;IAClEC,UAAU,CAACH,kBAAkB,EAAE,GAAG,CAAC;IACnC;EACD;;EAEA;EACAtE,QAAQ,CAACiC,gBAAgB,CAAC,6BAA6B,CAAC,CAACC,OAAO,CAAC,UAAUoB,SAAS,EAAE;IACrF,MAAMoB,OAAO,GACZpB,SAAS,EAAEP,iBAAiB,EAAEA,iBAAiB,EAAE2B,OAAO,IACxDpB,SAAS,EAAER,gBAAgB,EAAEC,iBAAiB,EAAE2B,OAAO;IACxD,MAAMC,SAAS,GAAGrB,SAAS,CAACT,aAAa,CAACA,aAAa,CAAC+B,SAAS;IACjE,MAAM5B,QAAQ,GAAG2B,SAAS,CAAC3B,QAAQ;IAEnC,IAAI0B,OAAO,KAAK,EAAE,IAAIA,OAAO,KAAK,QAAQ,EAAE;MAC3C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","sources":["webpack://@codecanel/before-after-image-slider/./src/common/scripts/jquery.image-compare.js"],"sourcesContent":["// Define image compare function.\nlet players = {}; // Store players in an object\nconst intervalMap = {};\nvar vimeoPlayers = {};\nvar tag = document.createElement(\"script\");\ntag.src = \"https://www.youtube.com/iframe_api\";\nvar firstScriptTag = document.getElementsByTagName(\"script\")[0];\n\nfirstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n// Suppress Firefox YouTube widget API console errors and warnings\n(function() {\n\tif (typeof window !== 'undefined' && window.console) {\n\t\t// Function to check if error should be filtered\n\t\tconst shouldFilter = (args) => {\n\t\t\tconst message = args.join(' ');\n\t\t\tconst hasWidgetError = message.includes('An invalid or illegal string was specified') ||\n\t\t\t\t\t\t\t\t message.includes('www-widgetapi.js') ||\n\t\t\t\t\t\t\t\t (message.includes('DOMException') && message.includes('widgetapi'));\n\t\t\t\n\t\t\t// Also check individual arguments for error objects\n\t\t\tfor (let arg of args) {\n\t\t\t\tif (arg instanceof Error && arg.message && \n\t\t\t\t\targ.message.includes('An invalid or illegal string was specified')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (typeof arg === 'string' && arg.includes('www-widgetapi.js')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn hasWidgetError;\n\t\t};\n\n\t\t// Filter console.error\n\t\tif (window.console.error) {\n\t\t\tconst originalConsoleError = window.console.error;\n\t\t\twindow.console.error = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleError.apply(console, args);\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Filter console.warn\n\t\tif (window.console.warn) {\n\t\t\tconst originalConsoleWarn = window.console.warn;\n\t\t\twindow.console.warn = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleWarn.apply(console, args);\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Filter console.log (some errors might be logged here)\n\t\tif (window.console.log) {\n\t\t\tconst originalConsoleLog = window.console.log;\n\t\t\twindow.console.log = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleLog.apply(console, args);\n\t\t\t};\n\t\t}\n\n\t\t// Override window.onerror for uncaught exceptions\n\t\tconst originalOnError = window.onerror;\n\t\twindow.onerror = function(message, source, lineno, colno, error) {\n\t\t\tif (message && typeof message === 'string') {\n\t\t\t\tif (message.includes('An invalid or illegal string was specified') ||\n\t\t\t\t\t(source && source.includes('www-widgetapi.js'))) {\n\t\t\t\t\treturn true; // Prevent default error handling\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (originalOnError) {\n\t\t\t\treturn originalOnError.call(this, message, source, lineno, colno, error);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n})();\n\n// Initialize HTML5 video elements with start and end time controls\nconst html5PausedVideos = new Map();\n\nfunction initHTML5VideoPlayers() {\n\tdocument\n\t\t.querySelectorAll(\"video.coca-image-compare-before, video.coca-image-compare-after\")\n\t\t.forEach(function (videoElement) {\n\t\t\tconst startTime = parseFloat(videoElement.dataset.startTime) || 0;\n\t\t\tconst endTime = parseFloat(videoElement.dataset.endTime) || videoElement.duration;\n\t\t\tconst hasLoop = videoElement.hasAttribute(\"loop\");\n\t\t\tconst hasAutoPlay = videoElement.hasAttribute(\"autoplay\");\n\t\t\tconst playPauseContainer =\n\t\t\t\tvideoElement.parentElement.parentElement.parentElement.parentElement.lastElementChild.firstElementChild;\n\n\t\t\tif (hasAutoPlay) {\n\t\t\t\tplayPauseContainer.children[1].classList.remove(\"hidden\");\n\t\t\t\tplayPauseContainer.children[1].classList.add(\"show\");\n\t\t\t\tplayPauseContainer.children[0].classList.remove(\"show\");\n\t\t\t\tplayPauseContainer.children[0].classList.add(\"hidden\");\n\t\t\t}\n\n\t\t\t// Set initial time to start time\n\t\t\tif (startTime > 0) {\n\t\t\t\tvideoElement.currentTime = startTime;\n\t\t\t}\n\n\t\t\t// Add timeupdate event listener to handle end time\n\t\t\tif (endTime > 0) {\n\t\t\t\tvideoElement.addEventListener(\"timeupdate\", function () {\n\t\t\t\t\tif (this.currentTime >= endTime) {\n\t\t\t\t\t\tif (hasLoop) {\n\t\t\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Check if auto slide is enabled - if so, don't change the icon state\n\t\t\t\t\t\t\tconst container = $(this).closest('.coca-image-compare-container');\n\t\t\t\t\t\t\tconst autoSlideEnabled = container.data('auto-slide-enabled') === true || \n\t\t\t\t\t\t\t\t\t\t\t\t\tcontainer.attr('data-auto-slide-enabled') === 'true' ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontainer.attr('data-auto-slide-enabled') === '1';\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Only change to play icon if auto slide is NOT enabled\n\t\t\t\t\t\t\tif (!autoSlideEnabled) {\n\t\t\t\t\t\t\t\tplayPauseContainer.children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add play event listener to ensure it starts from start time\n\t\t\tvideoElement.addEventListener(\"play\", function () {\n\t\t\t\tif (this.currentTime < startTime || (endTime > 0 && this.currentTime > endTime)) {\n\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\tconst videos = document.querySelectorAll(\n\t\t\t\t\t\"video.coca-image-compare-before, video.coca-image-compare-after\",\n\t\t\t\t);\n\n\t\t\t\tif (document.hidden) {\n\t\t\t\t\t// Pause and remember current time\n\t\t\t\t\tvideos.forEach((video) => {\n\t\t\t\t\t\tif (!video.paused && !video.ended) {\n\t\t\t\t\t\t\thtml5PausedVideos.set(video, video.currentTime);\n\t\t\t\t\t\t\tvideo.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Resume from stored time\n\t\t\t\t\thtml5PausedVideos.forEach((time, video) => {\n\t\t\t\t\t\tvideo.currentTime = time;\n\t\t\t\t\t\tvideo.play();\n\t\t\t\t\t});\n\t\t\t\t\thtml5PausedVideos.clear();\n\t\t\t\t}\n\t\t\t});\n\t\t });\n}\n\n// function initYouTubePlayers() {\n// \tif (typeof YT === \"undefined\" || typeof YT.Player === \"undefined\") {\n// \t\tsetTimeout(initYouTubePlayers, 100);\n// \t\treturn;\n// \t}\n\n// \t// Initialize players for each video container\n// \tdocument.querySelectorAll(\".coca-video-compare-wrapper\").forEach(function (container) {\n// \t\tconst tagName = container.firstElementChild.firstElementChild.tagName;\n// \t\tconst playPause = container.parentElement.parentElement.lastChild;\n// \t\tconst children = playPause.children;\n\n// \t\tif (tagName !== \"\" && tagName === \"IFRAME\") {\n// \t\t\tconst firstIframe = container.firstElementChild.firstElementChild;\n// \t\t\tconst lastIframe = container.lastElementChild.firstElementChild;\n\n// \t\t\tif (!players[firstIframe.id]) {\n// \t\t\t\tplayers[firstIframe.id] = new YT.Player(firstIframe.id, {\n// \t\t\t\t\tplayerVars: {\n// \t\t\t\t\t\tcontrols: 0,\n// \t\t\t\t\t\trel: 0,\n// \t\t\t\t\t\tfs: 0,\n// \t\t\t\t\t\tmute: 1,\n// \t\t\t\t\t\tenablejsapi: 1,\n// \t\t\t\t\t},\n// \t\t\t\t\tevents: {\n// \t\t\t\t\t\tonReady: (event) => {\n// \t\t\t\t\t\t\tif (intervalMap[firstIframe.id]) {\n// \t\t\t\t\t\t\t\tclearInterval(intervalMap[firstIframe.id]);\n// \t\t\t\t\t\t\t}\n\n// \t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n// \t\t\t\t\t\t\tconst { start, end, autoplay, loop } = Object.fromEntries(\n// \t\t\t\t\t\t\t\tyoutubeUrl.searchParams.entries(),\n// \t\t\t\t\t\t\t);\n\n// \t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n// \t\t\t\t\t\t\tconst endTime = parseFloat(end || event.target.getDuration());\n\n// \t\t\t\t\t\t\tif (autoplay) {\n// \t\t\t\t\t\t\t\tif (!isNaN(startTime)) {\n// \t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"show\");\n// \t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"hidden\");\n\n// \t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t}\n\n// \t\t\t\t\t\t\t// Setup loop interval\n// \t\t\t\t\t\t\tconst intervalId = setInterval(() => {\n// \t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n// \t\t\t\t\t\t\t\tif (loop) {\n// \t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n// \t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t} else {\n// \t\t\t\t\t\t\t\t\tif (currentTime > endTime) {\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t}, 500);\n\n// \t\t\t\t\t\t\t// Store the interval ID to clean later\n// \t\t\t\t\t\t\tintervalMap[firstIframe.id] = intervalId;\n// \t\t\t\t\t\t},\n// \t\t\t\t\t},\n// \t\t\t\t});\n// \t\t\t}\n\n// \t\t\tif (!players[lastIframe.id]) {\n// \t\t\t\tplayers[lastIframe.id] = new YT.Player(lastIframe.id, {\n// \t\t\t\t\tplayerVars: {\n// \t\t\t\t\t\tcontrols: 0,\n// \t\t\t\t\t\trel: 0,\n// \t\t\t\t\t\tfs: 0,\n// \t\t\t\t\t\tmute: 1,\n// \t\t\t\t\t\tenablejsapi: 1,\n// \t\t\t\t\t},\n// \t\t\t\t\tevents: {\n// \t\t\t\t\t\tonReady: (event) => {\n// \t\t\t\t\t\t\tif (intervalMap[lastIframe.id]) {\n// \t\t\t\t\t\t\t\tclearInterval(intervalMap[lastIframe.id]);\n// \t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n// \t\t\t\t\t\t\tconst { start, end, loop } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n// \t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n// \t\t\t\t\t\t\tconst endTime = parseFloat(end || event.target.getDuration());\n\n// \t\t\t\t\t\t\t// Setup loop interval\n// \t\t\t\t\t\t\tconst intervalId = setInterval(() => {\n// \t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n// \t\t\t\t\t\t\t\tif (loop) {\n// \t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n// \t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t} else {\n// \t\t\t\t\t\t\t\t\tif (currentTime > endTime) {\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t}, 500);\n\n// \t\t\t\t\t\t\t// Store the interval ID to clean later\n// \t\t\t\t\t\t\tintervalMap[lastIframe.id] = intervalId;\n// \t\t\t\t\t\t},\n// \t\t\t\t\t},\n// \t\t\t\t});\n// \t\t\t}\n// \t\t}\n// \t});\n// }\n\nfunction initYouTubePlayers() {\n\tif (typeof YT === \"undefined\" || typeof YT.Player === \"undefined\") {\n\t\tsetTimeout(initYouTubePlayers, 100);\n\t\treturn;\n\t}\n\n\t// Initialize players for each video container\n\tdocument.querySelectorAll(\".coca-video-compare-wrapper\").forEach(function (container) {\n\t\tconst tagName =\n\t\t\tcontainer?.firstElementChild?.firstElementChild?.tagName ||\n\t\t\tcontainer?.lastElementChild?.firstElementChild?.tagName;\n\t\tconst playPause = container.parentElement.parentElement.lastChild;\n\t\tconst children = playPause.children;\n\n\t\tif (tagName !== \"\" && tagName === \"IFRAME\") {\n\t\t\tconst firstIframe = container.firstElementChild.firstElementChild;\n\t\t\tconst lastIframe = container.lastElementChild.firstElementChild;\n\n\t\t\tif (firstIframe?.id && !players[firstIframe?.id]) {\n\t\t\t\tplayers[firstIframe.id] = new YT.Player(firstIframe.id, {\n\t\t\t\t\tplayerVars: {\n\t\t\t\t\t\tcontrols: 0,\n\t\t\t\t\t\trel: 0,\n\t\t\t\t\t\tfs: 0,\n\t\t\t\t\t\tmute: 1,\n\t\t\t\t\t\tenablejsapi: 1,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tonReady: (event) => {\n\t\t\t\t\t\t\t// Clean up any existing intervals/animation frames\n\t\t\t\t\t\t\tif (intervalMap[firstIframe.id]) {\n\t\t\t\t\t\t\t\t// Could be either setInterval or requestAnimationFrame\n\t\t\t\t\t\t\t\tif (typeof intervalMap[firstIframe.id] === \"function\") {\n\t\t\t\t\t\t\t\t\tintervalMap[firstIframe.id]();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclearInterval(intervalMap[firstIframe.id]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n\t\t\t\t\t\t\tconst { start, end, autoplay, loop } = Object.fromEntries(\n\t\t\t\t\t\t\t\tyoutubeUrl.searchParams.entries(),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n\t\t\t\t\t\t\t// Safe getDuration call with fallback\n\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t} else if (typeof event.target.getDuration === 'function') {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tendTime = event.target.getDuration();\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (autoplay && autoplay !== \"0\") {\n\t\t\t\t\t\t\t\tif (!isNaN(startTime)) {\n\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"show\");\n\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"show\");\n\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"hidden\");\n\n\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Setup requestAnimationFrame loop for smoother performance\n\t\t\t\t\t\t\tlet rafId;\n\t\t\t\t\t\t\tlet lastCheckTime = 0;\n\n\t\t\t\t\t\t\t// Check video only every 200ms to reduce CPU usage\n\t\t\t\t\t\t\tconst checkVideoTime = (timestamp) => {\n\t\t\t\t\t\t\t\t// Throttle checks to reduce CPU usage (check every 200ms)\n\t\t\t\t\t\t\t\tif (timestamp - lastCheckTime >= 200) {\n\t\t\t\t\t\t\t\t\tlastCheckTime = timestamp;\n\t\t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n\n\t\t\t\t\t\t\t\t\tif (loop && loop !== \"0\") {\n\t\t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (Math.ceil(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue the loop only if player is playing (state 1)\n\t\t\t\t\t\t\t\tif (event.target.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Start the animation frame loop\n\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\n\t\t\t\t\t\t\t// Handle state changes to manage rAF loop\n\t\t\t\t\t\t\tevent.target.addEventListener(\"onStateChange\", (stateEvent) => {\n\t\t\t\t\t\t\t\tif (stateEvent.data === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t// Resume animation frame loop when video plays\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.PAUSED ||\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.ENDED\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Stop animation frame loop when video is paused or ended\n\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst pausedPlayers = {}; // Track paused players and their current times\n\n\t\t\t\t\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\t\t\t\t\tif (document.hidden) {\n\t\t\t\t\t\t\t\t\t// Tab is hidden — pause all playing videos\n\t\t\t\t\t\t\t\t\tObject.entries(players).forEach(([id, player]) => {\n\t\t\t\t\t\t\t\t\t\tconsole.dir(typeof player.getPlayerState);\n\t\t\t\t\t\t\t\t\t\tif (player && typeof player.getPlayerState === \"function\") {\n\t\t\t\t\t\t\t\t\t\t\tif (player.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst time = player.getCurrentTime();\n\t\t\t\t\t\t\t\t\t\t\t\tpausedPlayers[id] = time;\n\t\t\t\t\t\t\t\t\t\t\t\tplayer.pauseVideo();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Tab is visible again — resume paused videos\n\t\t\t\t\t\t\t\t\tObject.entries(pausedPlayers).forEach(([id, time]) => {\n\t\t\t\t\t\t\t\t\t\tconst player = players[id];\n\t\t\t\t\t\t\t\t\t\tif (player && typeof time === \"number\") {\n\t\t\t\t\t\t\t\t\t\t\tplayer.seekTo(time, true);\n\t\t\t\t\t\t\t\t\t\t\tplayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Clear memory\n\t\t\t\t\t\t\t\t\tObject.keys(pausedPlayers).forEach((key) => delete pausedPlayers[key]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Store the cancelAnimationFrame function for cleanup\n\t\t\t\t\t\t\tintervalMap[firstIframe.id] = () => cancelAnimationFrame(rafId);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (lastIframe?.id && !players[lastIframe?.id]) {\n\t\t\t\tplayers[lastIframe.id] = new YT.Player(lastIframe.id, {\n\t\t\t\t\tplayerVars: {\n\t\t\t\t\t\tcontrols: 0,\n\t\t\t\t\t\trel: 0,\n\t\t\t\t\t\tfs: 0,\n\t\t\t\t\t\tmute: 1,\n\t\t\t\t\t\tenablejsapi: 1,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tonReady: (event) => {\n\t\t\t\t\t\t\tif (intervalMap[lastIframe.id]) {\n\t\t\t\t\t\t\t\t// Could be either setInterval or requestAnimationFrame\n\t\t\t\t\t\t\t\tif (typeof intervalMap[lastIframe.id] === \"function\") {\n\t\t\t\t\t\t\t\t\tintervalMap[lastIframe.id]();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclearInterval(intervalMap[lastIframe.id]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n\t\t\t\t\t\t\tconst { start, end, loop } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n\t\t\t\t\t\t\t// Safe getDuration call with fallback\n\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t} else if (typeof event.target.getDuration === 'function') {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tendTime = event.target.getDuration();\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Setup requestAnimationFrame loop for smoother performance\n\t\t\t\t\t\t\tlet rafId;\n\t\t\t\t\t\t\tlet lastCheckTime = 0;\n\n\t\t\t\t\t\t\t// Check video only every 200ms to reduce CPU usage\n\t\t\t\t\t\t\tconst checkVideoTime = (timestamp) => {\n\t\t\t\t\t\t\t\t// Throttle checks to reduce CPU usage (check every 200ms)\n\t\t\t\t\t\t\t\tif (timestamp - lastCheckTime >= 200) {\n\t\t\t\t\t\t\t\t\tlastCheckTime = timestamp;\n\t\t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n\n\t\t\t\t\t\t\t\t\tif (loop && loop !== \"0\") {\n\t\t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (Math.ceil(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue the loop only if player is playing (state 1)\n\t\t\t\t\t\t\t\tif (event.target.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Start the animation frame loop\n\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\n\t\t\t\t\t\t\t// Handle state changes to manage rAF loop\n\t\t\t\t\t\t\tevent.target.addEventListener(\"onStateChange\", (stateEvent) => {\n\t\t\t\t\t\t\t\tif (stateEvent.data === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t// Resume animation frame loop when video plays\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.PAUSED ||\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.ENDED\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Stop animation frame loop when video is paused or ended\n\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst pausedPlayers = {}; // Track paused players and their current times\n\n\t\t\t\t\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\t\t\t\t\tif (document.hidden) {\n\t\t\t\t\t\t\t\t\t// Tab is hidden — pause all playing videos\n\t\t\t\t\t\t\t\t\tObject.entries(players).forEach(([id, player]) => {\n\t\t\t\t\t\t\t\t\t\tif (player && typeof player.getPlayerState === \"function\") {\n\t\t\t\t\t\t\t\t\t\t\tif (player.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst time = player.getCurrentTime();\n\t\t\t\t\t\t\t\t\t\t\t\tpausedPlayers[id] = time;\n\t\t\t\t\t\t\t\t\t\t\t\tplayer.pauseVideo();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Tab is visible again — resume paused videos\n\t\t\t\t\t\t\t\t\tObject.entries(pausedPlayers).forEach(([id, time]) => {\n\t\t\t\t\t\t\t\t\t\tconst player = players[id];\n\t\t\t\t\t\t\t\t\t\tif (player && typeof time === \"number\") {\n\t\t\t\t\t\t\t\t\t\t\tplayer.seekTo(time, true);\n\t\t\t\t\t\t\t\t\t\t\tplayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Clear memory\n\t\t\t\t\t\t\t\t\tObject.keys(pausedPlayers).forEach((key) => delete pausedPlayers[key]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Store the cancelAnimationFrame function for cleanup\n\t\t\t\t\t\t\tintervalMap[lastIframe.id] = () => cancelAnimationFrame(rafId);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction onYouTubeIframeAPIReady() {\n\tinitYouTubePlayers();\n\tinitHTML5VideoPlayers();\n}\n\n// Add mutation observer for dynamic content\nconst observeElements = function () {\n\t// Use MutationObserver to detect dynamically added elements\n\tconst observer = new MutationObserver(function (mutations) {\n\t\tmutations.forEach(function (mutation) {\n\t\t\tif (mutation.addedNodes.length) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tinitYouTubePlayers();\n\t\t\t\t\tinitHTML5VideoPlayers();\n\t\t\t\t\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t\t\t\t\tjQuery(this).coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t\t\t\t\tjQuery(this).addClass(\"initialized\");\n\t\t\t\t\t});\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t});\n\t});\n\n\tobserver.observe(document.body, {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t});\n};\n\n// Initialize on document ready and again on window load\njQuery(document).ready(function () {\n\tobserveElements();\n\n\t// Initialize existing sliders\n\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t// Remove any existing duplicate wrappers or controls\n\t\tconst $container = jQuery(this);\n\t\tif (\n\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t) {\n\t\t\t// Unwrap once to fix double wrapping\n\t\t\t$container.unwrap();\n\t\t}\n\n\t\t// Remove any duplicate controls\n\t\tif (\n\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t) {\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t}\n\n\t\t// Initialize\n\t\t$container.coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t$container.addClass(\"initialized\");\n\t});\n});\n\n// Also initialize on window load (after all resources)\njQuery(window).on(\"load\", function () {\n\t// Reinitialize players and sliders\n\tinitYouTubePlayers();\n\tinitHTML5VideoPlayers();\n\n\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t// Remove any existing duplicate wrappers or controls\n\t\tconst $container = jQuery(this);\n\t\tif (\n\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t) {\n\t\t\t// Unwrap once to fix double wrapping\n\t\t\t$container.unwrap();\n\t\t}\n\n\t\t// Remove any duplicate controls\n\t\tif (\n\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t) {\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t}\n\n\t\t// Initialize\n\t\t$container.coca_imageCompare($container.data(\"settings\") || {});\n\t\t$container.addClass(\"initialized\");\n\t});\n});\n\n// Handle Elementor frontend init\njQuery(window).on(\"elementor/frontend/init\", function () {\n\tif (typeof elementorFrontend !== \"undefined\") {\n\t\telementorFrontend.hooks.addAction(\"frontend/element_ready/widget\", function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\t// Clean up any duplicate elements first\n\t\t\t\tjQuery(\".coca-bais-container\").each(function () {\n\t\t\t\t\tconst $container = jQuery(this);\n\n\t\t\t\t\t// Check for double wrapping\n\t\t\t\t\tif (\n\t\t\t\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Unwrap once to fix double wrapping\n\t\t\t\t\t\t$container.unwrap();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove any duplicate controls\n\t\t\t\t\tif (\n\t\t\t\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove duplicate overlay and handle elements inside container\n\t\t\t\t\tconst $overlays = $container.find(\".coca-image-compare-overlay\");\n\t\t\t\t\tif ($overlays.length > 1) {\n\t\t\t\t\t\t$overlays.not(\":first\").remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle specific case for template-style07 with handle-bottom\n\t\t\t\t\t// Remove duplicate handle-wrapper elements\n\t\t\t\t\tconst $handleWrappers = $container.find(\".coca-image-compare-handle-wrapper\");\n\t\t\t\t\tif ($handleWrappers.length > 1) {\n\t\t\t\t\t\t$handleWrappers.last().remove();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst $handles = $container.find(\".coca-image-compare-handle\");\n\t\t\t\t\tif ($handles.length > 1) {\n\t\t\t\t\t\t$handles.not(\":first\").remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tinitYouTubePlayers();\n\t\t\t\tinitHTML5VideoPlayers();\n\n\t\t\t\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t\t\t\tjQuery(this).coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t\t\t\tjQuery(this).addClass(\"initialized\");\n\t\t\t\t});\n\t\t\t}, 500);\n\t\t});\n\t}\n});\n\nwindow.jQuery.fn.coca_imageCompare = function (userOptions) {\n\t// Prevent multiple initializations on the same element\n\tif (this.hasClass(\"initialized\")) {\n\t\treturn this;\n\t}\n\tconst jquery = window.jQuery;\n\tconst defaultOptions = {\n\t\tdefault_offset_pct: 0.5,\n\t\torientation: \"horizontal\",\n\t\tbefore_label: \"Before\",\n\t\tafter_label: \"After\",\n\t\tbefore_image: \"\",\n\t\tafter_image: \"\",\n\t\tindicator_image: \"\",\n\t\tclasses: [],\n\t\tshow_labels: 'yes',\n\t\tno_overlay: false,\n\t\thandle_bottom_only: false,\n\t\tmove_slider_on_hover: false,\n\t\tmove_with_handle_only: true,\n\t\tclick_to_move: false,\n\t\tauto_slide_enabled: false,\n\t\tauto_slide_duration: 4,\n\t\tauto_slide_direction: 'back_and_forth',\n\t\tauto_slide_pause_on_hover: true,\n\t};\n\n\tconst options = jquery.extend(defaultOptions, userOptions);\n\n\treturn this.each(function () {\n\t\tlet imgHeight;\n\t\tlet imgWidth;\n\t\tlet offsetY;\n\t\tlet offsetX;\n\t\tconst container = jquery(this);\n\t\tconst orientation = options.orientation;\n\n\t\tlet tagName;\n\n\t\tif (container.find(\"img\")?.length) {\n\t\t\ttagName = \"img\";\n\t\t} else if (container.find(\"iframe\")?.length) {\n\t\t\ttagName = \"iframe\";\n\t\t} else if (container.find(\"video\")?.length) {\n\t\t\ttagName = \"video\";\n\t\t}\n\n\t\tconst wrapperClassList = [].join.call(options.classes, \" \");\n\t\tconst classPrefix = \"coca-image-compare\";\n\n\t\tconst beforeD = orientation === \"vertical\" ? \"down\" : \"left\";\n\t\tconst afterD = orientation === \"vertical\" ? \"up\" : \"right\";\n\n\t\t// Update wrapper class.\n\t\tconst handleBottomClass = options.handle_bottom_only ? \"handle-bottom\" : \"\";\n\t\tconst noOverlayClass = options.no_overlay ? \"no-overlay\" : \"\";\n\n\t\t// Check if already wrapped\n\t\tif (!container.parent().hasClass(`${classPrefix}-wrapper`)) {\n\t\t\tcontainer.wrap(\n\t\t\t\t`<div class='${wrapperClassList} ${classPrefix}-wrapper ${classPrefix}-${orientation} ${handleBottomClass}'></div>`,\n\t\t\t);\n\t\t}\n\n\t\t// const beforeImg = container.find(\"img:first\");\n\t\t// const afterImg = container.find(\"img:last\");\n\t\tconst beforeImg = container.find(`${tagName}:first`);\n\t\tconst afterImg = container.find(`${tagName}:last`);\n\n\t\tcontainer.addClass(`${classPrefix}-container`);\n\t\tbeforeImg.addClass(`${classPrefix}-before`);\n\t\tafterImg.addClass(`${classPrefix}-after`);\n\n\t\t// create an indicator image feature\n\t\tif (options.indicator_image.length) {\n\t\t\tcontainer.append(jquery(options.indicator_image).addClass(`${classPrefix}-overlay-image`));\n\t\t}\n\n\t\tcontainer.append(`<div class='${classPrefix}-overlay ${noOverlayClass}'></div>`);\n\t\tcontainer.append(`<div class='${classPrefix}-handle'></div>`);\n\n\t\tconst overlay = container.find(`.${classPrefix}-overlay`);\n\t\tconst slider = container.find(`.${classPrefix}-handle`);\n\n\t\t// Set handle position.\n\t\tif (options.handle_bottom_only) {\n\t\t\t// For template-style07, check if it already has a handle wrapper\n\t\t\tif (options.classes && options.classes.includes(\"template-style07\")) {\n\t\t\t\t// First clean up any existing handle wrappers or extra handles\n\t\t\t\tconst existingWrappers = container.find(`.${classPrefix}-handle-wrapper`);\n\t\t\t\tif (existingWrappers.length > 0) {\n\t\t\t\t\t// Keep only the first wrapper\n\t\t\t\t\texistingWrappers.not(\":first\").remove();\n\t\t\t\t\t// Move the slider to the first wrapper if it's not already there\n\t\t\t\t\tif (!slider.parent().hasClass(`${classPrefix}-handle-wrapper`)) {\n\t\t\t\t\t\texistingWrappers.first().append(slider);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No wrappers exist, create one\n\t\t\t\t\tslider.wrap(`<div class='${classPrefix}-handle-wrapper'></div>`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normal behavior for other templates\n\t\t\t\tslider.wrap(`<div class='${classPrefix}-handle-wrapper'></div>`);\n\t\t\t}\n\t\t} else {\n\t\t\tslider.append(`<span class='${classPrefix}-${beforeD}-arrow'></span>`);\n\t\t\tslider.append(`<span class='${classPrefix}-${afterD}-arrow'></span>`);\n\t\t}\n\n\t\t// Add labels.\n\t\tif (options.show_labels !== '') {\n\t\t\tconst quote = options.before_label.indexOf(\"'\") !== -1 ? '\"' : \"'\";\n\t\t\toverlay.append(\n\t\t\t\t`<div class='${classPrefix}-before-label ${options.show_labels}' data-content=${quote}${options.before_label}${quote}></div>`,\n\t\t\t);\n\t\t\toverlay.append(\n\t\t\t\t`<div class='${classPrefix}-after-label ${options.show_labels}' data-content=${quote}${options.after_label}${quote}></div>`,\n\t\t\t);\n\t\t}\n\n\t\tconst calcOffset = (pct) => {\n\t\t\tconst [root] = container;\n\n\t\t\t// remove first.\n\t\t\t// if (root.querySelector(\"img:first-child\").style.width) {\n\t\t\t// \troot.querySelector(\"img:first-child\").style.width = \"\";\n\t\t\t// }\n\t\t\tif (root.querySelector(`${tagName}:first-child`).style.width) {\n\t\t\t\troot.querySelector(`${tagName}:first-child`).style.width = \"\";\n\t\t\t}\n\n\t\t\tconst sampleImageWidth = root.querySelector(`${tagName}:first-child`).width;\n\n\t\t\t// [].forEach.call(root.querySelectorAll(\"img\"), function (imageElement) {\n\t\t\t[].forEach.call(root.querySelectorAll(`${tagName}`), function (imageElement) {\n\t\t\t\t// Set image width.\n\t\t\t\tif (sampleImageWidth > root.clientWidth) {\n\t\t\t\t\timageElement.style.width = `${root.clientWidth}px`;\n\t\t\t\t} else {\n\t\t\t\t\timageElement.style.width = `${sampleImageWidth}px`;\n\t\t\t\t}\n\n\t\t\t\t// Set width and height when not exists.\n\t\t\t\tif (!imageElement.getAttribute(\"width\")) {\n\t\t\t\t\timageElement.setAttribute(\"width\", imageElement.naturalWidth);\n\t\t\t\t}\n\t\t\t\tif (!imageElement.getAttribute(\"height\")) {\n\t\t\t\t\timageElement.setAttribute(\"height\", imageElement.naturalHeight);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// let width = root.querySelector(\"img:first-child\").width;\n\t\t\t// let height = root.querySelector(\"img:first-child\").height;\n\t\t\tlet width = root.querySelector(`${tagName}:first-child`).width;\n\t\t\tlet height = root.querySelector(`${tagName}:first-child`).height;\n\n\t\t\tif (container.hasClass(\"popup-loaded\")) {\n\t\t\t\tconst windowWidth = window.innerWidth;\n\t\t\t\tconst windowHeight = window.innerHeight;\n\n\t\t\t\tconst targetWidth = windowWidth - windowWidth * 0.2;\n\t\t\t\tconst targetHeight = windowHeight - windowHeight * 0.2;\n\n\t\t\t\tconst ratio = width / height;\n\n\t\t\t\tif (ratio > targetWidth / targetHeight) {\n\t\t\t\t\twidth = targetWidth;\n\t\t\t\t\theight = targetWidth / ratio;\n\t\t\t\t} else {\n\t\t\t\t\theight = targetHeight;\n\t\t\t\t\twidth = targetHeight * ratio;\n\t\t\t\t}\n\n\t\t\t\t// [].forEach.call(root.querySelectorAll(\"img\"), function (imageElement) {\n\t\t\t\t[].forEach.call(root.querySelectorAll(`${tagName}`), function (imageElement) {\n\t\t\t\t\timageElement.style.width = `${width}px`;\n\t\t\t\t});\n\n\t\t\t\twidth = root.querySelector(`${tagName}:first-child`).width;\n\t\t\t\theight = root.querySelector(`${tagName}:first-child`).height;\n\t\t\t}\n\n\t\t\tif (tagName !== \"img\") {\n\t\t\t\twidth = container[0].clientWidth;\n\t\t\t}\n\n\t\t\t// Round values to prevent sub-pixel rendering issues (especially for iframes/videos)\n\t\t\t// Sub-pixel values cause shaking/jittering during auto-slide animation\n\t\t\treturn {\n\t\t\t\tw: `${Math.round(width)}px`,\n\t\t\t\th: `${Math.round(height)}px`,\n\t\t\t\tcw: `${Math.round(pct * width)}px`,\n\t\t\t\tch: `${Math.round(pct * height)}px`,\n\t\t\t};\n\t\t};\n\n\t\tconst adjustContainer = function (offset) {\n\t\t\tlet hasAfter;\n\n\t\t\tif (tagName === \"img\") {\n\t\t\t\thasAfter = true;\n\t\t\t} else {\n\t\t\t\thasAfter = afterImg[0].id.includes(\"after\");\n\t\t\t}\n\n\t\t\t// For iframes/videos: only clip the \"before\" element, leave \"after\" unclipped\n\t\t\t// This prevents shaking on Windows Chrome/Edge since the after iframe has no CSS changes\n\t\t\tconst isIframeOrVideo = tagName === \"iframe\" || tagName === \"video\";\n\n\t\t\tif (orientation === \"vertical\") {\n\t\t\t\tbeforeImg.css(\"clip\", `rect( 0, ${offset.w}, ${offset.ch}, 0)`);\n\t\t\t\tif (hasAfter && !isIframeOrVideo) {\n\t\t\t\t\t// Only clip after for images, not for iframes/videos\n\t\t\t\t\tafterImg.css(\"clip\", `rect( ${offset.ch}, ${offset.w}, ${offset.h}, 0)`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbeforeImg.css(\"clip\", `rect( 0, ${offset.cw}, ${offset.h}, 0)`);\n\n\t\t\t\tif (hasAfter && !isIframeOrVideo) {\n\t\t\t\t\t// Only clip after for images, not for iframes/videos\n\t\t\t\t\tafterImg.css(\"clip\", `rect( 0, ${offset.w}, ${offset.h} , ${offset.cw})`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontainer.css(\"height\", offset.h);\n\t\t};\n\n\t\tconst adjustSliderWidth = function (offset) {\n\t\t\tcontainer.css(\"max-width\", offset.w);\n\t\t};\n\n\t\tconst adjustSlider = function (offset) {\n\t\t\t// Parse and round the position value to prevent sub-pixel jittering during auto-slide\n\t\t\tconst position = orientation === \"vertical\" ? offset.ch : offset.cw;\n\t\t\tconst roundedPosition = `${Math.round(parseFloat(position))}px`;\n\t\t\t\n\t\t\tslider.css(orientation === \"vertical\" ? \"top\" : \"left\", roundedPosition);\n\t\t\tadjustContainer(offset);\n\t\t};\n\n\t\t// Return the number specified or the min/max number if it outside the range given.\n\t\tconst minMaxNumber = function (num, min, max) {\n\t\t\treturn Math.max(min, Math.min(max, num));\n\t\t};\n\n\t\t// Calculate the slider percentage based on the position.\n\t\tconst getSliderPercentage = function (positionX, positionY) {\n\t\t\tconst vertical = (positionY - offsetY) / imgHeight;\n\t\t\tconst horizontal = (positionX - offsetX) / imgWidth;\n\t\t\tconst sliderPercentage = orientation === \"vertical\" ? vertical : horizontal;\n\n\t\t\treturn minMaxNumber(sliderPercentage, 0, 1);\n\t\t};\n\n\t\t// Handle label visibility based on slider position\n\t\tconst updateLabelVisibility = function() {\n\t\t\t// Get the current position of the slider\n\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t// Hide the labels based on slider position\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\t// Hide \"Before\" label when slider is close to left edge\n\t\t\t\tif (sliderPosition <= container.width() * 0.05) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\n\t\t\t\t// Hide \"After\" label when slider is close to right edge\n\t\t\t\tif (sliderPosition >= container.width() * 0.95) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if (orientation === \"vertical\") {\n\t\t\t\t// Hide \"Before\" label when slider is close to top edge\n\t\t\t\tif (sliderPosition <= container.height() * 0.05) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\n\t\t\t\t// Hide \"After\" label when slider is close to bottom edge\n\t\t\t\tif (sliderPosition >= container.height() * 0.95) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// jquery( window ).on( 'resize.coca_image_compare', function() {\n\t\t// \tcontainer.imagesLoaded().done( function() {\n\t\t// \t\twindow.setTimeout( function() {\n\t\t// \t\t\tadjustSlider( calcOffset( options.default_offset_pct ) );\n\t\t// \t\t\tcontainer.css( 'opacity', 1 );\n\t\t// \t\t}, 100 );\n\t\t// \t} );\n\t\t// } );\n\n\t\tif (tagName === \"video\") {\n\t\t\tif (!players[beforeImg[0].id]) {\n\t\t\t\tbeforeImg[0].muted = true;\n\t\t\t\tplayers[beforeImg[0].id] = beforeImg[0];\n\t\t\t}\n\n\t\t\tif (!players[afterImg[0].id]) {\n\t\t\t\tafterImg[0].muted = true;\n\t\t\t\tplayers[afterImg[0].id] = afterImg[0];\n\t\t\t}\n\t\t}\n\n\t\tjQuery(document).ready(function ($) {\n\t\t\t// Add class to drag feature\n\t\t\t$(\".coca-bais-container\").each(function () {\n\t\t\t\tlet settings = $(this).attr(\"data-settings\");\n\t\t\t\tif (settings) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet parsedSettings = JSON.parse(settings.replace(/"/g, '\"')); // Convert HTML entities to JSON\n\n\t\t\t\t\t\tif (parsedSettings.move_slider_on_hover === false) {\n\t\t\t\t\t\t\t$(this).addClass(\"coca-slider-hover-false\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error parsing data-settings:\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Add class to hover feature\n\t\t\t$(\".coca-bais-container\").each(function () {\n\t\t\t\tlet settings = $(this).attr(\"data-settings\");\n\t\t\t\tif (settings) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet parsedSettings = JSON.parse(settings.replace(/"/g, '\"')); // Convert HTML entities to JSON\n\n\t\t\t\t\t\tif (parsedSettings.move_slider_on_hover === true) {\n\t\t\t\t\t\t\t$(this).addClass(\"coca-slider-hover-true\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error parsing data-settings:\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Imagesloaded\n\t\t\tcontainer.imagesLoaded().done(function () {\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tconst offset = calcOffset(options.default_offset_pct);\n\t\t\t\t\tadjustSliderWidth(offset);\n\t\t\t\t\tadjustSlider(offset);\n\t\t\t\t\tcontainer.css(\"opacity\", 1);\n\t\t\t\t}, 100);\n\t\t\t});\n\t\t});\n\n\t\toffsetX = 0;\n\t\toffsetY = 0;\n\t\timgWidth = 0;\n\t\timgHeight = 0;\n\n\t\t// On move start event\n\t\tconst onMoveStart = function (e) {\n\t\t\tif (\n\t\t\t\t((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) &&\n\t\t\t\torientation !== \"vertical\"\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if (\n\t\t\t\t((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) &&\n\t\t\t\torientation === \"vertical\"\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tcontainer.addClass(\"active\");\n\t\t\toffsetX = container.offset().left;\n\t\t\toffsetY = container.offset().top;\n\t\t\timgWidth = beforeImg.width();\n\t\t\timgHeight = beforeImg.height();\n\t\t};\n\n\t\t// On move event\n\t\tconst onMove = function (e) {\n\t\t\tcontainer.addClass(\"moving\");\n\n\t\t\tif (container.hasClass(\"active\")) {\n\t\t\t\t// Adjust the slider position based on mouse/touch movement\n\t\t\t\tadjustSlider(calcOffset(getSliderPercentage(e.pageX, e.pageY)));\n\n\t\t\t\t// Update label visibility after slider position changes\n\t\t\t\tupdateLabelVisibility();\n\n\t\t\t\t// Add hover effect when the mouse is moving\n\t\t\t\tif (e.type === \"mousemove\") {\n\t\t\t\t\tjquery(this).find(`.${classPrefix}-overlay`).addClass(\"hover\");\n\t\t\t\t}\n\n\t\t\t\tif (tagName !== \"img\") {\n\t\t\t\t\tconst playPause = container.parent().find(\".video-play-pause\");\n\t\t\t\t\tconst children = playPause[0].children;\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst containerPosition =\n\t\t\t\t\t\toptions.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\n\t\t\t\t\t// Get current slider position\n\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\n\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tif (beforePlayer && beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof beforePlayer.getCurrentTime === 'function' && typeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(beforePlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play before video, pause after video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\t// Play after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst afterPlayer = players[afterImg[0].id];\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterPlayer && afterPlayer.g && afterPlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(afterPlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\t\t\t// Safely get duration from before player\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (beforePlayer && typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof afterPlayer.getCurrentTime === 'function' && typeof afterPlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(afterPlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tafterPlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play after video, pause before video\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\t// Play before video (when slider is on after side)\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// On move end event\n\t\tconst onMoveEnd = function (e) {\n\t\t\tcontainer.removeClass(\"active\");\n\t\t\tif (e.type === \"mouseleave\") {\n\t\t\t\tjquery(this).find(`.${classPrefix}-overlay`).removeClass(\"hover\");\n\t\t\t}\n\t\t};\n\n\t\tconst moveTarget = options.move_with_handle_only ? slider : container;\n\t\t\n\t\t// Disable drag functionality if auto slide is enabled and pause on hover is disabled\n\t\tconst isDragDisabled = options.auto_slide_enabled && !options.auto_slide_pause_on_hover;\n\t\t\n\t\tif (!isDragDisabled) {\n\t\t\tmoveTarget.on(\"movestart\", onMoveStart);\n\t\t\tmoveTarget.on(\"move\", onMove);\n\t\t\tmoveTarget.on(\"mouseleave\", function () {\n\t\t\t\tcontainer.removeClass(\"moving\");\n\t\t\t});\n\t\t}\n\n\t\tif (options.move_slider_on_hover && !isDragDisabled) {\n\t\t\tcontainer.on(\"mouseenter\", onMoveStart);\n\t\t\tcontainer.on(\"mousemove\", onMove);\n\t\t\tcontainer.on(\"mouseleave\", onMoveEnd);\n\t\t}\n\n\t\tslider.on(\"touchmove\", function (e) {\n\t\t\tif (!isDragDisabled) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// container.find(\"img\").on(\"mousedown\", function (event) {\n\t\tcontainer.find(`${tagName}`).on(\"mousedown\", function (event) {\n\t\t\tif (!isDragDisabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tif (options.click_to_move && !isDragDisabled) {\n\t\t\tcontainer.on(\"click\", function (e) {\n\t\t\t\tif (!e.target.closest(\".popup-button\")) {\n\t\t\t\t\toffsetX = container.offset().left;\n\t\t\t\t\toffsetY = container.offset().top;\n\t\t\t\t\timgWidth = beforeImg.width();\n\t\t\t\t\timgHeight = beforeImg.height();\n\n\t\t\t\t\tadjustSlider(getSliderPercentage(e.pageX, e.pageY));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (tagName !== \"img\") {\n\t\t\tif (beforeImg.length !== 0 || afterImg.length !== 0) {\n\t\t\t\tconst containerParent = container.parent();\n\n\t\t\t\tcontainerParent.append(\n\t\t\t\t\t`<div class=\"video-control-area\">\n\t\t\t\t\t<div class=\"video-play-pause\">\n\t\t\t\t\t\t<div title=\"play\" class=\"show\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-play-icon lucide-play\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<polygon points=\"6 3 20 12 6 21 6 3\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div title=\"pause\" class=\"hidden\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-pause-icon lucide-pause\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n\t\t\t\t\t\t\t\t<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"video-sound\">\n\n\t\t\t\t\t<div class=\"show\" title=\"mute\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-volume-x-icon lucide-volume-x\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<line x1=\"22\" x2=\"16\" y1=\"9\" y2=\"15\" />\n\t\t\t\t\t\t\t\t<line x1=\"16\" x2=\"22\" y1=\"9\" y2=\"15\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div title=\"unmute\" class=\"hidden\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-volume2-icon lucide-volume-2\"><path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\"/><path d=\"M16 9a5 5 0 0 1 0 6\"/><path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\"/></svg>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</div>`,\n\t\t\t\t);\n\n\t\t\t\tconst palyPause = containerParent.find(\".video-play-pause\");\n\t\t\t\tconst videoSound = containerParent.find(\".video-sound\");\n\n\t\t\t\tpalyPause.on(\"click\", function () {\n\t\t\t\t\tconsole.log('🎬 Custom play button clicked');\n\t\t\t\t\tconsole.log('Available players:', Object.keys(players));\n\t\t\t\t\tconsole.log('beforeImg[0].id:', beforeImg[0].id);\n\t\t\t\t\tconsole.log('afterImg[0].id:', afterImg[0].id);\n\t\t\t\t\tconsole.log('beforeImg element:', beforeImg[0]);\n\t\t\t\t\tconsole.log('afterImg element:', afterImg[0]);\n\t\t\t\t\tconsole.log('players[beforeImg[0].id]:', players[beforeImg[0].id]);\n\t\t\t\t\tconsole.log('players[afterImg[0].id]:', players[afterImg[0].id]);\n\t\t\t\t\t\n\t\t\t\t\tconst children = palyPause[0].children;\n\n\t\t\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\n\t\t\t\t\t\tconst containerPosition =\n\t\t\t\t\t\t\toptions.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\n\t\t\t\t\t\tif (sliderPosition >= containerPosition) {\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\tconsole.log('🎬 Trying to play iframe video');\n\t\t\t\t\t\t\t\tconsole.log('Before player ID:', beforeImg[0].id);\n\t\t\t\t\t\t\t\tconsole.log('Before player object:', players[beforeImg[0].id]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tconsole.log('beforePlayer:', beforePlayer);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Debug what methods are available\n\t\t\t\t\t\t\t\tconsole.log('Available methods on beforePlayer:');\n\t\t\t\t\t\t\t\tconsole.log('- playVideo:', typeof beforePlayer.playVideo);\n\t\t\t\t\t\t\t\tconsole.log('- getPlayerState:', typeof beforePlayer.getPlayerState);\n\t\t\t\t\t\t\t\tconsole.log('- mute:', typeof beforePlayer.mute);\n\t\t\t\t\t\t\t\tconsole.log('- unMute:', typeof beforePlayer.unMute);\n\t\t\t\t\t\t\t\tconsole.log('- getAllMethods:', Object.getOwnPropertyNames(beforePlayer));\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforePlayer && typeof beforePlayer.playVideo === 'function') {\n\t\t\t\t\t\t\t\t\tconsole.log('✅ beforePlayer has playVideo method');\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t// Only attempt URL parsing and time checks if player is fully ready\n\t\t\t\t\t\t\t\t\t\tif (beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Player has iframe source');\n\t\t\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t// Check if getDuration method is available before calling\n\t\t\t\t\t\t\t\t\t\t\tlet endTime = null;\n\t\t\t\t\t\t\t\t\t\t\tif (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end || beforePlayer.getDuration());\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t// Check if getCurrentTime and seekTo methods are available\n\t\t\t\t\t\t\t\t\t\t\tif (start && endTime && \n\t\t\t\t\t\t\t\t\t\t\t\ttypeof beforePlayer.getCurrentTime === 'function' && \n\t\t\t\t\t\t\t\t\t\t\t\ttypeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tconst currentTime = Math.round(beforePlayer.getCurrentTime());\n\t\t\t\t\t\t\t\t\t\t\t\tif (currentTime >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tconsole.log('🎬 About to call playVideo on beforePlayer');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Simpler approach - just try to play without state check first\n\t\t\t\t\t\t\t\t\t\tbeforePlayer.playVideo();\n\t\t\t\t\t\t\t\t\t\tconsole.log('✅ playVideo called successfully');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Error with YouTube player API:', error);\n\t\t\t\t\t\t\t\t\t\t// Fallback: just try to play without time checks\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Fallback playVideo succeeded');\n\t\t\t\t\t\t\t\t\t\t} catch (e2) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Even fallback playVideo failed:', e2);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconsole.log('❌ beforePlayer not ready or no playVideo method');\n\t\t\t\t\t\t\t\t\tconsole.log('Trying alternative approaches...');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Alternative 1: Try to find playVideo method in prototype chain\n\t\t\t\t\t\t\t\t\tlet playVideoMethod = null;\n\t\t\t\t\t\t\t\t\tlet obj = beforePlayer;\n\t\t\t\t\t\t\t\t\twhile (obj && !playVideoMethod) {\n\t\t\t\t\t\t\t\t\t\tif (obj.playVideo && typeof obj.playVideo === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tplayVideoMethod = obj.playVideo.bind(beforePlayer);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tobj = Object.getPrototypeOf(obj);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (playVideoMethod) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Found playVideo in prototype chain');\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tplayVideoMethod();\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Prototype playVideo succeeded');\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Prototype playVideo failed:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tconsole.log('❌ No playVideo method found anywhere');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Alternative 2: Try direct iframe interaction\n\t\t\t\t\t\t\t\t\t\tconst iframe = beforePlayer.g || document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\t\tif (iframe && iframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('🎬 Trying direct iframe postMessage');\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tiframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Direct postMessage sent');\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Direct postMessage failed:', e);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ No iframe found for direct interaction');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\tconsole.log('🎬 Trying to play after iframe video');\n\t\t\t\t\t\t\t\tconsole.log('After player ID:', afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tconsole.log('🎬 Sending playVideo to after iframe');\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video playVideo command sent');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconsole.log('❌ After iframe not found or no contentWindow');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t// Use direct iframe postMessage for pause (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tconsole.log('🎬 Sending pauseVideo to iframes');\n\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ Before video pause command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ After video pause command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvideoSound.on(\"click\", function (e) {\n\t\t\t\t\tconst children = videoSound[0].children;\n\t\t\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\t\tif (sliderPosition >= container.width() / 2) {\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage for unmute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconsole.log('🔊 Sending unMute to iframes (slider position check)');\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ Before video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = false;\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage for unmute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconsole.log('🔊 Sending unMute to iframes');\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ Before video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = false;\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\n\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t// Use direct iframe postMessage for mute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tconsole.log('🔇 Sending mute to iframes');\n\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ Before video mute command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ After video mute command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = true;\n\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Auto slide functionality\n\t\tif (options.auto_slide_enabled) {\n\t\t\tlet autoSlideRequestId;\n\t\t\tlet startTime;\n\t\t\tlet isAutoSliding = true;\n\t\t\tlet userHasInteracted = false;\n\t\t\tlet animationDirection = options.auto_slide_direction === 'back_and_forth' ? -1 : 1; // Start moving left for back_and_forth since handle starts at right\n\t\t\tlet pausedProgress = 0; // Store progress when paused\n\t\t\tlet isPausedByHover = false;\n\t\t\tlet lastUpdateTime = 0; // For throttling updates on Windows\n\n\t\t\tconst duration = options.auto_slide_duration * 1000; // Convert to milliseconds\n\t\t\t\n\t\t\t// Throttle interval for iframes to prevent Windows shaking (update every 32ms = ~30fps instead of 60fps)\n\t\t\tconst throttleInterval = (tagName === \"iframe\" || tagName === \"video\") ? 32 : 0;\n\n\t\t\t// For iframes/videos: ensure before is on top so we only need to clip before (not after)\n\t\t\t// This prevents shaking on Windows since after iframe has no CSS changes during animation\n\t\t\tif (tagName === \"iframe\" || tagName === \"video\") {\n\t\t\t\tbeforeImg.parent().css({\n\t\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\t\"z-index\": \"2\"\n\t\t\t\t});\n\t\t\t\tafterImg.parent().css({\n\t\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\t\"z-index\": \"1\"\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Easing function: ease-in-out (slow-fast-slow)\n\t\t\tconst easeInOut = function(t) {\n\t\t\t\treturn t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n\t\t\t};\n\n\t\t\t// Get current slider position (0-1)\n\t\t\tconst getCurrentPosition = function() {\n\t\t\t\tconst sliderPos = parseFloat(slider.css(orientation === 'vertical' ? 'top' : 'left'));\n\t\t\t\tconst containerSize = orientation === 'vertical' ? container.height() : container.width();\n\t\t\t\treturn containerSize > 0 ? Math.max(0, Math.min(1, sliderPos / containerSize)) : 0.5;\n\t\t\t};\n\n\n\n\t\t\tconst animate = function(currentTime) {\n\t\t\t\tif (!startTime) startTime = currentTime;\n\t\t\t\t\n\t\t\t\t// Throttle updates for iframes/videos to prevent Windows shaking\n\t\t\t\tif (throttleInterval > 0 && (currentTime - lastUpdateTime) < throttleInterval) {\n\t\t\t\t\t// Skip this frame, request next\n\t\t\t\t\tif (isAutoSliding && !isPausedByHover && !userHasInteracted) {\n\t\t\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastUpdateTime = currentTime;\n\t\t\t\t\n\t\t\t\tconst elapsed = currentTime - startTime;\n\t\t\t\tlet progress = (elapsed / duration) + pausedProgress;\n\n\t\t\t\t// Handle different directions\n\t\t\t\tif (options.auto_slide_direction === 'left_to_right') {\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reset for continuous left to right\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tadjustSlider(calcOffset(easedProgress));\n\t\t\t\t} \n\t\t\t\telse if (options.auto_slide_direction === 'right_to_left') {\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reset for continuous right to left\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tadjustSlider(calcOffset(1 - easedProgress));\n\t\t\t\t}\n\t\t\t\telse { // back_and_forth\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reverse direction and reset\n\t\t\t\t\t\tanimationDirection *= -1;\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tconst position = animationDirection === 1 ? easedProgress : (1 - easedProgress);\n\t\t\t\t\tadjustSlider(calcOffset(position));\n\t\t\t\t\t\n\t\t\t\t\t// Add video control for auto slide animation\n\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\tconst containerPosition = options.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\t\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods (same as manual dragging)\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tif (beforePlayer && beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof beforePlayer.getCurrentTime === 'function' && typeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(beforePlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play before video, pause after video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\t// Play after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods \n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst afterPlayer = players[afterImg[0].id];\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterPlayer && afterPlayer.g && afterPlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(afterPlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof afterPlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = afterPlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof afterPlayer.getCurrentTime === 'function' && typeof afterPlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(afterPlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tafterPlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play after video, pause before video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\t// Play before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Handle MP4/HTML5 videos\n\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\tconst containerPosition = options.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\t\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update label visibility after slider position changes\n\t\t\t\tupdateLabelVisibility();\n\n\t\t\t\t// Continue animation if still sliding\n\t\t\t\tif (isAutoSliding && !isPausedByHover && !userHasInteracted) {\n\t\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst startAutoSlide = function() {\n\t\t\t\tif (!isAutoSliding || isPausedByHover) return;\n\t\t\t\t\n\t\t\t\tif (pausedProgress === 0) {\n\t\t\t\t\tstartTime = null; // Reset start time only if not resuming\n\t\t\t\t}\n\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t};\n\n\t\t\tconst stopAutoSlide = function() {\n\t\t\t\tif (autoSlideRequestId) {\n\t\t\t\t\tcancelAnimationFrame(autoSlideRequestId);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst pauseAutoSlide = function() {\n\t\t\t\tisPausedByHover = true;\n\t\t\t\t\n\t\t\t\t// Calculate current progress to resume from same position\n\t\t\t\tif (startTime) {\n\t\t\t\t\tconst currentTime = performance.now();\n\t\t\t\t\tconst elapsed = currentTime - startTime;\n\t\t\t\t\tconst currentProgress = (elapsed / duration) + pausedProgress;\n\t\t\t\t\t\n\t\t\t\t\t// Store progress for resume\n\t\t\t\t\tpausedProgress = currentProgress % 1; // Keep within 0-1 range\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstopAutoSlide();\n\t\t\t};\n\n\t\t\tconst resumeAutoSlide = function() {\n\t\t\t\tisPausedByHover = false;\n\t\t\t\tisAutoSliding = true;\n\t\t\t\tstartTime = null; // Will be set in animate function\n\t\t\t\tstartAutoSlide();\n\t\t\t};\n\n\t\t\t// Pause on hover if enabled\n\t\t\tif (options.auto_slide_pause_on_hover) {\n\t\t\t\tcontainer.on('mouseenter', pauseAutoSlide);\n\t\t\t\tcontainer.on('mouseleave', function() {\n\t\t\t\t\t// Reset user interaction flag when mouse leaves\n\t\t\t\t\t// This allows auto slide to resume even after manual interaction\n\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// Only add manual interaction handlers if pause on hover is enabled\n\t\t\t\t// Pause (don't permanently stop) auto slide when user interacts manually\n\t\t\t\tmoveTarget.on('movestart', function() {\n\t\t\t\t\tuserHasInteracted = true;\n\t\t\t\t\tpauseAutoSlide();\n\t\t\t\t});\n\n\t\t\t\t// Update position when user manually moves the slider\n\t\t\t\tmoveTarget.on('move', function() {\n\t\t\t\t\tif (userHasInteracted) {\n\t\t\t\t\t\t// Continuously update the position during manual drag\n\t\t\t\t\t\tconst currentPosition = getCurrentPosition();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Update progress based on direction for smooth resume\n\t\t\t\t\t\tif (options.auto_slide_direction === 'left_to_right') {\n\t\t\t\t\t\t\tpausedProgress = currentPosition;\n\t\t\t\t\t\t} \n\t\t\t\t\t\telse if (options.auto_slide_direction === 'right_to_left') {\n\t\t\t\t\t\t\tpausedProgress = 1 - currentPosition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse { // back_and_forth\n\t\t\t\t\t\t\t// Determine direction and progress based on current position\n\t\t\t\t\t\t\tif (currentPosition <= 0.5) {\n\t\t\t\t\t\t\t\tanimationDirection = 1;\n\t\t\t\t\t\t\t\tpausedProgress = currentPosition;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tanimationDirection = -1;\n\t\t\t\t\t\t\t\tpausedProgress = 1 - currentPosition;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Add touch event handling for mobile devices\n\t\t\t\t// Resume auto slide when touch ends (user lifts finger)\n\t\t\t\tmoveTarget.on('touchend', function() {\n\t\t\t\t\t// Small delay to ensure drag is complete\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t\t}, 300);\n\t\t\t\t});\n\n\t\t\t\t// Also handle when touch is cancelled\n\t\t\t\tmoveTarget.on('touchcancel', function() {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t\t}, 300);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Set initial position to show before content first (handle at 100% position)\n\t\t\tadjustSlider(calcOffset(1.0)); // Start with handle at the end (right side)\n\t\t\tupdateLabelVisibility(); // Update labels for initial position\n\t\t\t\n\t\t\t// Set custom play/pause button to \"playing\" state and keep it there for auto slide\n\t\t\tconst playPause = container.parent().find(\".video-play-pause\");\n\t\t\tif (playPause.length > 0 && playPause[0].children) {\n\t\t\t\tconst children = playPause[0].children;\n\t\t\t\t// Show pause/stop icon (playing state) and hide play icon\n\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\n\t\t\t\t// Disable click functionality during auto slide\n\t\t\t\tplayPause.off('click').on('click', function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t// Do nothing - button stays in playing state during auto slide\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// Start auto sliding after initial setup\n\t\t\tsetTimeout(startAutoSlide, 0.1);\n\t\t}\n\n\t\twindow.jQuery(window).trigger(\"resize.coca_image_compare\");\n\t});\n};\n\n// Listen for lazy-loaded iframe events and reinitialize YouTube players only\ndocument.addEventListener('baislIframeLoaded', function(event) {\n\tconst iframe = event.detail.iframe;\n\tconst container = event.detail.container;\n\t\n\tif (container && iframe && iframe.src && iframe.src.includes('youtube.com')) {\n\t\t// Find the slider container\n\t\tconst sliderContainer = container.closest('.coca-image-compare-container') || \n\t\t\t\t\t\t container.closest('[data-bais-lazy-id]') ||\n\t\t\t\t\t\t container.closest('[class*=\"coca-bais-\"]');\n\t\t\n\t\tif (sliderContainer) {\n\t\t\t// Small delay to ensure iframe is fully loaded\n\t\t\tsetTimeout(() => {\n\t\t\t\t// Only reinitialize YouTube players for this specific iframe\n\t\t\t\tif (iframe.id && !players[iframe.id] && typeof YT !== 'undefined' && YT.Player) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tplayers[iframe.id] = new YT.Player(iframe.id, {\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tonReady: function(event) {\n\t\t\t\t\t\t\t\t\tconsole.log('YouTube player ready for:', iframe.id);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tonError: function(event) {\n\t\t\t\t\t\t\t\t\tconsole.error('YouTube player error for:', iframe.id, event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('Error creating YouTube player:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 200);\n\t\t}\n\t}\n});\n\n// Initialize HTML5 videos when document is ready\nif (document.readyState === 'loading') {\n\tdocument.addEventListener('DOMContentLoaded', initHTML5VideoPlayers);\n} else {\n\tinitHTML5VideoPlayers();\n}\n\n// Function to cleanup player references for a specific container\nfunction cleanupPlayersForContainer(container) {\n\tconst iframes = container.querySelectorAll('iframe[id]');\n\tconst videos = container.querySelectorAll('video[id]');\n\t\n\t// Remove iframe player references\n\tiframes.forEach(iframe => {\n\t\tif (iframe.id && players[iframe.id]) {\n\t\t\ttry {\n\t\t\t\t// Try to destroy YouTube player if it exists\n\t\t\t\tif (typeof players[iframe.id].destroy === 'function') {\n\t\t\t\t\tplayers[iframe.id].destroy();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// Silent error handling for player destruction\n\t\t\t}\n\t\t\tdelete players[iframe.id];\n\t\t}\n\t});\n\t\n\t// Remove video player references\n\tvideos.forEach(video => {\n\t\tif (video.id && players[video.id]) {\n\t\t\tdelete players[video.id];\n\t\t}\n\t});\n}\n\n// Function to initialize YouTube players for a specific container\nfunction initYouTubePlayersForContainer(container) {\n\t// Find YouTube iframes in this container\n\tconst iframes = container.querySelectorAll('iframe[src*=\"youtube.com\"], iframe[data-src*=\"youtube.com\"]');\n\t\n\tiframes.forEach(iframe => {\n\t\tif (iframe.src && iframe.src.includes('youtube.com') && iframe.id) {\n\t\t\t// Only create player if it doesn't exist and YouTube API is ready\n\t\t\tif (!players[iframe.id] && typeof YT !== 'undefined' && YT.Player) {\n\t\t\t\ttry {\n\t\t\t\t\tplayers[iframe.id] = new YT.Player(iframe.id, {\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonReady: function(event) {\n\t\t\t\t\t\t\t\tconsole.log('YouTube player ready for:', iframe.id);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonError: function(event) {\n\t\t\t\t\t\t\t\tconsole.error('YouTube player error for:', iframe.id, event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Error creating YouTube player:', error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}"],"names":["players","intervalMap","vimeoPlayers","tag","document","createElement","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","window","console","shouldFilter","args","message","join","hasWidgetError","includes","arg","Error","error","originalConsoleError","apply","warn","originalConsoleWarn","log","originalConsoleLog","originalOnError","onerror","source","lineno","colno","call","html5PausedVideos","Map","initHTML5VideoPlayers","querySelectorAll","forEach","videoElement","startTime","parseFloat","dataset","endTime","duration","hasLoop","hasAttribute","hasAutoPlay","playPauseContainer","parentElement","lastElementChild","firstElementChild","children","classList","remove","add","currentTime","addEventListener","container","$","closest","autoSlideEnabled","data","attr","pause","videos","hidden","video","paused","ended","set","time","play","clear","initYouTubePlayers","YT","Player","setTimeout","tagName","playPause","lastChild","firstIframe","lastIframe","id","playerVars","controls","rel","fs","mute","enablejsapi","events","onReady","event","clearInterval","youtubeUrl","URL","target","g","start","end","autoplay","loop","Object","fromEntries","searchParams","entries","getDuration","e","isNaN","seekTo","playVideo","rafId","lastCheckTime","checkVideoTime","timestamp","getCurrentTime","Math","round","ceil","cancelAnimationFrame","getPlayerState","PlayerState","PLAYING","requestAnimationFrame","stateEvent","PAUSED","ENDED","pausedPlayers","player","dir","pauseVideo","keys","key","onYouTubeIframeAPIReady","observeElements","observer","MutationObserver","mutations","mutation","addedNodes","length","jQuery","each","coca_imageCompare","addClass","observe","body","childList","subtree","ready","$container","parent","hasClass","unwrap","next","on","elementorFrontend","hooks","addAction","$overlays","find","not","$handleWrappers","last","$handles","fn","userOptions","jquery","defaultOptions","default_offset_pct","orientation","before_label","after_label","before_image","after_image","indicator_image","classes","show_labels","no_overlay","handle_bottom_only","move_slider_on_hover","move_with_handle_only","click_to_move","auto_slide_enabled","auto_slide_duration","auto_slide_direction","auto_slide_pause_on_hover","options","extend","imgHeight","imgWidth","offsetY","offsetX","wrapperClassList","classPrefix","beforeD","afterD","handleBottomClass","noOverlayClass","wrap","beforeImg","afterImg","append","overlay","slider","existingWrappers","first","quote","indexOf","calcOffset","pct","root","querySelector","style","width","sampleImageWidth","imageElement","clientWidth","getAttribute","setAttribute","naturalWidth","naturalHeight","height","windowWidth","innerWidth","windowHeight","innerHeight","targetWidth","targetHeight","ratio","w","h","cw","ch","adjustContainer","offset","hasAfter","isIframeOrVideo","css","adjustSliderWidth","adjustSlider","position","roundedPosition","minMaxNumber","num","min","max","getSliderPercentage","positionX","positionY","vertical","horizontal","sliderPercentage","updateLabelVisibility","sliderPosition","hide","show","muted","settings","parsedSettings","JSON","parse","replace","imagesLoaded","done","onMoveStart","distX","distY","preventDefault","left","top","onMove","pageX","pageY","type","className","containerPosition","hasBeforeVideo","hasAfterVideo","beforePlayer","beforeIframe","getElementById","afterIframe","contentWindow","postMessage","afterPlayer","onMoveEnd","removeClass","moveTarget","isDragDisabled","containerParent","palyPause","videoSound","unMute","getOwnPropertyNames","e2","playVideoMethod","obj","bind","getPrototypeOf","iframe","autoSlideRequestId","isAutoSliding","userHasInteracted","animationDirection","pausedProgress","isPausedByHover","lastUpdateTime","throttleInterval","easeInOut","t","getCurrentPosition","sliderPos","containerSize","animate","elapsed","progress","easedProgress","startAutoSlide","stopAutoSlide","pauseAutoSlide","performance","now","currentProgress","resumeAutoSlide","currentPosition","off","stopPropagation","trigger","detail","sliderContainer","onError","readyState","cleanupPlayersForContainer","iframes","destroy","initYouTubePlayersForContainer"],"sourceRoot":""}1 {"version":3,"file":"common/js/jquery.image-compare.js","mappings":"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AK,CAACK,IAAI,CAAC,CAAC;QACb,CAAC,CAAC;QACFtC,iBAAiB,CAACuC,KAAK,CAAC,CAAC;MAC1B;IACD,CAAC,CAAC;EACF,CAAC,CAAC;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASC,kBAAkBA,CAAA,EAAG;EAC7B,IAAI,OAAOC,EAAE,KAAK,WAAW,IAAI,OAAOA,EAAE,CAACC,MAAM,KAAK,WAAW,EAAE;IAClEC,UAAU,CAACH,kBAAkB,EAAE,GAAG,CAAC;IACnC;EACD;;EAEA;EACAtE,QAAQ,CAACiC,gBAAgB,CAAC,6BAA6B,CAAC,CAACC,OAAO,CAAC,UAAUoB,SAAS,EAAE;IACrF,MAAMoB,OAAO,GACZpB,SAAS,EAAEP,iBAAiB,EAAEA,iBAAiB,EAAE2B,OAAO,IACxDpB,SAAS,EAAER,gBAAgB,EAAEC,iBAAiB,EAAE2B,OAAO;IACxD,MAAMC,SAAS,GAAGrB,SAAS,CAACT,aAAa,CAACA,aAAa,CAAC+B,SAAS;IACjE,MAAM5B,QAAQ,GAAG2B,SAAS,CAAC3B,QAAQ;IAEnC,IAAI0B,OAAO,KAAK,EAAE,IAAIA,OAAO,KAAK,QAAQ,EAAE;MAC3C,MAAMG,WAAW,GAAGvB,SAAS,CAACP,iBAAiB,CAACA,iBAAiB;MACjE,MAAM+B,UAAU,GAAGxB,SAAS,CAACR,gBAAgB,CAACC,iBAAiB;MAE/D,IAAI8B,WAAW,EAAEE,EAAE,IAAI,CAACnF,OAAO,CAACiF,WAAW,EAAEE,EAAE,CAAC,EAAE;QACjDnF,OAAO,CAACiF,WAAW,CAACE,EAAE,CAAC,GAAG,IAAIR,EAAE,CAACC,MAAM,CAACK,WAAW,CAACE,EAAE,EAAE;UACvDC,UAAU,EAAE;YACXC,QAAQ,EAAE,CAAC;YACXC,GAAG,EAAE,CAAC;YACNC,EAAE,EAAE,CAAC;YACLC,IAAI,EAAE,CAAC;YACPC,WAAW,EAAE;UACd,CAAC;UACDC,MAAM,EAAE;YACPC,OAAO,EAAGC,KAAK,IAAK;cACnB;cACA,IAAI3F,WAAW,CAACgF,WAAW,CAACE,EAAE,CAAC,EAAE;gBAChC;gBACA,IAAI,OAAOlF,WAAW,CAACgF,WAAW,CAACE,EAAE,CAAC,KAAK,UAAU,EAAE;kBACtDlF,WAAW,CAACgF,WAAW,CAACE,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC,MAAM;kBACNU,aAAa,CAAC5F,WAAW,CAACgF,WAAW,CAACE,EAAE,CAAC,CAAC;gBAC3C;cACD;cAEA,MAAMW,UAAU,GAAG,IAAIC,GAAG,CAACH,KAAK,CAACI,MAAM,CAACC,CAAC,CAAC3F,GAAG,CAAC;cAC9C,MAAM;gBAAE4F,KAAK;gBAAEC,GAAG;gBAAEC,QAAQ;gBAAEC;cAAK,CAAC,GAAGC,MAAM,CAACC,WAAW,CACxDT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CACjC,CAAC;cAED,MAAMjE,SAAS,GAAGC,UAAU,CAACyD,KAAK,IAAI,CAAC,CAAC;cACxC;cACA,IAAIvD,OAAO;cACX,IAAIwD,GAAG,EAAE;gBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;cAC1B,CAAC,MAAM,IAAI,OAAOP,KAAK,CAACI,MAAM,CAACU,WAAW,KAAK,UAAU,EAAE;gBAC1D,IAAI;kBACH/D,OAAO,GAAGiD,KAAK,CAACI,MAAM,CAACU,WAAW,CAAC,CAAC;gBACrC,CAAC,CAAC,OAAOC,CAAC,EAAE;kBACXhE,OAAO,GAAG,IAAI;gBACf;cACD;cAEA,IAAIyD,QAAQ,IAAIA,QAAQ,KAAK,GAAG,EAAE;gBACjC,IAAI,CAACQ,KAAK,CAACpE,SAAS,CAAC,EAAE;kBACtBoD,KAAK,CAACI,MAAM,CAACa,MAAM,CAACrE,SAAS,EAAE,IAAI,CAAC;gBACrC;gBACAY,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;gBAClDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;gBAC7CH,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;gBAChDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;gBAE/CqC,KAAK,CAACI,MAAM,CAACc,SAAS,CAAC,CAAC;cACzB;;cAEA;cACA,IAAIC,KAAK;cACT,IAAIC,aAAa,GAAG,CAAC;;cAErB;cACA,MAAMC,cAAc,GAAIC,SAAS,IAAK;gBACrC;gBACA,IAAIA,SAAS,GAAGF,aAAa,IAAI,GAAG,EAAE;kBACrCA,aAAa,GAAGE,SAAS;kBACzB,MAAM1D,WAAW,GAAGoC,KAAK,CAACI,MAAM,CAACmB,cAAc,CAAC,CAAC;kBAEjD,IAAId,IAAI,IAAIA,IAAI,KAAK,GAAG,EAAE;oBACzB,IAAI,CAACO,KAAK,CAACjE,OAAO,CAAC,IAAIyE,IAAI,CAACC,KAAK,CAAC7D,WAAW,CAAC,IAAIb,OAAO,EAAE;sBAC1DiD,KAAK,CAACI,MAAM,CAACa,MAAM,CAACrE,SAAS,EAAE,IAAI,CAAC;sBACpCoD,KAAK,CAACI,MAAM,CAACc,SAAS,CAAC,CAAC;oBACzB;kBACD,CAAC,MAAM;oBACN,IAAIM,IAAI,CAACE,IAAI,CAAC9D,WAAW,CAAC,IAAIb,OAAO,EAAE;sBACtCS,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;sBAClDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;sBAC7CH,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;sBAChDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;sBAC/CgE,oBAAoB,CAACR,KAAK,CAAC;sBAC3B;oBACD;kBACD;gBACD;;gBAEA;gBACA,IAAInB,KAAK,CAACI,MAAM,CAACwB,cAAc,CAAC,CAAC,KAAK7C,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;kBAC7DX,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;gBAC9C;cACD,CAAC;;cAED;cACAF,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;;cAE7C;cACArB,KAAK,CAACI,MAAM,CAACvC,gBAAgB,CAAC,eAAe,EAAGmE,UAAU,IAAK;gBAC9D,IAAIA,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;kBAC/C;kBACAX,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;gBAC9C,CAAC,MAAM,IACNW,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACI,MAAM,IACzCD,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACK,KAAK,EACvC;kBACD;kBACAP,oBAAoB,CAACR,KAAK,CAAC;gBAC5B;cACD,CAAC,CAAC;cAEF,MAAMgB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;;cAE1B3H,QAAQ,CAACqD,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;gBACnD,IAAIrD,QAAQ,CAAC8D,MAAM,EAAE;kBACpB;kBACAoC,MAAM,CAACG,OAAO,CAACzG,OAAO,CAAC,CAACsC,OAAO,CAAC,CAAC,CAAC6C,EAAE,EAAE6C,MAAM,CAAC,KAAK;oBACjDpH,OAAO,CAACqH,GAAG,CAAC,OAAOD,MAAM,CAACR,cAAc,CAAC;oBACzC,IAAIQ,MAAM,IAAI,OAAOA,MAAM,CAACR,cAAc,KAAK,UAAU,EAAE;sBAC1D,IAAIQ,MAAM,CAACR,cAAc,CAAC,CAAC,KAAK7C,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;wBACvD,MAAMnD,IAAI,GAAGyD,MAAM,CAACb,cAAc,CAAC,CAAC;wBACpCY,aAAa,CAAC5C,EAAE,CAAC,GAAGZ,IAAI;wBACxByD,MAAM,CAACE,UAAU,CAAC,CAAC;sBACpB;oBACD;kBACD,CAAC,CAAC;gBACH,CAAC,MAAM;kBACN;kBACA5B,MAAM,CAACG,OAAO,CAACsB,aAAa,CAAC,CAACzF,OAAO,CAAC,CAAC,CAAC6C,EAAE,EAAEZ,IAAI,CAAC,KAAK;oBACrD,MAAMyD,MAAM,GAAGhI,OAAO,CAACmF,EAAE,CAAC;oBAC1B,IAAI6C,MAAM,IAAI,OAAOzD,IAAI,KAAK,QAAQ,EAAE;sBACvCyD,MAAM,CAACnB,MAAM,CAACtC,IAAI,EAAE,IAAI,CAAC;sBACzByD,MAAM,CAAClB,SAAS,CAAC,CAAC;oBACnB;kBACD,CAAC,CAAC;;kBAEF;kBACAR,MAAM,CAAC6B,IAAI,CAACJ,aAAa,CAAC,CAACzF,OAAO,CAAE8F,GAAG,IAAK,OAAOL,aAAa,CAACK,GAAG,CAAC,CAAC;gBACvE;cACD,CAAC,CAAC;;cAEF;cACAnI,WAAW,CAACgF,WAAW,CAACE,EAAE,CAAC,GAAG,MAAMoC,oBAAoB,CAACR,KAAK,CAAC;YAChE;UACD;QACD,CAAC,CAAC;MACH;MAEA,IAAI7B,UAAU,EAAEC,EAAE,IAAI,CAACnF,OAAO,CAACkF,UAAU,EAAEC,EAAE,CAAC,EAAE;QAC/CnF,OAAO,CAACkF,UAAU,CAACC,EAAE,CAAC,GAAG,IAAIR,EAAE,CAACC,MAAM,CAACM,UAAU,CAACC,EAAE,EAAE;UACrDC,UAAU,EAAE;YACXC,QAAQ,EAAE,CAAC;YACXC,GAAG,EAAE,CAAC;YACNC,EAAE,EAAE,CAAC;YACLC,IAAI,EAAE,CAAC;YACPC,WAAW,EAAE;UACd,CAAC;UACDC,MAAM,EAAE;YACPC,OAAO,EAAGC,KAAK,IAAK;cACnB,IAAI3F,WAAW,CAACiF,UAAU,CAACC,EAAE,CAAC,EAAE;gBAC/B;gBACA,IAAI,OAAOlF,WAAW,CAACiF,UAAU,CAACC,EAAE,CAAC,KAAK,UAAU,EAAE;kBACrDlF,WAAW,CAACiF,UAAU,CAACC,EAAE,CAAC,CAAC,CAAC;gBAC7B,CAAC,MAAM;kBACNU,aAAa,CAAC5F,WAAW,CAACiF,UAAU,CAACC,EAAE,CAAC,CAAC;gBAC1C;cACD;cACA,MAAMW,UAAU,GAAG,IAAIC,GAAG,CAACH,KAAK,CAACI,MAAM,CAACC,CAAC,CAAC3F,GAAG,CAAC;cAC9C,MAAM;gBAAE4F,KAAK;gBAAEC,GAAG;gBAAEE;cAAK,CAAC,GAAGC,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;cAElF,MAAMjE,SAAS,GAAGC,UAAU,CAACyD,KAAK,IAAI,CAAC,CAAC;cACxC;cACA,IAAIvD,OAAO;cACX,IAAIwD,GAAG,EAAE;gBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;cAC1B,CAAC,MAAM,IAAI,OAAOP,KAAK,CAACI,MAAM,CAACU,WAAW,KAAK,UAAU,EAAE;gBAC1D,IAAI;kBACH/D,OAAO,GAAGiD,KAAK,CAACI,MAAM,CAACU,WAAW,CAAC,CAAC;gBACrC,CAAC,CAAC,OAAOC,CAAC,EAAE;kBACXhE,OAAO,GAAG,IAAI;gBACf;cACD;;cAEA;cACA,IAAIoE,KAAK;cACT,IAAIC,aAAa,GAAG,CAAC;;cAErB;cACA,MAAMC,cAAc,GAAIC,SAAS,IAAK;gBACrC;gBACA,IAAIA,SAAS,GAAGF,aAAa,IAAI,GAAG,EAAE;kBACrCA,aAAa,GAAGE,SAAS;kBACzB,MAAM1D,WAAW,GAAGoC,KAAK,CAACI,MAAM,CAACmB,cAAc,CAAC,CAAC;kBAEjD,IAAId,IAAI,IAAIA,IAAI,KAAK,GAAG,EAAE;oBACzB,IAAI,CAACO,KAAK,CAACjE,OAAO,CAAC,IAAIyE,IAAI,CAACC,KAAK,CAAC7D,WAAW,CAAC,IAAIb,OAAO,EAAE;sBAC1DiD,KAAK,CAACI,MAAM,CAACa,MAAM,CAACrE,SAAS,EAAE,IAAI,CAAC;sBACpCoD,KAAK,CAACI,MAAM,CAACc,SAAS,CAAC,CAAC;oBACzB;kBACD,CAAC,MAAM;oBACN,IAAIM,IAAI,CAACE,IAAI,CAAC9D,WAAW,CAAC,IAAIb,OAAO,EAAE;sBACtCS,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;sBAClDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;sBAC7CH,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;sBAChDF,QAAQ,CAAC,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;sBAC/CgE,oBAAoB,CAACR,KAAK,CAAC;sBAC3B;oBACD;kBACD;gBACD;;gBAEA;gBACA,IAAInB,KAAK,CAACI,MAAM,CAACwB,cAAc,CAAC,CAAC,KAAK7C,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;kBAC7DX,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;gBAC9C;cACD,CAAC;;cAED;cACAF,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;;cAE7C;cACArB,KAAK,CAACI,MAAM,CAACvC,gBAAgB,CAAC,eAAe,EAAGmE,UAAU,IAAK;gBAC9D,IAAIA,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;kBAC/C;kBACAX,KAAK,GAAGY,qBAAqB,CAACV,cAAc,CAAC;gBAC9C,CAAC,MAAM,IACNW,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACI,MAAM,IACzCD,UAAU,CAAC9D,IAAI,KAAKa,EAAE,CAAC8C,WAAW,CAACK,KAAK,EACvC;kBACD;kBACAP,oBAAoB,CAACR,KAAK,CAAC;gBAC5B;cACD,CAAC,CAAC;cAEF,MAAMgB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;;cAE1B3H,QAAQ,CAACqD,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;gBACnD,IAAIrD,QAAQ,CAAC8D,MAAM,EAAE;kBACpB;kBACAoC,MAAM,CAACG,OAAO,CAACzG,OAAO,CAAC,CAACsC,OAAO,CAAC,CAAC,CAAC6C,EAAE,EAAE6C,MAAM,CAAC,KAAK;oBACjD,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACR,cAAc,KAAK,UAAU,EAAE;sBAC1D,IAAIQ,MAAM,CAACR,cAAc,CAAC,CAAC,KAAK7C,EAAE,CAAC8C,WAAW,CAACC,OAAO,EAAE;wBACvD,MAAMnD,IAAI,GAAGyD,MAAM,CAACb,cAAc,CAAC,CAAC;wBACpCY,aAAa,CAAC5C,EAAE,CAAC,GAAGZ,IAAI;wBACxByD,MAAM,CAACE,UAAU,CAAC,CAAC;sBACpB;oBACD;kBACD,CAAC,CAAC;gBACH,CAAC,MAAM;kBACN;kBACA5B,MAAM,CAACG,OAAO,CAACsB,aAAa,CAAC,CAACzF,OAAO,CAAC,CAAC,CAAC6C,EAAE,EAAEZ,IAAI,CAAC,KAAK;oBACrD,MAAMyD,MAAM,GAAGhI,OAAO,CAACmF,EAAE,CAAC;oBAC1B,IAAI6C,MAAM,IAAI,OAAOzD,IAAI,KAAK,QAAQ,EAAE;sBACvCyD,MAAM,CAACnB,MAAM,CAACtC,IAAI,EAAE,IAAI,CAAC;sBACzByD,MAAM,CAAClB,SAAS,CAAC,CAAC;oBACnB;kBACD,CAAC,CAAC;;kBAEF;kBACAR,MAAM,CAAC6B,IAAI,CAACJ,aAAa,CAAC,CAACzF,OAAO,CAAE8F,GAAG,IAAK,OAAOL,aAAa,CAACK,GAAG,CAAC,CAAC;gBACvE;cACD,CAAC,CAAC;;cAEF;cACAnI,WAAW,CAACiF,UAAU,CAACC,EAAE,CAAC,GAAG,MAAMoC,oBAAoB,CAACR,KAAK,CAAC;YAC/D;UACD;QACD,CAAC,CAAC;MACH;IACD;EACD,CAAC,CAAC;AACH;AAEA,SAASsB,uBAAuBA,CAAA,EAAG;EAClC3D,kBAAkB,CAAC,CAAC;EACpBtC,qBAAqB,CAAC,CAAC;AACxB;;AAEA;AACA,MAAMkG,eAAe,GAAG,SAAAA,CAAA,EAAY;EACnC;EACA,MAAMC,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,UAAUC,SAAS,EAAE;IAC1DA,SAAS,CAACnG,OAAO,CAAC,UAAUoG,QAAQ,EAAE;MACrC,IAAIA,QAAQ,CAACC,UAAU,CAACC,MAAM,EAAE;QAC/B/D,UAAU,CAAC,YAAY;UACtBH,kBAAkB,CAAC,CAAC;UACpBtC,qBAAqB,CAAC,CAAC;UACvByG,MAAM,CAAC,wCAAwC,CAAC,CAACC,IAAI,CAAC,YAAY;YACjED,MAAM,CAAC,IAAI,CAAC,CAACE,iBAAiB,CAACF,MAAM,CAAC,IAAI,CAAC,CAAC/E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACnE+E,MAAM,CAAC,IAAI,CAAC,CAACG,QAAQ,CAAC,aAAa,CAAC;UACrC,CAAC,CAAC;QACH,CAAC,EAAE,GAAG,CAAC;MACR;IACD,CAAC,CAAC;EACH,CAAC,CAAC;EAEFT,QAAQ,CAACU,OAAO,CAAC7I,QAAQ,CAAC8I,IAAI,EAAE;IAC/BC,SAAS,EAAE,IAAI;IACfC,OAAO,EAAE;EACV,CAAC,CAAC;AACH,CAAC;;AAED;AACAP,MAAM,CAACzI,QAAQ,CAAC,CAACiJ,KAAK,CAAC,YAAY;EAClCf,eAAe,CAAC,CAAC;;EAEjB;EACAO,MAAM,CAAC,wCAAwC,CAAC,CAACC,IAAI,CAAC,YAAY;IACjE;IACA,MAAMQ,UAAU,GAAGT,MAAM,CAAC,IAAI,CAAC;IAC/B,IACCS,UAAU,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,IAC1DF,UAAU,CAACC,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,EAClE;MACD;MACAF,UAAU,CAACG,MAAM,CAAC,CAAC;IACpB;;IAEA;IACA,IACCH,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,IACjDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,EAC5E;MACDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACpG,MAAM,CAAC,CAAC;IAC5E;;IAEA;IACAgG,UAAU,CAACP,iBAAiB,CAACF,MAAM,CAAC,IAAI,CAAC,CAAC/E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACjEwF,UAAU,CAACN,QAAQ,CAAC,aAAa,CAAC;EACnC,CAAC,CAAC;AACH,CAAC,CAAC;;AAEF;AACAH,MAAM,CAAClI,MAAM,CAAC,CAACgJ,EAAE,CAAC,MAAM,EAAE,YAAY;EACrC;EACAjF,kBAAkB,CAAC,CAAC;EACpBtC,qBAAqB,CAAC,CAAC;EAEvByG,MAAM,CAAC,wCAAwC,CAAC,CAACC,IAAI,CAAC,YAAY;IACjE;IACA,MAAMQ,UAAU,GAAGT,MAAM,CAAC,IAAI,CAAC;IAC/B,IACCS,UAAU,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,IAC1DF,UAAU,CAACC,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,EAClE;MACD;MACAF,UAAU,CAACG,MAAM,CAAC,CAAC;IACpB;;IAEA;IACA,IACCH,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,IACjDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,EAC5E;MACDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACpG,MAAM,CAAC,CAAC;IAC5E;;IAEA;IACAgG,UAAU,CAACP,iBAAiB,CAACO,UAAU,CAACxF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/DwF,UAAU,CAACN,QAAQ,CAAC,aAAa,CAAC;EACnC,CAAC,CAAC;AACH,CAAC,CAAC;;AAEF;AACAH,MAAM,CAAClI,MAAM,CAAC,CAACgJ,EAAE,CAAC,yBAAyB,EAAE,YAAY;EACxD,IAAI,OAAOC,iBAAiB,KAAK,WAAW,EAAE;IAC7CA,iBAAiB,CAACC,KAAK,CAACC,SAAS,CAAC,+BAA+B,EAAE,YAAY;MAC9EjF,UAAU,CAAC,YAAY;QACtB;QACAgE,MAAM,CAAC,sBAAsB,CAAC,CAACC,IAAI,CAAC,YAAY;UAC/C,MAAMQ,UAAU,GAAGT,MAAM,CAAC,IAAI,CAAC;;UAE/B;UACA,IACCS,UAAU,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,IAC1DF,UAAU,CAACC,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,4BAA4B,CAAC,EAClE;YACD;YACAF,UAAU,CAACG,MAAM,CAAC,CAAC;UACpB;;UAEA;UACA,IACCH,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,IACjDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACd,MAAM,GAAG,CAAC,EAC5E;YACDU,UAAU,CAACI,IAAI,CAAC,qBAAqB,CAAC,CAACA,IAAI,CAAC,qBAAqB,CAAC,CAACpG,MAAM,CAAC,CAAC;UAC5E;;UAEA;UACA,MAAMyG,SAAS,GAAGT,UAAU,CAACU,IAAI,CAAC,6BAA6B,CAAC;UAChE,IAAID,SAAS,CAACnB,MAAM,GAAG,CAAC,EAAE;YACzBmB,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC,CAAC3G,MAAM,CAAC,CAAC;UACjC;;UAEA;UACA;UACA,MAAM4G,eAAe,GAAGZ,UAAU,CAACU,IAAI,CAAC,oCAAoC,CAAC;UAC7E,IAAIE,eAAe,CAACtB,MAAM,GAAG,CAAC,EAAE;YAC/BsB,eAAe,CAACC,IAAI,CAAC,CAAC,CAAC7G,MAAM,CAAC,CAAC;UAChC;UAEA,MAAM8G,QAAQ,GAAGd,UAAU,CAACU,IAAI,CAAC,4BAA4B,CAAC;UAC9D,IAAII,QAAQ,CAACxB,MAAM,GAAG,CAAC,EAAE;YACxBwB,QAAQ,CAACH,GAAG,CAAC,QAAQ,CAAC,CAAC3G,MAAM,CAAC,CAAC;UAChC;QACD,CAAC,CAAC;QAEFoB,kBAAkB,CAAC,CAAC;QACpBtC,qBAAqB,CAAC,CAAC;QAEvByG,MAAM,CAAC,wCAAwC,CAAC,CAACC,IAAI,CAAC,YAAY;UACjED,MAAM,CAAC,IAAI,CAAC,CAACE,iBAAiB,CAACF,MAAM,CAAC,IAAI,CAAC,CAAC/E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;UACnE+E,MAAM,CAAC,IAAI,CAAC,CAACG,QAAQ,CAAC,aAAa,CAAC;QACrC,CAAC,CAAC;MACH,CAAC,EAAE,GAAG,CAAC;IACR,CAAC,CAAC;EACH;AACD,CAAC,CAAC;AAEFrI,MAAM,CAACkI,MAAM,CAACwB,EAAE,CAACtB,iBAAiB,GAAG,UAAUuB,WAAW,EAAE;EAC3D;EACA,IAAI,IAAI,CAACd,QAAQ,CAAC,aAAa,CAAC,EAAE;IACjC,OAAO,IAAI;EACZ;EACA,MAAMe,MAAM,GAAG5J,MAAM,CAACkI,MAAM;EAC5B,MAAM2B,cAAc,GAAG;IACtBC,kBAAkB,EAAE,GAAG;IACvBC,WAAW,EAAE,YAAY;IACzBC,YAAY,EAAE,QAAQ;IACtBC,WAAW,EAAE,OAAO;IACpBC,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,OAAO,EAAE,EAAE;IACXC,WAAW,EAAE,KAAK;IAClBC,UAAU,EAAE,KAAK;IACjBC,kBAAkB,EAAE,KAAK;IACzBC,oBAAoB,EAAE,KAAK;IAC3BC,qBAAqB,EAAE,IAAI;IAC3BC,aAAa,EAAE,KAAK;IACpBC,kBAAkB,EAAE,KAAK;IACzBC,mBAAmB,EAAE,CAAC;IACtBC,oBAAoB,EAAE,gBAAgB;IACtCC,yBAAyB,EAAE;EAC5B,CAAC;EAED,MAAMC,OAAO,GAAGpB,MAAM,CAACqB,MAAM,CAACpB,cAAc,EAAEF,WAAW,CAAC;EAE1D,OAAO,IAAI,CAACxB,IAAI,CAAC,YAAY;IAC5B,IAAI+C,SAAS;IACb,IAAIC,QAAQ;IACZ,IAAIC,OAAO;IACX,IAAIC,OAAO;IACX,MAAMtI,SAAS,GAAG6G,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAMG,WAAW,GAAGiB,OAAO,CAACjB,WAAW;IAEvC,IAAI5F,OAAO;IAEX,IAAIpB,SAAS,CAACsG,IAAI,CAAC,KAAK,CAAC,EAAEpB,MAAM,EAAE;MAClC9D,OAAO,GAAG,KAAK;IAChB,CAAC,MAAM,IAAIpB,SAAS,CAACsG,IAAI,CAAC,QAAQ,CAAC,EAAEpB,MAAM,EAAE;MAC5C9D,OAAO,GAAG,QAAQ;IACnB,CAAC,MAAM,IAAIpB,SAAS,CAACsG,IAAI,CAAC,OAAO,CAAC,EAAEpB,MAAM,EAAE;MAC3C9D,OAAO,GAAG,OAAO;IAClB;IAEA,MAAMmH,gBAAgB,GAAG,EAAE,CAACjL,IAAI,CAACiB,IAAI,CAAC0J,OAAO,CAACX,OAAO,EAAE,GAAG,CAAC;IAC3D,MAAMkB,WAAW,GAAG,oBAAoB;IAExC,MAAMC,OAAO,GAAGzB,WAAW,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM;IAC5D,MAAM0B,MAAM,GAAG1B,WAAW,KAAK,UAAU,GAAG,IAAI,GAAG,OAAO;;IAE1D;IACA,MAAM2B,iBAAiB,GAAGV,OAAO,CAACR,kBAAkB,GAAG,eAAe,GAAG,EAAE;IAC3E,MAAMmB,cAAc,GAAGX,OAAO,CAACT,UAAU,GAAG,YAAY,GAAG,EAAE;;IAE7D;IACA,IAAI,CAACxH,SAAS,CAAC6F,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,GAAG0C,WAAW,UAAU,CAAC,EAAE;MAC3DxI,SAAS,CAAC6I,IAAI,CACb,eAAeN,gBAAgB,IAAIC,WAAW,YAAYA,WAAW,IAAIxB,WAAW,IAAI2B,iBAAiB,UAC1G,CAAC;IACF;;IAEA;IACA;IACA,MAAMG,SAAS,GAAG9I,SAAS,CAACsG,IAAI,CAAC,GAAGlF,OAAO,QAAQ,CAAC;IACpD,MAAM2H,QAAQ,GAAG/I,SAAS,CAACsG,IAAI,CAAC,GAAGlF,OAAO,OAAO,CAAC;IAElDpB,SAAS,CAACsF,QAAQ,CAAC,GAAGkD,WAAW,YAAY,CAAC;IAC9CM,SAAS,CAACxD,QAAQ,CAAC,GAAGkD,WAAW,SAAS,CAAC;IAC3CO,QAAQ,CAACzD,QAAQ,CAAC,GAAGkD,WAAW,QAAQ,CAAC;;IAEzC;IACA,IAAIP,OAAO,CAACZ,eAAe,CAACnC,MAAM,EAAE;MACnClF,SAAS,CAACgJ,MAAM,CAACnC,MAAM,CAACoB,OAAO,CAACZ,eAAe,CAAC,CAAC/B,QAAQ,CAAC,GAAGkD,WAAW,gBAAgB,CAAC,CAAC;IAC3F;IAEAxI,SAAS,CAACgJ,MAAM,CAAC,eAAeR,WAAW,YAAYI,cAAc,UAAU,CAAC;IAChF5I,SAAS,CAACgJ,MAAM,CAAC,eAAeR,WAAW,iBAAiB,CAAC;IAE7D,MAAMS,OAAO,GAAGjJ,SAAS,CAACsG,IAAI,CAAC,IAAIkC,WAAW,UAAU,CAAC;IACzD,MAAMU,MAAM,GAAGlJ,SAAS,CAACsG,IAAI,CAAC,IAAIkC,WAAW,SAAS,CAAC;;IAEvD;IACA,IAAIP,OAAO,CAACR,kBAAkB,EAAE;MAC/B;MACA,IAAIQ,OAAO,CAACX,OAAO,IAAIW,OAAO,CAACX,OAAO,CAAC9J,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QACpE;QACA,MAAM2L,gBAAgB,GAAGnJ,SAAS,CAACsG,IAAI,CAAC,IAAIkC,WAAW,iBAAiB,CAAC;QACzE,IAAIW,gBAAgB,CAACjE,MAAM,GAAG,CAAC,EAAE;UAChC;UACAiE,gBAAgB,CAAC5C,GAAG,CAAC,QAAQ,CAAC,CAAC3G,MAAM,CAAC,CAAC;UACvC;UACA,IAAI,CAACsJ,MAAM,CAACrD,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,GAAG0C,WAAW,iBAAiB,CAAC,EAAE;YAC/DW,gBAAgB,CAACC,KAAK,CAAC,CAAC,CAACJ,MAAM,CAACE,MAAM,CAAC;UACxC;QACD,CAAC,MAAM;UACN;UACAA,MAAM,CAACL,IAAI,CAAC,eAAeL,WAAW,yBAAyB,CAAC;QACjE;MACD,CAAC,MAAM;QACN;QACAU,MAAM,CAACL,IAAI,CAAC,eAAeL,WAAW,yBAAyB,CAAC;MACjE;IACD,CAAC,MAAM;MACNU,MAAM,CAACF,MAAM,CAAC,gBAAgBR,WAAW,IAAIC,OAAO,iBAAiB,CAAC;MACtES,MAAM,CAACF,MAAM,CAAC,gBAAgBR,WAAW,IAAIE,MAAM,iBAAiB,CAAC;IACtE;;IAEA;IACA,IAAIT,OAAO,CAACV,WAAW,KAAK,EAAE,EAAE;MAC/B,MAAM8B,KAAK,GAAGpB,OAAO,CAAChB,YAAY,CAACqC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG;MAClEL,OAAO,CAACD,MAAM,CACb,eAAeR,WAAW,iBAAiBP,OAAO,CAACV,WAAW,kBAAkB8B,KAAK,GAAGpB,OAAO,CAAChB,YAAY,GAAGoC,KAAK,SACrH,CAAC;MACDJ,OAAO,CAACD,MAAM,CACb,eAAeR,WAAW,gBAAgBP,OAAO,CAACV,WAAW,kBAAkB8B,KAAK,GAAGpB,OAAO,CAACf,WAAW,GAAGmC,KAAK,SACnH,CAAC;IACF;IAEA,MAAME,UAAU,GAAIC,GAAG,IAAK;MAC3B,MAAM,CAACC,IAAI,CAAC,GAAGzJ,SAAS;;MAExB;MACA;MACA;MACA;MACA,IAAIyJ,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACuI,KAAK,CAACC,KAAK,EAAE;QAC7DH,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACuI,KAAK,CAACC,KAAK,GAAG,EAAE;MAC9D;MAEA,MAAMC,gBAAgB,GAAGJ,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACwI,KAAK;;MAE3E;MACA,EAAE,CAAChL,OAAO,CAACL,IAAI,CAACkL,IAAI,CAAC9K,gBAAgB,CAAC,GAAGyC,OAAO,EAAE,CAAC,EAAE,UAAU0I,YAAY,EAAE;QAC5E;QACA,IAAID,gBAAgB,GAAGJ,IAAI,CAACM,WAAW,EAAE;UACxCD,YAAY,CAACH,KAAK,CAACC,KAAK,GAAG,GAAGH,IAAI,CAACM,WAAW,IAAI;QACnD,CAAC,MAAM;UACND,YAAY,CAACH,KAAK,CAACC,KAAK,GAAG,GAAGC,gBAAgB,IAAI;QACnD;;QAEA;QACA,IAAI,CAACC,YAAY,CAACE,YAAY,CAAC,OAAO,CAAC,EAAE;UACxCF,YAAY,CAACG,YAAY,CAAC,OAAO,EAAEH,YAAY,CAACI,YAAY,CAAC;QAC9D;QACA,IAAI,CAACJ,YAAY,CAACE,YAAY,CAAC,QAAQ,CAAC,EAAE;UACzCF,YAAY,CAACG,YAAY,CAAC,QAAQ,EAAEH,YAAY,CAACK,aAAa,CAAC;QAChE;MACD,CAAC,CAAC;;MAEF;MACA;MACA,IAAIP,KAAK,GAAGH,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACwI,KAAK;MAC9D,IAAIQ,MAAM,GAAGX,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACgJ,MAAM;MAEhE,IAAIpK,SAAS,CAAC8F,QAAQ,CAAC,cAAc,CAAC,EAAE;QACvC,MAAMuE,WAAW,GAAGpN,MAAM,CAACqN,UAAU;QACrC,MAAMC,YAAY,GAAGtN,MAAM,CAACuN,WAAW;QAEvC,MAAMC,WAAW,GAAGJ,WAAW,GAAGA,WAAW,GAAG,GAAG;QACnD,MAAMK,YAAY,GAAGH,YAAY,GAAGA,YAAY,GAAG,GAAG;QAEtD,MAAMI,KAAK,GAAGf,KAAK,GAAGQ,MAAM;QAE5B,IAAIO,KAAK,GAAGF,WAAW,GAAGC,YAAY,EAAE;UACvCd,KAAK,GAAGa,WAAW;UACnBL,MAAM,GAAGK,WAAW,GAAGE,KAAK;QAC7B,CAAC,MAAM;UACNP,MAAM,GAAGM,YAAY;UACrBd,KAAK,GAAGc,YAAY,GAAGC,KAAK;QAC7B;;QAEA;QACA,EAAE,CAAC/L,OAAO,CAACL,IAAI,CAACkL,IAAI,CAAC9K,gBAAgB,CAAC,GAAGyC,OAAO,EAAE,CAAC,EAAE,UAAU0I,YAAY,EAAE;UAC5EA,YAAY,CAACH,KAAK,CAACC,KAAK,GAAG,GAAGA,KAAK,IAAI;QACxC,CAAC,CAAC;QAEFA,KAAK,GAAGH,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACwI,KAAK;QAC1DQ,MAAM,GAAGX,IAAI,CAACC,aAAa,CAAC,GAAGtI,OAAO,cAAc,CAAC,CAACgJ,MAAM;MAC7D;MAEA,IAAIhJ,OAAO,KAAK,KAAK,EAAE;QACtBwI,KAAK,GAAG5J,SAAS,CAAC,CAAC,CAAC,CAAC+J,WAAW;MACjC;;MAEA;MACA;MACA,OAAO;QACNa,CAAC,EAAE,GAAGlH,IAAI,CAACC,KAAK,CAACiG,KAAK,CAAC,IAAI;QAC3BiB,CAAC,EAAE,GAAGnH,IAAI,CAACC,KAAK,CAACyG,MAAM,CAAC,IAAI;QAC5BU,EAAE,EAAE,GAAGpH,IAAI,CAACC,KAAK,CAAC6F,GAAG,GAAGI,KAAK,CAAC,IAAI;QAClCmB,EAAE,EAAE,GAAGrH,IAAI,CAACC,KAAK,CAAC6F,GAAG,GAAGY,MAAM,CAAC;MAChC,CAAC;IACF,CAAC;IAED,MAAMY,eAAe,GAAG,SAAAA,CAAUC,MAAM,EAAE;MACzC,IAAIC,QAAQ;MAEZ,IAAI9J,OAAO,KAAK,KAAK,EAAE;QACtB8J,QAAQ,GAAG,IAAI;MAChB,CAAC,MAAM;QACNA,QAAQ,GAAGnC,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAACjE,QAAQ,CAAC,OAAO,CAAC;MAC5C;;MAEA;MACA;MACA,MAAM2N,eAAe,GAAG/J,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,OAAO;MAEnE,IAAI4F,WAAW,KAAK,UAAU,EAAE;QAC/B8B,SAAS,CAACsC,GAAG,CAAC,MAAM,EAAE,YAAYH,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACF,EAAE,MAAM,CAAC;QAC/D;QACA,IAAII,eAAe,IAAIrC,SAAS,CAACjD,MAAM,CAAC,CAAC,CAACX,MAAM,EAAE;UACjD4D,SAAS,CAACjD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC,MAAM,EAAE,YAAYH,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACF,EAAE,MAAM,CAAC;QACzE;QACA,IAAIG,QAAQ,IAAI,CAACC,eAAe,EAAE;UACjC;UACApC,QAAQ,CAACqC,GAAG,CAAC,MAAM,EAAE,SAASH,MAAM,CAACF,EAAE,KAAKE,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACJ,CAAC,MAAM,CAAC;QACzE;QACA;QACA,IAAIM,eAAe,IAAIpC,QAAQ,CAAClD,MAAM,CAAC,CAAC,CAACX,MAAM,EAAE;UAChD6D,QAAQ,CAAClD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC,MAAM,EAAE,SAASH,MAAM,CAACF,EAAE,KAAKE,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACJ,CAAC,MAAM,CAAC;QAClF;MACD,CAAC,MAAM;QACN/B,SAAS,CAACsC,GAAG,CAAC,MAAM,EAAE,YAAYH,MAAM,CAACH,EAAE,KAAKG,MAAM,CAACJ,CAAC,MAAM,CAAC;QAC/D;QACA,IAAIM,eAAe,IAAIrC,SAAS,CAACjD,MAAM,CAAC,CAAC,CAACX,MAAM,EAAE;UACjD4D,SAAS,CAACjD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC,MAAM,EAAE,YAAYH,MAAM,CAACH,EAAE,KAAKG,MAAM,CAACJ,CAAC,MAAM,CAAC;QACzE;QAEA,IAAIK,QAAQ,IAAI,CAACC,eAAe,EAAE;UACjC;UACApC,QAAQ,CAACqC,GAAG,CAAC,MAAM,EAAE,aAAaH,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACJ,CAAC,MAAMI,MAAM,CAACH,EAAE,GAAG,CAAC;QAC3E;QACA;QACA,IAAIK,eAAe,IAAIpC,QAAQ,CAAClD,MAAM,CAAC,CAAC,CAACX,MAAM,EAAE;UAChD6D,QAAQ,CAAClD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC,MAAM,EAAE,aAAaH,MAAM,CAACL,CAAC,KAAKK,MAAM,CAACJ,CAAC,MAAMI,MAAM,CAACH,EAAE,GAAG,CAAC;QACpF;MACD;MACA9K,SAAS,CAACoL,GAAG,CAAC,QAAQ,EAAEH,MAAM,CAACJ,CAAC,CAAC;IAClC,CAAC;IAED,MAAMQ,iBAAiB,GAAG,SAAAA,CAAUJ,MAAM,EAAE;MAC3CjL,SAAS,CAACoL,GAAG,CAAC,WAAW,EAAEH,MAAM,CAACL,CAAC,CAAC;IACrC,CAAC;IAED,MAAMU,YAAY,GAAG,SAAAA,CAAUL,MAAM,EAAE;MACtC;MACA,MAAMM,QAAQ,GAAGvE,WAAW,KAAK,UAAU,GAAGiE,MAAM,CAACF,EAAE,GAAGE,MAAM,CAACH,EAAE;MACnE,MAAMU,eAAe,GAAG,GAAG9H,IAAI,CAACC,KAAK,CAAC5E,UAAU,CAACwM,QAAQ,CAAC,CAAC,IAAI;MAE/DrC,MAAM,CAACkC,GAAG,CAACpE,WAAW,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,EAAEwE,eAAe,CAAC;MACxER,eAAe,CAACC,MAAM,CAAC;IACxB,CAAC;;IAED;IACA,MAAMQ,YAAY,GAAG,SAAAA,CAAUC,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAE;MAC7C,OAAOlI,IAAI,CAACkI,GAAG,CAACD,GAAG,EAAEjI,IAAI,CAACiI,GAAG,CAACC,GAAG,EAAEF,GAAG,CAAC,CAAC;IACzC,CAAC;;IAED;IACA,MAAMG,mBAAmB,GAAG,SAAAA,CAAUC,SAAS,EAAEC,SAAS,EAAE;MAC3D,MAAMC,QAAQ,GAAG,CAACD,SAAS,GAAG1D,OAAO,IAAIF,SAAS;MAClD,MAAM8D,UAAU,GAAG,CAACH,SAAS,GAAGxD,OAAO,IAAIF,QAAQ;MACnD,MAAM8D,gBAAgB,GAAGlF,WAAW,KAAK,UAAU,GAAGgF,QAAQ,GAAGC,UAAU;MAE3E,OAAOR,YAAY,CAACS,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;;IAED;IACA,MAAMC,qBAAqB,GAAG,SAAAA,CAAA,EAAW;MACxC;MACA,MAAMC,cAAc,GAAGrN,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAACpE,WAAW,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;;MAE1F;MACA,IAAIA,WAAW,KAAK,YAAY,EAAE;QACjC;QACA,IAAIoF,cAAc,IAAIpM,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE;UAC/C5J,SAAS,CAACsG,IAAI,CAAC,kCAAkC,CAAC,CAAC+F,IAAI,CAAC,CAAC;UACzDrM,SAAS,CAACE,OAAO,CAAC,uGAAuG,CAAC,CAACoG,IAAI,CAAC,uBAAuB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3K,CAAC,MAAM;UACNpL,SAAS,CAACsG,IAAI,CAAC,kCAAkC,CAAC,CAACgG,IAAI,CAAC,CAAC;UACzDtM,SAAS,CAACE,OAAO,CAAC,uGAAuG,CAAC,CAACoG,IAAI,CAAC,uBAAuB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3K;;QAEA;QACA,IAAIgB,cAAc,IAAIpM,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE;UAC/C5J,SAAS,CAACsG,IAAI,CAAC,iCAAiC,CAAC,CAAC+F,IAAI,CAAC,CAAC;UACxDrM,SAAS,CAACE,OAAO,CAAC,uGAAuG,CAAC,CAACoG,IAAI,CAAC,sBAAsB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1K,CAAC,MAAM;UACNpL,SAAS,CAACsG,IAAI,CAAC,iCAAiC,CAAC,CAACgG,IAAI,CAAC,CAAC;UACxDtM,SAAS,CAACE,OAAO,CAAC,uGAAuG,CAAC,CAACoG,IAAI,CAAC,sBAAsB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1K;MAED,CAAC,MAAM,IAAIpE,WAAW,KAAK,UAAU,EAAE;QACtC;QACA,IAAIoF,cAAc,IAAIpM,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE;UAChDpK,SAAS,CAACsG,IAAI,CAAC,kCAAkC,CAAC,CAAC+F,IAAI,CAAC,CAAC;UACzDrM,SAAS,CAACE,OAAO,CAAC,6HAA6H,CAAC,CAACoG,IAAI,CAAC,uBAAuB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACjM,CAAC,MAAM;UACNpL,SAAS,CAACsG,IAAI,CAAC,kCAAkC,CAAC,CAACgG,IAAI,CAAC,CAAC;UACzDtM,SAAS,CAACE,OAAO,CAAC,6HAA6H,CAAC,CAACoG,IAAI,CAAC,uBAAuB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACjM;;QAEA;QACA,IAAIgB,cAAc,IAAIpM,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE;UAChDpK,SAAS,CAACsG,IAAI,CAAC,iCAAiC,CAAC,CAAC+F,IAAI,CAAC,CAAC;UACxDrM,SAAS,CAACE,OAAO,CAAC,6HAA6H,CAAC,CAACoG,IAAI,CAAC,sBAAsB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAChM,CAAC,MAAM;UACNpL,SAAS,CAACsG,IAAI,CAAC,iCAAiC,CAAC,CAACgG,IAAI,CAAC,CAAC;UACxDtM,SAAS,CAACE,OAAO,CAAC,6HAA6H,CAAC,CAACoG,IAAI,CAAC,sBAAsB,CAAC,CAAC8E,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAChM;MACD;IACD,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA,IAAIhK,OAAO,KAAK,OAAO,EAAE;MACxB,IAAI,CAAC9E,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,EAAE;QAC9BqH,SAAS,CAAC,CAAC,CAAC,CAACyD,KAAK,GAAG,IAAI;QACzBjQ,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,GAAGqH,SAAS,CAAC,CAAC,CAAC;MACxC;MAEA,IAAI,CAACxM,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,EAAE;QAC7BsH,QAAQ,CAAC,CAAC,CAAC,CAACwD,KAAK,GAAG,IAAI;QACxBjQ,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,GAAGsH,QAAQ,CAAC,CAAC,CAAC;MACtC;IACD;IAEA5D,MAAM,CAACzI,QAAQ,CAAC,CAACiJ,KAAK,CAAC,UAAU1F,CAAC,EAAE;MACnC;MACAA,CAAC,CAAC,sBAAsB,CAAC,CAACmF,IAAI,CAAC,YAAY;QAC1C,IAAIoH,QAAQ,GAAGvM,CAAC,CAAC,IAAI,CAAC,CAACI,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAImM,QAAQ,EAAE;UACb,IAAI;YACH,IAAIC,cAAc,GAAGC,IAAI,CAACC,KAAK,CAACH,QAAQ,CAACI,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;YAEnE,IAAIH,cAAc,CAAC/E,oBAAoB,KAAK,KAAK,EAAE;cAClDzH,CAAC,CAAC,IAAI,CAAC,CAACqF,QAAQ,CAAC,yBAAyB,CAAC;YAC5C;UACD,CAAC,CAAC,OAAO3H,KAAK,EAAE;YACfT,OAAO,CAACS,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;UACrD;QACD;MACD,CAAC,CAAC;;MAEF;MACAsC,CAAC,CAAC,sBAAsB,CAAC,CAACmF,IAAI,CAAC,YAAY;QAC1C,IAAIoH,QAAQ,GAAGvM,CAAC,CAAC,IAAI,CAAC,CAACI,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAImM,QAAQ,EAAE;UACb,IAAI;YACH,IAAIC,cAAc,GAAGC,IAAI,CAACC,KAAK,CAACH,QAAQ,CAACI,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;YAEnE,IAAIH,cAAc,CAAC/E,oBAAoB,KAAK,IAAI,EAAE;cACjDzH,CAAC,CAAC,IAAI,CAAC,CAACqF,QAAQ,CAAC,wBAAwB,CAAC;YAC3C;UACD,CAAC,CAAC,OAAO3H,KAAK,EAAE;YACfT,OAAO,CAACS,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;UACrD;QACD;MACD,CAAC,CAAC;;MAEF;MACAqC,SAAS,CAAC6M,YAAY,CAAC,CAAC,CAACC,IAAI,CAAC,YAAY;QACzC7P,MAAM,CAACkE,UAAU,CAAC,YAAY;UAC7B,MAAM8J,MAAM,GAAG1B,UAAU,CAACtB,OAAO,CAAClB,kBAAkB,CAAC;UACrDsE,iBAAiB,CAACJ,MAAM,CAAC;UACzBK,YAAY,CAACL,MAAM,CAAC;UACpBjL,SAAS,CAACoL,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5B,CAAC,EAAE,GAAG,CAAC;MACR,CAAC,CAAC;IACH,CAAC,CAAC;IAEF9C,OAAO,GAAG,CAAC;IACXD,OAAO,GAAG,CAAC;IACXD,QAAQ,GAAG,CAAC;IACZD,SAAS,GAAG,CAAC;;IAEb;IACA,MAAM4E,WAAW,GAAG,SAAAA,CAAU9J,CAAC,EAAE;MAChC,IACC,CAAEA,CAAC,CAAC+J,KAAK,GAAG/J,CAAC,CAACgK,KAAK,IAAIhK,CAAC,CAAC+J,KAAK,GAAG,CAAC/J,CAAC,CAACgK,KAAK,IAAMhK,CAAC,CAAC+J,KAAK,GAAG/J,CAAC,CAACgK,KAAK,IAAIhK,CAAC,CAAC+J,KAAK,GAAG,CAAC/J,CAAC,CAACgK,KAAM,KACvFjG,WAAW,KAAK,UAAU,EACzB;QACD/D,CAAC,CAACiK,cAAc,CAAC,CAAC;MACnB,CAAC,MAAM,IACN,CAAEjK,CAAC,CAAC+J,KAAK,GAAG/J,CAAC,CAACgK,KAAK,IAAIhK,CAAC,CAAC+J,KAAK,GAAG,CAAC/J,CAAC,CAACgK,KAAK,IAAMhK,CAAC,CAAC+J,KAAK,GAAG/J,CAAC,CAACgK,KAAK,IAAIhK,CAAC,CAAC+J,KAAK,GAAG,CAAC/J,CAAC,CAACgK,KAAM,KACvFjG,WAAW,KAAK,UAAU,EACzB;QACD/D,CAAC,CAACiK,cAAc,CAAC,CAAC;MACnB;MACAlN,SAAS,CAACsF,QAAQ,CAAC,QAAQ,CAAC;MAC5BgD,OAAO,GAAGtI,SAAS,CAACiL,MAAM,CAAC,CAAC,CAACkC,IAAI;MACjC9E,OAAO,GAAGrI,SAAS,CAACiL,MAAM,CAAC,CAAC,CAACmC,GAAG;MAChChF,QAAQ,GAAGU,SAAS,CAACc,KAAK,CAAC,CAAC;MAC5BzB,SAAS,GAAGW,SAAS,CAACsB,MAAM,CAAC,CAAC;IAC/B,CAAC;;IAED;IACA,MAAMiD,MAAM,GAAG,SAAAA,CAAUpK,CAAC,EAAE;MAC3BjD,SAAS,CAACsF,QAAQ,CAAC,QAAQ,CAAC;MAE5B,IAAItF,SAAS,CAAC8F,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACjC;QACAwF,YAAY,CAAC/B,UAAU,CAACsC,mBAAmB,CAAC5I,CAAC,CAACqK,KAAK,EAAErK,CAAC,CAACsK,KAAK,CAAC,CAAC,CAAC;;QAE/D;QACApB,qBAAqB,CAAC,CAAC;;QAEvB;QACA,IAAIlJ,CAAC,CAACuK,IAAI,KAAK,WAAW,EAAE;UAC3B3G,MAAM,CAAC,IAAI,CAAC,CAACP,IAAI,CAAC,IAAIkC,WAAW,UAAU,CAAC,CAAClD,QAAQ,CAAC,OAAO,CAAC;QAC/D;QAEA,IAAIlE,OAAO,KAAK,KAAK,EAAE;UACtB,MAAMC,SAAS,GAAGrB,SAAS,CAAC6F,MAAM,CAAC,CAAC,CAACS,IAAI,CAAC,mBAAmB,CAAC;UAC9D,MAAM5G,QAAQ,GAAG2B,SAAS,CAAC,CAAC,CAAC,CAAC3B,QAAQ;UAEtC,IAAIA,QAAQ,CAAC,CAAC,CAAC,CAAC+N,SAAS,KAAK,MAAM,EAAE;YACrC/N,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;YACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;YACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;UAClC;UAEA,MAAM6N,iBAAiB,GACtBzF,OAAO,CAACjB,WAAW,KAAK,UAAU,GAAGhH,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,CAAC,GAAGpK,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,CAAC;;UAEpF;UACA,MAAMwC,cAAc,GAAGnE,OAAO,CAACjB,WAAW,KAAK,UAAU,GACtDjI,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAClCrM,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;UAEtC,MAAMuC,cAAc,GAAG7E,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAACjE,QAAQ,CAAC,QAAQ,CAAC;UACzD,MAAMoQ,aAAa,GAAG7E,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAACjE,QAAQ,CAAC,OAAO,CAAC;UAEtD,IAAI4D,OAAO,KAAK,QAAQ,EAAE;YACzB,IAAIgL,cAAc,GAAGsB,iBAAiB,EAAE;cACvC;cACA,IAAI;gBACH,MAAMG,YAAY,GAAGvR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7C,IAAIoM,YAAY,IAAIA,YAAY,CAACtL,CAAC,IAAIsL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,EAAE;kBACzD,MAAMwF,UAAU,GAAG,IAAIC,GAAG,CAACwL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,CAAC;kBAC9C,MAAM;oBAAE4F,KAAK;oBAAEC;kBAAI,CAAC,GAAGG,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;;kBAE5E;kBACA,IAAI9D,OAAO;kBACX,IAAIwD,GAAG,EAAE;oBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;kBAC1B,CAAC,MAAM,IAAI,OAAOoL,YAAY,CAAC7K,WAAW,KAAK,UAAU,EAAE;oBAC1D,IAAI;sBACH/D,OAAO,GAAG4O,YAAY,CAAC7K,WAAW,CAAC,CAAC;oBACrC,CAAC,CAAC,OAAOC,CAAC,EAAE;sBACXhE,OAAO,GAAG,IAAI;oBACf;kBACD;;kBAEA;kBACA,IAAIuD,KAAK,IAAIvD,OAAO,IAAI,OAAO4O,YAAY,CAACpK,cAAc,KAAK,UAAU,IAAI,OAAOoK,YAAY,CAAC1K,MAAM,KAAK,UAAU,EAAE;oBACvH,IAAI;sBACH,IAAIO,IAAI,CAACC,KAAK,CAACkK,YAAY,CAACpK,cAAc,CAAC,CAAC,CAAC,IAAIxE,OAAO,EAAE;wBACzD4O,YAAY,CAAC1K,MAAM,CAACX,KAAK,CAAC;sBAC3B;oBACD,CAAC,CAAC,OAAOS,CAAC,EAAE;sBACX/F,OAAO,CAACc,GAAG,CAAC,sBAAsB,EAAEiF,CAAC,CAAC;oBACvC;kBACD;gBACD;cACD,CAAC,CAAC,OAAOtF,KAAK,EAAE;gBACfT,OAAO,CAACc,GAAG,CAAC,gCAAgC,EAAEL,KAAK,CAAC;cACrD;;cAEA;cACA,IAAIgQ,cAAc,IAAIC,aAAa,EAAE;gBACpC;gBACA,MAAME,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAE3D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;gBAChG;gBACA,IAAIF,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBAChG;cACD,CAAC,MAAM;gBACN,IAAIP,cAAc,EAAE;kBACnB;kBACA,MAAMK,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;kBAC3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;oBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;kBAC/F;gBACD,CAAC,MAAM;kBACN;kBACA,MAAMJ,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;kBAC7D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;oBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;kBACjG;kBACAxO,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;kBACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;kBACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;kBACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;gBAClC;cACD;YACD,CAAC,MAAM;cACN;cACA,IAAI;gBACH,MAAMsO,WAAW,GAAG7R,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAC3C,MAAMoM,YAAY,GAAGvR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAE7C,IAAI0M,WAAW,IAAIA,WAAW,CAAC5L,CAAC,IAAI4L,WAAW,CAAC5L,CAAC,CAAC3F,GAAG,EAAE;kBACtD,MAAMwF,UAAU,GAAG,IAAIC,GAAG,CAAC8L,WAAW,CAAC5L,CAAC,CAAC3F,GAAG,CAAC;kBAC7C,MAAM;oBAAE4F,KAAK;oBAAEC;kBAAI,CAAC,GAAGG,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;;kBAE5E;kBACA,IAAI9D,OAAO;kBACX,IAAIwD,GAAG,EAAE;oBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;kBAC1B,CAAC,MAAM,IAAIoL,YAAY,IAAI,OAAOA,YAAY,CAAC7K,WAAW,KAAK,UAAU,EAAE;oBAC1E,IAAI;sBACH/D,OAAO,GAAG4O,YAAY,CAAC7K,WAAW,CAAC,CAAC;oBACrC,CAAC,CAAC,OAAOC,CAAC,EAAE;sBACXhE,OAAO,GAAG,IAAI;oBACf;kBACD;;kBAEA;kBACA,IAAIuD,KAAK,IAAIvD,OAAO,IAAI,OAAOkP,WAAW,CAAC1K,cAAc,KAAK,UAAU,IAAI,OAAO0K,WAAW,CAAChL,MAAM,KAAK,UAAU,EAAE;oBACrH,IAAI;sBACH,IAAIO,IAAI,CAACC,KAAK,CAACwK,WAAW,CAAC1K,cAAc,CAAC,CAAC,CAAC,IAAIxE,OAAO,EAAE;wBACxDkP,WAAW,CAAChL,MAAM,CAACX,KAAK,CAAC;sBAC1B;oBACD,CAAC,CAAC,OAAOS,CAAC,EAAE;sBACX/F,OAAO,CAACc,GAAG,CAAC,sBAAsB,EAAEiF,CAAC,CAAC;oBACvC;kBACD;gBACD;cACD,CAAC,CAAC,OAAOtF,KAAK,EAAE;gBACfT,OAAO,CAACc,GAAG,CAAC,gCAAgC,EAAEL,KAAK,CAAC;cACrD;;cAEA;cACA,IAAIgQ,cAAc,IAAIC,aAAa,EAAE;gBACpC;gBACA,MAAMI,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAC3D,MAAMqM,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAE7D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;gBAC/F;gBACA,IAAIJ,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBACjG;cACD,CAAC,MAAM;gBACN,IAAIN,aAAa,EAAE;kBAClB;kBACA,MAAME,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;kBAC7D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;oBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;kBAChG;gBACD,CAAC,MAAM;kBACN;kBACA,MAAMF,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;kBAC3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;oBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;kBAChG;kBACAxO,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;kBACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;kBACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;kBACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;gBAClC;cACD;YACD;UACD;UAEA,IAAIuB,OAAO,KAAK,OAAO,EAAE;YACxB,IAAIgL,cAAc,GAAGsB,iBAAiB,EAAE;cACvC,IAAIC,cAAc,IAAIC,aAAa,EAAE;gBACpCtR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC/BxE,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;cAChC,CAAC,MAAM;gBACN,IAAIqN,cAAc,EAAE;kBACnBrR,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC/B,CAAC,MAAM;kBACNxE,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;kBAChCZ,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;kBACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;kBACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;kBACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;gBAClC;cACD;YACD,CAAC,MAAM;cACN,IAAI8N,cAAc,IAAIC,aAAa,EAAE;gBACpCtR,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC9BxE,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;cACjC,CAAC,MAAM;gBACN,IAAIsN,aAAa,EAAE;kBAClBtR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAChC,CAAC,MAAM;kBACNxE,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;kBAC/BZ,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;kBACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;kBACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;kBACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;gBAClC;cACD;YACD;UACD;QACD;MACD;IACD,CAAC;;IAED;IACA,MAAMuO,SAAS,GAAG,SAAAA,CAAUnL,CAAC,EAAE;MAC9BjD,SAAS,CAACqO,WAAW,CAAC,QAAQ,CAAC;MAC/B,IAAIpL,CAAC,CAACuK,IAAI,KAAK,YAAY,EAAE;QAC5B3G,MAAM,CAAC,IAAI,CAAC,CAACP,IAAI,CAAC,IAAIkC,WAAW,UAAU,CAAC,CAAC6F,WAAW,CAAC,OAAO,CAAC;MAClE;IACD,CAAC;IAED,MAAMC,UAAU,GAAGrG,OAAO,CAACN,qBAAqB,GAAGuB,MAAM,GAAGlJ,SAAS;;IAErE;IACA,MAAMuO,cAAc,GAAGtG,OAAO,CAACJ,kBAAkB,IAAI,CAACI,OAAO,CAACD,yBAAyB;IAEvF,IAAI,CAACuG,cAAc,EAAE;MACpBD,UAAU,CAACrI,EAAE,CAAC,WAAW,EAAE8G,WAAW,CAAC;MACvCuB,UAAU,CAACrI,EAAE,CAAC,MAAM,EAAEoH,MAAM,CAAC;MAC7BiB,UAAU,CAACrI,EAAE,CAAC,YAAY,EAAE,YAAY;QACvCjG,SAAS,CAACqO,WAAW,CAAC,QAAQ,CAAC;MAChC,CAAC,CAAC;IACH;IAEA,IAAIpG,OAAO,CAACP,oBAAoB,IAAI,CAAC6G,cAAc,EAAE;MACpDvO,SAAS,CAACiG,EAAE,CAAC,YAAY,EAAE8G,WAAW,CAAC;MACvC/M,SAAS,CAACiG,EAAE,CAAC,WAAW,EAAEoH,MAAM,CAAC;MACjCrN,SAAS,CAACiG,EAAE,CAAC,YAAY,EAAEmI,SAAS,CAAC;IACtC;IAEAlF,MAAM,CAACjD,EAAE,CAAC,WAAW,EAAE,UAAUhD,CAAC,EAAE;MACnC,IAAI,CAACsL,cAAc,EAAE;QACpBtL,CAAC,CAACiK,cAAc,CAAC,CAAC;MACnB;IACD,CAAC,CAAC;;IAEF;IACAlN,SAAS,CAACsG,IAAI,CAAC,GAAGlF,OAAO,EAAE,CAAC,CAAC6E,EAAE,CAAC,WAAW,EAAE,UAAU/D,KAAK,EAAE;MAC7D,IAAI,CAACqM,cAAc,EAAE;QACpBrM,KAAK,CAACgL,cAAc,CAAC,CAAC;MACvB;IACD,CAAC,CAAC;IAEF,IAAIjF,OAAO,CAACL,aAAa,IAAI,CAAC2G,cAAc,EAAE;MAC7CvO,SAAS,CAACiG,EAAE,CAAC,OAAO,EAAE,UAAUhD,CAAC,EAAE;QAClC,IAAI,CAACA,CAAC,CAACX,MAAM,CAACpC,OAAO,CAAC,eAAe,CAAC,EAAE;UACvCoI,OAAO,GAAGtI,SAAS,CAACiL,MAAM,CAAC,CAAC,CAACkC,IAAI;UACjC9E,OAAO,GAAGrI,SAAS,CAACiL,MAAM,CAAC,CAAC,CAACmC,GAAG;UAChChF,QAAQ,GAAGU,SAAS,CAACc,KAAK,CAAC,CAAC;UAC5BzB,SAAS,GAAGW,SAAS,CAACsB,MAAM,CAAC,CAAC;UAE9BkB,YAAY,CAACO,mBAAmB,CAAC5I,CAAC,CAACqK,KAAK,EAAErK,CAAC,CAACsK,KAAK,CAAC,CAAC;QACpD;MACD,CAAC,CAAC;IACH;IAEA,IAAInM,OAAO,KAAK,KAAK,EAAE;MACtB,IAAI0H,SAAS,CAAC5D,MAAM,KAAK,CAAC,IAAI6D,QAAQ,CAAC7D,MAAM,KAAK,CAAC,EAAE;QACpD,MAAMsJ,eAAe,GAAGxO,SAAS,CAAC6F,MAAM,CAAC,CAAC;QAE1C2I,eAAe,CAACxF,MAAM,CACrB;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WACI,CAAC;QAED,MAAMyF,SAAS,GAAGD,eAAe,CAAClI,IAAI,CAAC,mBAAmB,CAAC;QAC3D,MAAMoI,UAAU,GAAGF,eAAe,CAAClI,IAAI,CAAC,cAAc,CAAC;QAEvDmI,SAAS,CAACxI,EAAE,CAAC,OAAO,EAAE,YAAY;UACjC/I,OAAO,CAACc,GAAG,CAAC,+BAA+B,CAAC;UAC5Cd,OAAO,CAACc,GAAG,CAAC,oBAAoB,EAAE4E,MAAM,CAAC6B,IAAI,CAACnI,OAAO,CAAC,CAAC;UACvDY,OAAO,CAACc,GAAG,CAAC,kBAAkB,EAAE8K,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;UAChDvE,OAAO,CAACc,GAAG,CAAC,iBAAiB,EAAE+K,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;UAC9CvE,OAAO,CAACc,GAAG,CAAC,oBAAoB,EAAE8K,SAAS,CAAC,CAAC,CAAC,CAAC;UAC/C5L,OAAO,CAACc,GAAG,CAAC,mBAAmB,EAAE+K,QAAQ,CAAC,CAAC,CAAC,CAAC;UAC7C7L,OAAO,CAACc,GAAG,CAAC,2BAA2B,EAAE1B,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAAC;UAClEvE,OAAO,CAACc,GAAG,CAAC,0BAA0B,EAAE1B,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAAC;UAEhE,MAAM/B,QAAQ,GAAG+O,SAAS,CAAC,CAAC,CAAC,CAAC/O,QAAQ;UAEtC,MAAM0M,cAAc,GAAGrN,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAACpE,WAAW,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;UAE1F,IAAItH,QAAQ,CAAC,CAAC,CAAC,CAAC+N,SAAS,KAAK,MAAM,EAAE;YACrC/N,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;YACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;YACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;YAEjC,MAAM6N,iBAAiB,GACtBzF,OAAO,CAACjB,WAAW,KAAK,UAAU,GAAGhH,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,CAAC,GAAGpK,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,CAAC;YAEpF,IAAIwC,cAAc,IAAIsB,iBAAiB,EAAE;cACxC,IAAItM,OAAO,KAAK,OAAO,EAAE;gBACxB9E,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;cAChC;cAEA,IAAIM,OAAO,KAAK,QAAQ,EAAE;gBACzBlE,OAAO,CAACc,GAAG,CAAC,gCAAgC,CAAC;gBAC7Cd,OAAO,CAACc,GAAG,CAAC,mBAAmB,EAAE8K,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBACjDvE,OAAO,CAACc,GAAG,CAAC,uBAAuB,EAAE1B,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAAC;;gBAE9D;gBACA,MAAMoM,YAAY,GAAGvR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7CvE,OAAO,CAACc,GAAG,CAAC,eAAe,EAAE6P,YAAY,CAAC;;gBAE1C;gBACA3Q,OAAO,CAACc,GAAG,CAAC,oCAAoC,CAAC;gBACjDd,OAAO,CAACc,GAAG,CAAC,cAAc,EAAE,OAAO6P,YAAY,CAACzK,SAAS,CAAC;gBAC1DlG,OAAO,CAACc,GAAG,CAAC,mBAAmB,EAAE,OAAO6P,YAAY,CAAC/J,cAAc,CAAC;gBACpE5G,OAAO,CAACc,GAAG,CAAC,SAAS,EAAE,OAAO6P,YAAY,CAAC/L,IAAI,CAAC;gBAChD5E,OAAO,CAACc,GAAG,CAAC,WAAW,EAAE,OAAO6P,YAAY,CAACc,MAAM,CAAC;gBACpDzR,OAAO,CAACc,GAAG,CAAC,kBAAkB,EAAE4E,MAAM,CAACgM,mBAAmB,CAACf,YAAY,CAAC,CAAC;gBAEzE,IAAIA,YAAY,IAAI,OAAOA,YAAY,CAACzK,SAAS,KAAK,UAAU,EAAE;kBACjElG,OAAO,CAACc,GAAG,CAAC,qCAAqC,CAAC;kBAClD,IAAI;oBACH;oBACA,IAAI6P,YAAY,CAACtL,CAAC,IAAIsL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,EAAE;sBACzCM,OAAO,CAACc,GAAG,CAAC,4BAA4B,CAAC;sBACzC,MAAMoE,UAAU,GAAG,IAAIC,GAAG,CAACwL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,CAAC;sBAC9C,MAAM;wBAAE4F,KAAK;wBAAEC;sBAAI,CAAC,GAAGG,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;;sBAE5E;sBACA,IAAI9D,OAAO,GAAG,IAAI;sBAClB,IAAI,OAAO4O,YAAY,CAAC7K,WAAW,KAAK,UAAU,EAAE;wBACnD/D,OAAO,GAAGF,UAAU,CAAC0D,GAAG,IAAIoL,YAAY,CAAC7K,WAAW,CAAC,CAAC,CAAC;sBACxD;;sBAEA;sBACA,IAAIR,KAAK,IAAIvD,OAAO,IACnB,OAAO4O,YAAY,CAACpK,cAAc,KAAK,UAAU,IACjD,OAAOoK,YAAY,CAAC1K,MAAM,KAAK,UAAU,EAAE;wBAC3C,MAAMrD,WAAW,GAAG4D,IAAI,CAACC,KAAK,CAACkK,YAAY,CAACpK,cAAc,CAAC,CAAC,CAAC;wBAC7D,IAAI3D,WAAW,IAAIb,OAAO,EAAE;0BAC3B4O,YAAY,CAAC1K,MAAM,CAACX,KAAK,CAAC;wBAC3B;sBACD;oBACD;oBAEAtF,OAAO,CAACc,GAAG,CAAC,4CAA4C,CAAC;;oBAEzD;oBACA6P,YAAY,CAACzK,SAAS,CAAC,CAAC;oBACxBlG,OAAO,CAACc,GAAG,CAAC,iCAAiC,CAAC;kBAE/C,CAAC,CAAC,OAAOL,KAAK,EAAE;oBACfT,OAAO,CAACc,GAAG,CAAC,kCAAkC,EAAEL,KAAK,CAAC;oBACtD;oBACA,IAAI;sBACHkQ,YAAY,CAACzK,SAAS,CAAC,CAAC;sBACxBlG,OAAO,CAACc,GAAG,CAAC,gCAAgC,CAAC;oBAC9C,CAAC,CAAC,OAAO6Q,EAAE,EAAE;sBACZ3R,OAAO,CAACc,GAAG,CAAC,mCAAmC,EAAE6Q,EAAE,CAAC;oBACrD;kBACD;gBACD,CAAC,MAAM;kBACN3R,OAAO,CAACc,GAAG,CAAC,iDAAiD,CAAC;kBAC9Dd,OAAO,CAACc,GAAG,CAAC,kCAAkC,CAAC;;kBAE/C;kBACA,IAAI8Q,eAAe,GAAG,IAAI;kBAC1B,IAAIC,GAAG,GAAGlB,YAAY;kBACtB,OAAOkB,GAAG,IAAI,CAACD,eAAe,EAAE;oBAC/B,IAAIC,GAAG,CAAC3L,SAAS,IAAI,OAAO2L,GAAG,CAAC3L,SAAS,KAAK,UAAU,EAAE;sBACzD0L,eAAe,GAAGC,GAAG,CAAC3L,SAAS,CAAC4L,IAAI,CAACnB,YAAY,CAAC;sBAClD;oBACD;oBACAkB,GAAG,GAAGnM,MAAM,CAACqM,cAAc,CAACF,GAAG,CAAC;kBACjC;kBAEA,IAAID,eAAe,EAAE;oBACpB5R,OAAO,CAACc,GAAG,CAAC,sCAAsC,CAAC;oBACnD,IAAI;sBACH8Q,eAAe,CAAC,CAAC;sBACjB5R,OAAO,CAACc,GAAG,CAAC,iCAAiC,CAAC;oBAC/C,CAAC,CAAC,OAAOiF,CAAC,EAAE;sBACX/F,OAAO,CAACc,GAAG,CAAC,+BAA+B,EAAEiF,CAAC,CAAC;oBAChD;kBACD,CAAC,MAAM;oBACN/F,OAAO,CAACc,GAAG,CAAC,sCAAsC,CAAC;;oBAEnD;oBACA,MAAMkR,MAAM,GAAGrB,YAAY,CAACtL,CAAC,IAAI7F,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;oBACzE,IAAIyN,MAAM,IAAIA,MAAM,CAACjB,aAAa,EAAE;sBACnC/Q,OAAO,CAACc,GAAG,CAAC,qCAAqC,CAAC;sBAClD,IAAI;wBACHkR,MAAM,CAACjB,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;wBACzFhR,OAAO,CAACc,GAAG,CAAC,2BAA2B,CAAC;sBACzC,CAAC,CAAC,OAAOiF,CAAC,EAAE;wBACX/F,OAAO,CAACc,GAAG,CAAC,8BAA8B,EAAEiF,CAAC,CAAC;sBAC/C;oBACD,CAAC,MAAM;sBACN/F,OAAO,CAACc,GAAG,CAAC,0CAA0C,CAAC;oBACxD;kBACD;gBACD;cACD;YACD,CAAC,MAAM;cACN,IAAIoD,OAAO,KAAK,OAAO,EAAE;gBACxB9E,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;cAC/B;cAEA,IAAIM,OAAO,KAAK,QAAQ,EAAE;gBACzBlE,OAAO,CAACc,GAAG,CAAC,sCAAsC,CAAC;gBACnDd,OAAO,CAACc,GAAG,CAAC,kBAAkB,EAAE+K,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;;gBAE/C;gBACA,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAC3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7C/Q,OAAO,CAACc,GAAG,CAAC,sCAAsC,CAAC;kBACnDgQ,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;kBAC9FhR,OAAO,CAACc,GAAG,CAAC,sCAAsC,CAAC;gBACpD,CAAC,MAAM;kBACNd,OAAO,CAACc,GAAG,CAAC,8CAA8C,CAAC;gBAC5D;cACD;YACD;UACD,CAAC,MAAM;YACN0B,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;YACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;YACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;YACjC,IAAIuB,OAAO,KAAK,QAAQ,EAAE;cACzB;cACAlE,OAAO,CAACc,GAAG,CAAC,kCAAkC,CAAC;cAC/C,MAAM8P,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;cAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;cAE3D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;gBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBAChGhR,OAAO,CAACc,GAAG,CAAC,mCAAmC,CAAC;cACjD;cACA,IAAIgQ,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;gBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBAC/FhR,OAAO,CAACc,GAAG,CAAC,kCAAkC,CAAC;cAChD;YACD;YAEA,IAAIoD,OAAO,KAAK,OAAO,EAAE;cACxB9E,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;cAChChE,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;YAChC;UACD;QACD,CAAC,CAAC;QAEFoO,UAAU,CAACzI,EAAE,CAAC,OAAO,EAAE,UAAUhD,CAAC,EAAE;UACnC,MAAMvD,QAAQ,GAAGgP,UAAU,CAAC,CAAC,CAAC,CAAChP,QAAQ;UACvC,MAAM0M,cAAc,GAAGrN,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAACpE,WAAW,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;UAE1F,IAAItH,QAAQ,CAAC,CAAC,CAAC,CAAC+N,SAAS,KAAK,MAAM,EAAE;YACrC/N,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;YACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;YACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;YACjC,IAAIuM,cAAc,IAAIpM,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;cAC5C,IAAIxI,OAAO,KAAK,QAAQ,EAAE;gBACzB;gBACAlE,OAAO,CAACc,GAAG,CAAC,sDAAsD,CAAC;gBACnE,MAAM8P,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAE3D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,+CAA+C,EAAE,GAAG,CAAC;kBAC5FhR,OAAO,CAACc,GAAG,CAAC,oCAAoC,CAAC;gBAClD;gBACA,IAAIgQ,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,+CAA+C,EAAE,GAAG,CAAC;kBAC3FhR,OAAO,CAACc,GAAG,CAAC,mCAAmC,CAAC;gBACjD;cACD;cAEA,IAAIoD,OAAO,KAAK,OAAO,EAAE;gBACxB9E,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAAC8K,KAAK,GAAG,KAAK;gBACtCjQ,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAAC8K,KAAK,GAAG,KAAK;cACtC;YACD,CAAC,MAAM;cACN,IAAInL,OAAO,KAAK,QAAQ,EAAE;gBACzB;gBACAlE,OAAO,CAACc,GAAG,CAAC,8BAA8B,CAAC;gBAC3C,MAAMgQ,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAC3D,MAAMqM,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAE7D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,+CAA+C,EAAE,GAAG,CAAC;kBAC3FhR,OAAO,CAACc,GAAG,CAAC,mCAAmC,CAAC;gBACjD;gBACA,IAAI8P,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,+CAA+C,EAAE,GAAG,CAAC;kBAC5FhR,OAAO,CAACc,GAAG,CAAC,oCAAoC,CAAC;gBAClD;cACD,CAAC,MAAM;gBACN1B,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAAC8K,KAAK,GAAG,KAAK;gBACrCjQ,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAAC8K,KAAK,GAAG,KAAK;cACvC;YACD;UACD,CAAC,MAAM;YACN7M,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;YACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;YACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;YACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;YAEjC,IAAIuB,OAAO,KAAK,QAAQ,EAAE;cACzB;cACAlE,OAAO,CAACc,GAAG,CAAC,4BAA4B,CAAC;cACzC,MAAM8P,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;cAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;cAE3D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;gBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,6CAA6C,EAAE,GAAG,CAAC;gBAC1FhR,OAAO,CAACc,GAAG,CAAC,kCAAkC,CAAC;cAChD;cACA,IAAIgQ,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;gBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,6CAA6C,EAAE,GAAG,CAAC;gBACzFhR,OAAO,CAACc,GAAG,CAAC,iCAAiC,CAAC;cAC/C;YACD,CAAC,MAAM;cACN1B,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAAC8K,KAAK,GAAG,IAAI;cACrCjQ,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAAC8K,KAAK,GAAG,IAAI;YACrC;UACD;QACD,CAAC,CAAC;MACH;IACD;;IAEA;IACA,IAAItE,OAAO,CAACJ,kBAAkB,EAAE;MAC/B,IAAIsH,kBAAkB;MACtB,IAAIrQ,SAAS;MACb,IAAIsQ,aAAa,GAAG,IAAI;MACxB,IAAIC,iBAAiB,GAAG,KAAK;MAC7B,IAAIC,kBAAkB,GAAGrH,OAAO,CAACF,oBAAoB,KAAK,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MACrF,IAAIwH,cAAc,GAAG,CAAC,CAAC,CAAC;MACxB,IAAIC,eAAe,GAAG,KAAK;MAC3B,IAAIC,cAAc,GAAG,CAAC,CAAC,CAAC;;MAExB,MAAMvQ,QAAQ,GAAG+I,OAAO,CAACH,mBAAmB,GAAG,IAAI,CAAC,CAAC;;MAErD;MACA,MAAM4H,gBAAgB,GAAItO,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,OAAO,GAAI,EAAE,GAAG,CAAC;;MAE/E;MACA;MACA,IAAIA,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,OAAO,EAAE;QAChD0H,SAAS,CAACjD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC;UACtB,UAAU,EAAE,UAAU;UACtB,SAAS,EAAE;QACZ,CAAC,CAAC;QACFrC,QAAQ,CAAClD,MAAM,CAAC,CAAC,CAACuF,GAAG,CAAC;UACrB,UAAU,EAAE,UAAU;UACtB,SAAS,EAAE;QACZ,CAAC,CAAC;MACH;;MAEA;MACA,MAAMuE,SAAS,GAAG,SAAAA,CAASC,CAAC,EAAE;QAC7B,OAAOA,CAAC,GAAG,GAAG,GAAG,CAAC,GAAGA,CAAC,GAAGA,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAGA,CAAC,IAAIA,CAAC;MAClD,CAAC;;MAED;MACA,MAAMC,kBAAkB,GAAG,SAAAA,CAAA,EAAW;QACrC,MAAMC,SAAS,GAAG/Q,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAACpE,WAAW,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;QACrF,MAAM+I,aAAa,GAAG/I,WAAW,KAAK,UAAU,GAAGhH,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAGpK,SAAS,CAAC4J,KAAK,CAAC,CAAC;QACzF,OAAOmG,aAAa,GAAG,CAAC,GAAGrM,IAAI,CAACkI,GAAG,CAAC,CAAC,EAAElI,IAAI,CAACiI,GAAG,CAAC,CAAC,EAAEmE,SAAS,GAAGC,aAAa,CAAC,CAAC,GAAG,GAAG;MACrF,CAAC;MAID,MAAMC,OAAO,GAAG,SAAAA,CAASlQ,WAAW,EAAE;QACrC,IAAI,CAAChB,SAAS,EAAEA,SAAS,GAAGgB,WAAW;;QAEvC;QACA,IAAI4P,gBAAgB,GAAG,CAAC,IAAK5P,WAAW,GAAG2P,cAAc,GAAIC,gBAAgB,EAAE;UAC9E;UACA,IAAIN,aAAa,IAAI,CAACI,eAAe,IAAI,CAACH,iBAAiB,EAAE;YAC5DF,kBAAkB,GAAGlL,qBAAqB,CAAC+L,OAAO,CAAC;UACpD;UACA;QACD;QACAP,cAAc,GAAG3P,WAAW;QAE5B,MAAMmQ,OAAO,GAAGnQ,WAAW,GAAGhB,SAAS;QACvC,IAAIoR,QAAQ,GAAID,OAAO,GAAG/Q,QAAQ,GAAIqQ,cAAc;;QAEpD;QACA,IAAItH,OAAO,CAACF,oBAAoB,KAAK,eAAe,EAAE;UACrD,IAAImI,QAAQ,IAAI,CAAC,EAAE;YAClB;YACApR,SAAS,GAAGgB,WAAW;YACvBoQ,QAAQ,GAAG,CAAC;YACZX,cAAc,GAAG,CAAC;UACnB;UACA,MAAMY,aAAa,GAAGR,SAAS,CAACO,QAAQ,CAAC;UACzC5E,YAAY,CAAC/B,UAAU,CAAC4G,aAAa,CAAC,CAAC;QACxC,CAAC,MACI,IAAIlI,OAAO,CAACF,oBAAoB,KAAK,eAAe,EAAE;UAC1D,IAAImI,QAAQ,IAAI,CAAC,EAAE;YAClB;YACApR,SAAS,GAAGgB,WAAW;YACvBoQ,QAAQ,GAAG,CAAC;YACZX,cAAc,GAAG,CAAC;UACnB;UACA,MAAMY,aAAa,GAAGR,SAAS,CAACO,QAAQ,CAAC;UACzC5E,YAAY,CAAC/B,UAAU,CAAC,CAAC,GAAG4G,aAAa,CAAC,CAAC;QAC5C,CAAC,MACI;UAAE;UACN,IAAID,QAAQ,IAAI,CAAC,EAAE;YAClB;YACAZ,kBAAkB,IAAI,CAAC,CAAC;YACxBxQ,SAAS,GAAGgB,WAAW;YACvBoQ,QAAQ,GAAG,CAAC;YACZX,cAAc,GAAG,CAAC;UACnB;UACA,MAAMY,aAAa,GAAGR,SAAS,CAACO,QAAQ,CAAC;UACzC,MAAM3E,QAAQ,GAAG+D,kBAAkB,KAAK,CAAC,GAAGa,aAAa,GAAI,CAAC,GAAGA,aAAc;UAC/E7E,YAAY,CAAC/B,UAAU,CAACgC,QAAQ,CAAC,CAAC;;UAElC;UACA,IAAInK,OAAO,KAAK,QAAQ,EAAE;YACzB,MAAMsM,iBAAiB,GAAGzF,OAAO,CAACjB,WAAW,KAAK,UAAU,GAAGhH,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,CAAC,GAAGpK,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,CAAC;YAC7G,MAAMwC,cAAc,GAAGnE,OAAO,CAACjB,WAAW,KAAK,UAAU,GACtDjI,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAClCrM,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAEtC,MAAMuC,cAAc,GAAG7E,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAACjE,QAAQ,CAAC,QAAQ,CAAC;YACzD,MAAMoQ,aAAa,GAAG7E,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAACjE,QAAQ,CAAC,OAAO,CAAC;YAEtD,IAAI4O,cAAc,GAAGsB,iBAAiB,EAAE;cACvC;cACA,IAAI;gBACH,MAAMG,YAAY,GAAGvR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7C,IAAIoM,YAAY,IAAIA,YAAY,CAACtL,CAAC,IAAIsL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,EAAE;kBACzD,MAAMwF,UAAU,GAAG,IAAIC,GAAG,CAACwL,YAAY,CAACtL,CAAC,CAAC3F,GAAG,CAAC;kBAC9C,MAAM;oBAAE4F,KAAK;oBAAEC;kBAAI,CAAC,GAAGG,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;;kBAE5E;kBACA,IAAI9D,OAAO;kBACX,IAAIwD,GAAG,EAAE;oBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;kBAC1B,CAAC,MAAM,IAAI,OAAOoL,YAAY,CAAC7K,WAAW,KAAK,UAAU,EAAE;oBAC1D,IAAI;sBACH/D,OAAO,GAAG4O,YAAY,CAAC7K,WAAW,CAAC,CAAC;oBACrC,CAAC,CAAC,OAAOC,CAAC,EAAE;sBACXhE,OAAO,GAAG,IAAI;oBACf;kBACD;;kBAEA;kBACA,IAAIuD,KAAK,IAAIvD,OAAO,IAAI,OAAO4O,YAAY,CAACpK,cAAc,KAAK,UAAU,IAAI,OAAOoK,YAAY,CAAC1K,MAAM,KAAK,UAAU,EAAE;oBACvH,IAAI;sBACH,IAAIO,IAAI,CAACC,KAAK,CAACkK,YAAY,CAACpK,cAAc,CAAC,CAAC,CAAC,IAAIxE,OAAO,EAAE;wBACzD4O,YAAY,CAAC1K,MAAM,CAACX,KAAK,CAAC;sBAC3B;oBACD,CAAC,CAAC,OAAOS,CAAC,EAAE;sBACX/F,OAAO,CAACc,GAAG,CAAC,sBAAsB,EAAEiF,CAAC,CAAC;oBACvC;kBACD;gBACD;cACD,CAAC,CAAC,OAAOtF,KAAK,EAAE;gBACfT,OAAO,CAACc,GAAG,CAAC,gCAAgC,EAAEL,KAAK,CAAC;cACrD;;cAEA;cACA,IAAIgQ,cAAc,IAAIC,aAAa,EAAE;gBACpC;gBACA,MAAME,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAE3D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;gBAChG;gBACA,IAAIF,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBAChG;cACD,CAAC,MAAM;gBACN,IAAIP,cAAc,EAAE;kBACnB;kBACA,MAAMK,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;kBAC3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;oBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;kBAC/F;gBACD,CAAC,MAAM;kBACN;kBACA,MAAMJ,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;kBAC7D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;oBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;kBACjG;gBACD;cACD;YACD,CAAC,MAAM;cACN;cACA,IAAI;gBACH,MAAMC,WAAW,GAAG7R,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAC3C,MAAMoM,YAAY,GAAGvR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAE7C,IAAI0M,WAAW,IAAIA,WAAW,CAAC5L,CAAC,IAAI4L,WAAW,CAAC5L,CAAC,CAAC3F,GAAG,EAAE;kBACtD,MAAMwF,UAAU,GAAG,IAAIC,GAAG,CAAC8L,WAAW,CAAC5L,CAAC,CAAC3F,GAAG,CAAC;kBAC7C,MAAM;oBAAE4F,KAAK;oBAAEC;kBAAI,CAAC,GAAGG,MAAM,CAACC,WAAW,CAACT,UAAU,CAACU,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;;kBAE5E;kBACA,IAAI9D,OAAO;kBACX,IAAIwD,GAAG,EAAE;oBACRxD,OAAO,GAAGF,UAAU,CAAC0D,GAAG,CAAC;kBAC1B,CAAC,MAAM,IAAI,OAAO0L,WAAW,CAACnL,WAAW,KAAK,UAAU,EAAE;oBACzD,IAAI;sBACH/D,OAAO,GAAGkP,WAAW,CAACnL,WAAW,CAAC,CAAC;oBACpC,CAAC,CAAC,OAAOC,CAAC,EAAE;sBACXhE,OAAO,GAAG,IAAI;oBACf;kBACD;;kBAEA;kBACA,IAAIuD,KAAK,IAAIvD,OAAO,IAAI,OAAOkP,WAAW,CAAC1K,cAAc,KAAK,UAAU,IAAI,OAAO0K,WAAW,CAAChL,MAAM,KAAK,UAAU,EAAE;oBACrH,IAAI;sBACH,IAAIO,IAAI,CAACC,KAAK,CAACwK,WAAW,CAAC1K,cAAc,CAAC,CAAC,CAAC,IAAIxE,OAAO,EAAE;wBACxDkP,WAAW,CAAChL,MAAM,CAACX,KAAK,CAAC;sBAC1B;oBACD,CAAC,CAAC,OAAOS,CAAC,EAAE;sBACX/F,OAAO,CAACc,GAAG,CAAC,sBAAsB,EAAEiF,CAAC,CAAC;oBACvC;kBACD;gBACD;cACD,CAAC,CAAC,OAAOtF,KAAK,EAAE;gBACfT,OAAO,CAACc,GAAG,CAAC,gCAAgC,EAAEL,KAAK,CAAC;cACrD;;cAEA;cACA,IAAIgQ,cAAc,IAAIC,aAAa,EAAE;gBACpC;gBACA,MAAME,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;gBAC7D,MAAMuM,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;gBAE3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;kBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;gBAC/F;gBACA,IAAIJ,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;kBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;gBACjG;cACD,CAAC,MAAM;gBACN,IAAIN,aAAa,EAAE;kBAClB;kBACA,MAAME,YAAY,GAAGpR,QAAQ,CAACqR,cAAc,CAACjF,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC;kBAC7D,IAAIqM,YAAY,IAAIA,YAAY,CAACG,aAAa,EAAE;oBAC/CH,YAAY,CAACG,aAAa,CAACC,WAAW,CAAC,kDAAkD,EAAE,GAAG,CAAC;kBAChG;gBACD,CAAC,MAAM;kBACN;kBACA,MAAMF,WAAW,GAAGtR,QAAQ,CAACqR,cAAc,CAAChF,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC;kBAC3D,IAAIuM,WAAW,IAAIA,WAAW,CAACC,aAAa,EAAE;oBAC7CD,WAAW,CAACC,aAAa,CAACC,WAAW,CAAC,mDAAmD,EAAE,GAAG,CAAC;kBAChG;gBACD;cACD;YACD;UACD;;UAEA;UACA,IAAI9M,OAAO,KAAK,OAAO,EAAE;YACxB,MAAMsM,iBAAiB,GAAGzF,OAAO,CAACjB,WAAW,KAAK,UAAU,GAAGhH,SAAS,CAACoK,MAAM,CAAC,CAAC,GAAG,CAAC,GAAGpK,SAAS,CAAC4J,KAAK,CAAC,CAAC,GAAG,CAAC;YAC7G,MAAMwC,cAAc,GAAGnE,OAAO,CAACjB,WAAW,KAAK,UAAU,GACtDjI,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAClCrM,UAAU,CAACmK,MAAM,CAACkC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAEtC,MAAMuC,cAAc,GAAG7E,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAACjE,QAAQ,CAAC,QAAQ,CAAC;YACzD,MAAMoQ,aAAa,GAAG7E,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAACjE,QAAQ,CAAC,OAAO,CAAC;YAEtD,IAAI4O,cAAc,GAAGsB,iBAAiB,EAAE;cACvC,IAAIC,cAAc,IAAIC,aAAa,EAAE;gBACpCtR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC/BxE,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;cAChC,CAAC,MAAM;gBACN,IAAIqN,cAAc,EAAE;kBACnBrR,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC/B,CAAC,MAAM;kBACNxE,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;gBACjC;cACD;YACD,CAAC,MAAM;cACN,IAAIqN,cAAc,IAAIC,aAAa,EAAE;gBACpCtR,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAC9BxE,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;cACjC,CAAC,MAAM;gBACN,IAAIsN,aAAa,EAAE;kBAClBtR,OAAO,CAACwM,SAAS,CAAC,CAAC,CAAC,CAACrH,EAAE,CAAC,CAACX,IAAI,CAAC,CAAC;gBAChC,CAAC,MAAM;kBACNxE,OAAO,CAACyM,QAAQ,CAAC,CAAC,CAAC,CAACtH,EAAE,CAAC,CAACnB,KAAK,CAAC,CAAC;gBAChC;cACD;YACD;UACD;QACD;;QAEA;QACA6L,qBAAqB,CAAC,CAAC;;QAEvB;QACA,IAAIiD,aAAa,IAAI,CAACI,eAAe,IAAI,CAACH,iBAAiB,EAAE;UAC5DF,kBAAkB,GAAGlL,qBAAqB,CAAC+L,OAAO,CAAC;QACpD;MACD,CAAC;MAED,MAAMI,cAAc,GAAG,SAAAA,CAAA,EAAW;QACjC,IAAI,CAAChB,aAAa,IAAII,eAAe,EAAE;QAEvC,IAAID,cAAc,KAAK,CAAC,EAAE;UACzBzQ,SAAS,GAAG,IAAI,CAAC,CAAC;QACnB;QACAqQ,kBAAkB,GAAGlL,qBAAqB,CAAC+L,OAAO,CAAC;MACpD,CAAC;MAED,MAAMK,aAAa,GAAG,SAAAA,CAAA,EAAW;QAChC,IAAIlB,kBAAkB,EAAE;UACvBtL,oBAAoB,CAACsL,kBAAkB,CAAC;QACzC;MACD,CAAC;MAED,MAAMmB,cAAc,GAAG,SAAAA,CAAA,EAAW;QACjCd,eAAe,GAAG,IAAI;;QAEtB;QACA,IAAI1Q,SAAS,EAAE;UACd,MAAMgB,WAAW,GAAGyQ,WAAW,CAACC,GAAG,CAAC,CAAC;UACrC,MAAMP,OAAO,GAAGnQ,WAAW,GAAGhB,SAAS;UACvC,MAAM2R,eAAe,GAAIR,OAAO,GAAG/Q,QAAQ,GAAIqQ,cAAc;;UAE7D;UACAA,cAAc,GAAGkB,eAAe,GAAG,CAAC,CAAC,CAAC;QACvC;QAEAJ,aAAa,CAAC,CAAC;MAChB,CAAC;MAED,MAAMK,eAAe,GAAG,SAAAA,CAAA,EAAW;QAClClB,eAAe,GAAG,KAAK;QACvBJ,aAAa,GAAG,IAAI;QACpBtQ,SAAS,GAAG,IAAI,CAAC,CAAC;QAClBsR,cAAc,CAAC,CAAC;MACjB,CAAC;;MAED;MACA,IAAInI,OAAO,CAACD,yBAAyB,EAAE;QACtChI,SAAS,CAACiG,EAAE,CAAC,YAAY,EAAEqK,cAAc,CAAC;QAC1CtQ,SAAS,CAACiG,EAAE,CAAC,YAAY,EAAE,YAAW;UACrC;UACA;UACAoJ,iBAAiB,GAAG,KAAK;UACzBqB,eAAe,CAAC,CAAC;QAClB,CAAC,CAAC;;QAEF;QACA;QACApC,UAAU,CAACrI,EAAE,CAAC,WAAW,EAAE,YAAW;UACrCoJ,iBAAiB,GAAG,IAAI;UACxBiB,cAAc,CAAC,CAAC;QACjB,CAAC,CAAC;;QAEF;QACAhC,UAAU,CAACrI,EAAE,CAAC,MAAM,EAAE,YAAW;UAChC,IAAIoJ,iBAAiB,EAAE;YACtB;YACA,MAAMsB,eAAe,GAAGd,kBAAkB,CAAC,CAAC;;YAE5C;YACA,IAAI5H,OAAO,CAACF,oBAAoB,KAAK,eAAe,EAAE;cACrDwH,cAAc,GAAGoB,eAAe;YACjC,CAAC,MACI,IAAI1I,OAAO,CAACF,oBAAoB,KAAK,eAAe,EAAE;cAC1DwH,cAAc,GAAG,CAAC,GAAGoB,eAAe;YACrC,CAAC,MACI;cAAE;cACN;cACA,IAAIA,eAAe,IAAI,GAAG,EAAE;gBAC3BrB,kBAAkB,GAAG,CAAC;gBACtBC,cAAc,GAAGoB,eAAe;cACjC,CAAC,MAAM;gBACNrB,kBAAkB,GAAG,CAAC,CAAC;gBACvBC,cAAc,GAAG,CAAC,GAAGoB,eAAe;cACrC;YACD;UACD;QACD,CAAC,CAAC;;QAEF;QACA;QACArC,UAAU,CAACrI,EAAE,CAAC,UAAU,EAAE,YAAW;UACpC;UACA9E,UAAU,CAAC,YAAW;YACrBkO,iBAAiB,GAAG,KAAK;YACzBqB,eAAe,CAAC,CAAC;UAClB,CAAC,EAAE,GAAG,CAAC;QACR,CAAC,CAAC;;QAEF;QACApC,UAAU,CAACrI,EAAE,CAAC,aAAa,EAAE,YAAW;UACvC9E,UAAU,CAAC,YAAW;YACrBkO,iBAAiB,GAAG,KAAK;YACzBqB,eAAe,CAAC,CAAC;UAClB,CAAC,EAAE,GAAG,CAAC;QACR,CAAC,CAAC;MACH;;MAEA;MACApF,YAAY,CAAC/B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAC/B4C,qBAAqB,CAAC,CAAC,CAAC,CAAC;;MAEzB;MACA,MAAM9K,SAAS,GAAGrB,SAAS,CAAC6F,MAAM,CAAC,CAAC,CAACS,IAAI,CAAC,mBAAmB,CAAC;MAC9D,IAAIjF,SAAS,CAAC6D,MAAM,GAAG,CAAC,IAAI7D,SAAS,CAAC,CAAC,CAAC,CAAC3B,QAAQ,EAAE;QAClD,MAAMA,QAAQ,GAAG2B,SAAS,CAAC,CAAC,CAAC,CAAC3B,QAAQ;QACtC;QACAA,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,MAAM,CAAC;QACpCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,QAAQ,CAAC;QACnCH,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC;QACtCF,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,CAACE,GAAG,CAAC,MAAM,CAAC;;QAEjC;QACAwB,SAAS,CAACuP,GAAG,CAAC,OAAO,CAAC,CAAC3K,EAAE,CAAC,OAAO,EAAE,UAAShD,CAAC,EAAE;UAC9CA,CAAC,CAACiK,cAAc,CAAC,CAAC;UAClBjK,CAAC,CAAC4N,eAAe,CAAC,CAAC;UACnB;UACA,OAAO,KAAK;QACb,CAAC,CAAC;MACH;;MAEA;MACA1P,UAAU,CAACiP,cAAc,EAAE,GAAG,CAAC;IAChC;IAEAnT,MAAM,CAACkI,MAAM,CAAClI,MAAM,CAAC,CAAC6T,OAAO,CAAC,2BAA2B,CAAC;EAC3D,CAAC,CAAC;AACH,CAAC;;AAED;AACApU,QAAQ,CAACqD,gBAAgB,CAAC,mBAAmB,EAAE,UAASmC,KAAK,EAAE;EAC9D,MAAMgN,MAAM,GAAGhN,KAAK,CAAC6O,MAAM,CAAC7B,MAAM;EAClC,MAAMlP,SAAS,GAAGkC,KAAK,CAAC6O,MAAM,CAAC/Q,SAAS;EAExC,IAAIA,SAAS,IAAIkP,MAAM,IAAIA,MAAM,CAACtS,GAAG,IAAIsS,MAAM,CAACtS,GAAG,CAACY,QAAQ,CAAC,aAAa,CAAC,EAAE;IAC5E;IACA,MAAMwT,eAAe,GAAGhR,SAAS,CAACE,OAAO,CAAC,+BAA+B,CAAC,IACnEF,SAAS,CAACE,OAAO,CAAC,qBAAqB,CAAC,IACxCF,SAAS,CAACE,OAAO,CAAC,uBAAuB,CAAC;IAEjD,IAAI8Q,eAAe,EAAE;MACpB;MACA7P,UAAU,CAAC,MAAM;QAChB;QACA,IAAI+N,MAAM,CAACzN,EAAE,IAAI,CAACnF,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,IAAI,OAAOR,EAAE,KAAK,WAAW,IAAIA,EAAE,CAACC,MAAM,EAAE;UAC/E,IAAI;YACH5E,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,GAAG,IAAIR,EAAE,CAACC,MAAM,CAACgO,MAAM,CAACzN,EAAE,EAAE;cAC7CO,MAAM,EAAE;gBACPC,OAAO,EAAE,SAAAA,CAASC,KAAK,EAAE;kBACxBhF,OAAO,CAACc,GAAG,CAAC,2BAA2B,EAAEkR,MAAM,CAACzN,EAAE,CAAC;gBACpD,CAAC;gBACDwP,OAAO,EAAE,SAAAA,CAAS/O,KAAK,EAAE;kBACxBhF,OAAO,CAACS,KAAK,CAAC,2BAA2B,EAAEuR,MAAM,CAACzN,EAAE,EAAES,KAAK,CAAC;gBAC7D;cACD;YACD,CAAC,CAAC;UACH,CAAC,CAAC,OAAOvE,KAAK,EAAE;YACfT,OAAO,CAACS,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;UACvD;QACD;MACD,CAAC,EAAE,GAAG,CAAC;IACR;EACD;AACD,CAAC,CAAC;;AAEF;AACA,IAAIjB,QAAQ,CAACwU,UAAU,KAAK,SAAS,EAAE;EACtCxU,QAAQ,CAACqD,gBAAgB,CAAC,kBAAkB,EAAErB,qBAAqB,CAAC;AACrE,CAAC,MAAM;EACNA,qBAAqB,CAAC,CAAC;AACxB;;AAEA;AACA,SAASyS,0BAA0BA,CAACnR,SAAS,EAAE;EAC9C,MAAMoR,OAAO,GAAGpR,SAAS,CAACrB,gBAAgB,CAAC,YAAY,CAAC;EACxD,MAAM4B,MAAM,GAAGP,SAAS,CAACrB,gBAAgB,CAAC,WAAW,CAAC;;EAEtD;EACAyS,OAAO,CAACxS,OAAO,CAACsQ,MAAM,IAAI;IACzB,IAAIA,MAAM,CAACzN,EAAE,IAAInF,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,EAAE;MACpC,IAAI;QACH;QACA,IAAI,OAAOnF,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,CAAC4P,OAAO,KAAK,UAAU,EAAE;UACrD/U,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,CAAC4P,OAAO,CAAC,CAAC;QAC7B;MACD,CAAC,CAAC,OAAOpO,CAAC,EAAE;QACX;MAAA;MAED,OAAO3G,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC;IAC1B;EACD,CAAC,CAAC;;EAEF;EACAlB,MAAM,CAAC3B,OAAO,CAAC6B,KAAK,IAAI;IACvB,IAAIA,KAAK,CAACgB,EAAE,IAAInF,OAAO,CAACmE,KAAK,CAACgB,EAAE,CAAC,EAAE;MAClC,OAAOnF,OAAO,CAACmE,KAAK,CAACgB,EAAE,CAAC;IACzB;EACD,CAAC,CAAC;AACH;;AAEA;AACA,SAAS6P,8BAA8BA,CAACtR,SAAS,EAAE;EAClD;EACA,MAAMoR,OAAO,GAAGpR,SAAS,CAACrB,gBAAgB,CAAC,6DAA6D,CAAC;EAEzGyS,OAAO,CAACxS,OAAO,CAACsQ,MAAM,IAAI;IACzB,IAAIA,MAAM,CAACtS,GAAG,IAAIsS,MAAM,CAACtS,GAAG,CAACY,QAAQ,CAAC,aAAa,CAAC,IAAI0R,MAAM,CAACzN,EAAE,EAAE;MAClE;MACA,IAAI,CAACnF,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,IAAI,OAAOR,EAAE,KAAK,WAAW,IAAIA,EAAE,CAACC,MAAM,EAAE;QAClE,IAAI;UACH5E,OAAO,CAAC4S,MAAM,CAACzN,EAAE,CAAC,GAAG,IAAIR,EAAE,CAACC,MAAM,CAACgO,MAAM,CAACzN,EAAE,EAAE;YAC7CO,MAAM,EAAE;cACPC,OAAO,EAAE,SAAAA,CAASC,KAAK,EAAE;gBACxBhF,OAAO,CAACc,GAAG,CAAC,2BAA2B,EAAEkR,MAAM,CAACzN,EAAE,CAAC;cACpD,CAAC;cACDwP,OAAO,EAAE,SAAAA,CAAS/O,KAAK,EAAE;gBACxBhF,OAAO,CAACS,KAAK,CAAC,2BAA2B,EAAEuR,MAAM,CAACzN,EAAE,EAAES,KAAK,CAAC;cAC7D;YACD;UACD,CAAC,CAAC;QACH,CAAC,CAAC,OAAOvE,KAAK,EAAE;UACfT,OAAO,CAACS,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;QACvD;MACD;IACD;EACD,CAAC,CAAC;AACH,C","sources":["webpack://@codecanel/before-after-image-slider/./src/common/scripts/jquery.image-compare.js"],"sourcesContent":["// Define image compare function.\nlet players = {}; // Store players in an object\nconst intervalMap = {};\nvar vimeoPlayers = {};\nvar tag = document.createElement(\"script\");\ntag.src = \"https://www.youtube.com/iframe_api\";\nvar firstScriptTag = document.getElementsByTagName(\"script\")[0];\n\nfirstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n// Suppress Firefox YouTube widget API console errors and warnings\n(function() {\n\tif (typeof window !== 'undefined' && window.console) {\n\t\t// Function to check if error should be filtered\n\t\tconst shouldFilter = (args) => {\n\t\t\tconst message = args.join(' ');\n\t\t\tconst hasWidgetError = message.includes('An invalid or illegal string was specified') ||\n\t\t\t\t\t\t\t\t message.includes('www-widgetapi.js') ||\n\t\t\t\t\t\t\t\t (message.includes('DOMException') && message.includes('widgetapi'));\n\t\t\t\n\t\t\t// Also check individual arguments for error objects\n\t\t\tfor (let arg of args) {\n\t\t\t\tif (arg instanceof Error && arg.message && \n\t\t\t\t\targ.message.includes('An invalid or illegal string was specified')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (typeof arg === 'string' && arg.includes('www-widgetapi.js')) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn hasWidgetError;\n\t\t};\n\n\t\t// Filter console.error\n\t\tif (window.console.error) {\n\t\t\tconst originalConsoleError = window.console.error;\n\t\t\twindow.console.error = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleError.apply(console, args);\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Filter console.warn\n\t\tif (window.console.warn) {\n\t\t\tconst originalConsoleWarn = window.console.warn;\n\t\t\twindow.console.warn = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleWarn.apply(console, args);\n\t\t\t};\n\t\t}\n\t\t\n\t\t// Filter console.log (some errors might be logged here)\n\t\tif (window.console.log) {\n\t\t\tconst originalConsoleLog = window.console.log;\n\t\t\twindow.console.log = function(...args) {\n\t\t\t\tif (shouldFilter(args)) return;\n\t\t\t\toriginalConsoleLog.apply(console, args);\n\t\t\t};\n\t\t}\n\n\t\t// Override window.onerror for uncaught exceptions\n\t\tconst originalOnError = window.onerror;\n\t\twindow.onerror = function(message, source, lineno, colno, error) {\n\t\t\tif (message && typeof message === 'string') {\n\t\t\t\tif (message.includes('An invalid or illegal string was specified') ||\n\t\t\t\t\t(source && source.includes('www-widgetapi.js'))) {\n\t\t\t\t\treturn true; // Prevent default error handling\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (originalOnError) {\n\t\t\t\treturn originalOnError.call(this, message, source, lineno, colno, error);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n})();\n\n// Initialize HTML5 video elements with start and end time controls\nconst html5PausedVideos = new Map();\n\nfunction initHTML5VideoPlayers() {\n\tdocument\n\t\t.querySelectorAll(\"video.coca-image-compare-before, video.coca-image-compare-after\")\n\t\t.forEach(function (videoElement) {\n\t\t\tconst startTime = parseFloat(videoElement.dataset.startTime) || 0;\n\t\t\tconst endTime = parseFloat(videoElement.dataset.endTime) || videoElement.duration;\n\t\t\tconst hasLoop = videoElement.hasAttribute(\"loop\");\n\t\t\tconst hasAutoPlay = videoElement.hasAttribute(\"autoplay\");\n\t\t\tconst playPauseContainer =\n\t\t\t\tvideoElement.parentElement.parentElement.parentElement.parentElement.lastElementChild.firstElementChild;\n\n\t\t\tif (hasAutoPlay) {\n\t\t\t\tplayPauseContainer.children[1].classList.remove(\"hidden\");\n\t\t\t\tplayPauseContainer.children[1].classList.add(\"show\");\n\t\t\t\tplayPauseContainer.children[0].classList.remove(\"show\");\n\t\t\t\tplayPauseContainer.children[0].classList.add(\"hidden\");\n\t\t\t}\n\n\t\t\t// Set initial time to start time\n\t\t\tif (startTime > 0) {\n\t\t\t\tvideoElement.currentTime = startTime;\n\t\t\t}\n\n\t\t\t// Add timeupdate event listener to handle end time\n\t\t\tif (endTime > 0) {\n\t\t\t\tvideoElement.addEventListener(\"timeupdate\", function () {\n\t\t\t\t\tif (this.currentTime >= endTime) {\n\t\t\t\t\t\tif (hasLoop) {\n\t\t\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Check if auto slide is enabled - if so, don't change the icon state\n\t\t\t\t\t\t\tconst container = $(this).closest('.coca-image-compare-container');\n\t\t\t\t\t\t\tconst autoSlideEnabled = container.data('auto-slide-enabled') === true || \n\t\t\t\t\t\t\t\t\t\t\t\t\tcontainer.attr('data-auto-slide-enabled') === 'true' ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontainer.attr('data-auto-slide-enabled') === '1';\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Only change to play icon if auto slide is NOT enabled\n\t\t\t\t\t\t\tif (!autoSlideEnabled) {\n\t\t\t\t\t\t\t\tplayPauseContainer.children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\tplayPauseContainer.children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.pause();\n\t\t\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Add play event listener to ensure it starts from start time\n\t\t\tvideoElement.addEventListener(\"play\", function () {\n\t\t\t\tif (this.currentTime < startTime || (endTime > 0 && this.currentTime > endTime)) {\n\t\t\t\t\tthis.currentTime = startTime;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\tconst videos = document.querySelectorAll(\n\t\t\t\t\t\"video.coca-image-compare-before, video.coca-image-compare-after\",\n\t\t\t\t);\n\n\t\t\t\tif (document.hidden) {\n\t\t\t\t\t// Pause and remember current time\n\t\t\t\t\tvideos.forEach((video) => {\n\t\t\t\t\t\tif (!video.paused && !video.ended) {\n\t\t\t\t\t\t\thtml5PausedVideos.set(video, video.currentTime);\n\t\t\t\t\t\t\tvideo.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Resume from stored time\n\t\t\t\t\thtml5PausedVideos.forEach((time, video) => {\n\t\t\t\t\t\tvideo.currentTime = time;\n\t\t\t\t\t\tvideo.play();\n\t\t\t\t\t});\n\t\t\t\t\thtml5PausedVideos.clear();\n\t\t\t\t}\n\t\t\t});\n\t\t });\n}\n\n// function initYouTubePlayers() {\n// \tif (typeof YT === \"undefined\" || typeof YT.Player === \"undefined\") {\n// \t\tsetTimeout(initYouTubePlayers, 100);\n// \t\treturn;\n// \t}\n\n// \t// Initialize players for each video container\n// \tdocument.querySelectorAll(\".coca-video-compare-wrapper\").forEach(function (container) {\n// \t\tconst tagName = container.firstElementChild.firstElementChild.tagName;\n// \t\tconst playPause = container.parentElement.parentElement.lastChild;\n// \t\tconst children = playPause.children;\n\n// \t\tif (tagName !== \"\" && tagName === \"IFRAME\") {\n// \t\t\tconst firstIframe = container.firstElementChild.firstElementChild;\n// \t\t\tconst lastIframe = container.lastElementChild.firstElementChild;\n\n// \t\t\tif (!players[firstIframe.id]) {\n// \t\t\t\tplayers[firstIframe.id] = new YT.Player(firstIframe.id, {\n// \t\t\t\t\tplayerVars: {\n// \t\t\t\t\t\tcontrols: 0,\n// \t\t\t\t\t\trel: 0,\n// \t\t\t\t\t\tfs: 0,\n// \t\t\t\t\t\tmute: 1,\n// \t\t\t\t\t\tenablejsapi: 1,\n// \t\t\t\t\t},\n// \t\t\t\t\tevents: {\n// \t\t\t\t\t\tonReady: (event) => {\n// \t\t\t\t\t\t\tif (intervalMap[firstIframe.id]) {\n// \t\t\t\t\t\t\t\tclearInterval(intervalMap[firstIframe.id]);\n// \t\t\t\t\t\t\t}\n\n// \t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n// \t\t\t\t\t\t\tconst { start, end, autoplay, loop } = Object.fromEntries(\n// \t\t\t\t\t\t\t\tyoutubeUrl.searchParams.entries(),\n// \t\t\t\t\t\t\t);\n\n// \t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n// \t\t\t\t\t\t\tconst endTime = parseFloat(end || event.target.getDuration());\n\n// \t\t\t\t\t\t\tif (autoplay) {\n// \t\t\t\t\t\t\t\tif (!isNaN(startTime)) {\n// \t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"show\");\n// \t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"hidden\");\n\n// \t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t}\n\n// \t\t\t\t\t\t\t// Setup loop interval\n// \t\t\t\t\t\t\tconst intervalId = setInterval(() => {\n// \t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n// \t\t\t\t\t\t\t\tif (loop) {\n// \t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n// \t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t} else {\n// \t\t\t\t\t\t\t\t\tif (currentTime > endTime) {\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t}, 500);\n\n// \t\t\t\t\t\t\t// Store the interval ID to clean later\n// \t\t\t\t\t\t\tintervalMap[firstIframe.id] = intervalId;\n// \t\t\t\t\t\t},\n// \t\t\t\t\t},\n// \t\t\t\t});\n// \t\t\t}\n\n// \t\t\tif (!players[lastIframe.id]) {\n// \t\t\t\tplayers[lastIframe.id] = new YT.Player(lastIframe.id, {\n// \t\t\t\t\tplayerVars: {\n// \t\t\t\t\t\tcontrols: 0,\n// \t\t\t\t\t\trel: 0,\n// \t\t\t\t\t\tfs: 0,\n// \t\t\t\t\t\tmute: 1,\n// \t\t\t\t\t\tenablejsapi: 1,\n// \t\t\t\t\t},\n// \t\t\t\t\tevents: {\n// \t\t\t\t\t\tonReady: (event) => {\n// \t\t\t\t\t\t\tif (intervalMap[lastIframe.id]) {\n// \t\t\t\t\t\t\t\tclearInterval(intervalMap[lastIframe.id]);\n// \t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n// \t\t\t\t\t\t\tconst { start, end, loop } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n// \t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n// \t\t\t\t\t\t\tconst endTime = parseFloat(end || event.target.getDuration());\n\n// \t\t\t\t\t\t\t// Setup loop interval\n// \t\t\t\t\t\t\tconst intervalId = setInterval(() => {\n// \t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n// \t\t\t\t\t\t\t\tif (loop) {\n// \t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n// \t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n// \t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t} else {\n// \t\t\t\t\t\t\t\t\tif (currentTime > endTime) {\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n// \t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n// \t\t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t\t}\n// \t\t\t\t\t\t\t}, 500);\n\n// \t\t\t\t\t\t\t// Store the interval ID to clean later\n// \t\t\t\t\t\t\tintervalMap[lastIframe.id] = intervalId;\n// \t\t\t\t\t\t},\n// \t\t\t\t\t},\n// \t\t\t\t});\n// \t\t\t}\n// \t\t}\n// \t});\n// }\n\nfunction initYouTubePlayers() {\n\tif (typeof YT === \"undefined\" || typeof YT.Player === \"undefined\") {\n\t\tsetTimeout(initYouTubePlayers, 100);\n\t\treturn;\n\t}\n\n\t// Initialize players for each video container\n\tdocument.querySelectorAll(\".coca-video-compare-wrapper\").forEach(function (container) {\n\t\tconst tagName =\n\t\t\tcontainer?.firstElementChild?.firstElementChild?.tagName ||\n\t\t\tcontainer?.lastElementChild?.firstElementChild?.tagName;\n\t\tconst playPause = container.parentElement.parentElement.lastChild;\n\t\tconst children = playPause.children;\n\n\t\tif (tagName !== \"\" && tagName === \"IFRAME\") {\n\t\t\tconst firstIframe = container.firstElementChild.firstElementChild;\n\t\t\tconst lastIframe = container.lastElementChild.firstElementChild;\n\n\t\t\tif (firstIframe?.id && !players[firstIframe?.id]) {\n\t\t\t\tplayers[firstIframe.id] = new YT.Player(firstIframe.id, {\n\t\t\t\t\tplayerVars: {\n\t\t\t\t\t\tcontrols: 0,\n\t\t\t\t\t\trel: 0,\n\t\t\t\t\t\tfs: 0,\n\t\t\t\t\t\tmute: 1,\n\t\t\t\t\t\tenablejsapi: 1,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tonReady: (event) => {\n\t\t\t\t\t\t\t// Clean up any existing intervals/animation frames\n\t\t\t\t\t\t\tif (intervalMap[firstIframe.id]) {\n\t\t\t\t\t\t\t\t// Could be either setInterval or requestAnimationFrame\n\t\t\t\t\t\t\t\tif (typeof intervalMap[firstIframe.id] === \"function\") {\n\t\t\t\t\t\t\t\t\tintervalMap[firstIframe.id]();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclearInterval(intervalMap[firstIframe.id]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n\t\t\t\t\t\t\tconst { start, end, autoplay, loop } = Object.fromEntries(\n\t\t\t\t\t\t\t\tyoutubeUrl.searchParams.entries(),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n\t\t\t\t\t\t\t// Safe getDuration call with fallback\n\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t} else if (typeof event.target.getDuration === 'function') {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tendTime = event.target.getDuration();\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (autoplay && autoplay !== \"0\") {\n\t\t\t\t\t\t\t\tif (!isNaN(startTime)) {\n\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"show\");\n\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"show\");\n\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"hidden\");\n\n\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Setup requestAnimationFrame loop for smoother performance\n\t\t\t\t\t\t\tlet rafId;\n\t\t\t\t\t\t\tlet lastCheckTime = 0;\n\n\t\t\t\t\t\t\t// Check video only every 200ms to reduce CPU usage\n\t\t\t\t\t\t\tconst checkVideoTime = (timestamp) => {\n\t\t\t\t\t\t\t\t// Throttle checks to reduce CPU usage (check every 200ms)\n\t\t\t\t\t\t\t\tif (timestamp - lastCheckTime >= 200) {\n\t\t\t\t\t\t\t\t\tlastCheckTime = timestamp;\n\t\t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n\n\t\t\t\t\t\t\t\t\tif (loop && loop !== \"0\") {\n\t\t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (Math.ceil(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue the loop only if player is playing (state 1)\n\t\t\t\t\t\t\t\tif (event.target.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Start the animation frame loop\n\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\n\t\t\t\t\t\t\t// Handle state changes to manage rAF loop\n\t\t\t\t\t\t\tevent.target.addEventListener(\"onStateChange\", (stateEvent) => {\n\t\t\t\t\t\t\t\tif (stateEvent.data === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t// Resume animation frame loop when video plays\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.PAUSED ||\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.ENDED\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Stop animation frame loop when video is paused or ended\n\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst pausedPlayers = {}; // Track paused players and their current times\n\n\t\t\t\t\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\t\t\t\t\tif (document.hidden) {\n\t\t\t\t\t\t\t\t\t// Tab is hidden — pause all playing videos\n\t\t\t\t\t\t\t\t\tObject.entries(players).forEach(([id, player]) => {\n\t\t\t\t\t\t\t\t\t\tconsole.dir(typeof player.getPlayerState);\n\t\t\t\t\t\t\t\t\t\tif (player && typeof player.getPlayerState === \"function\") {\n\t\t\t\t\t\t\t\t\t\t\tif (player.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst time = player.getCurrentTime();\n\t\t\t\t\t\t\t\t\t\t\t\tpausedPlayers[id] = time;\n\t\t\t\t\t\t\t\t\t\t\t\tplayer.pauseVideo();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Tab is visible again — resume paused videos\n\t\t\t\t\t\t\t\t\tObject.entries(pausedPlayers).forEach(([id, time]) => {\n\t\t\t\t\t\t\t\t\t\tconst player = players[id];\n\t\t\t\t\t\t\t\t\t\tif (player && typeof time === \"number\") {\n\t\t\t\t\t\t\t\t\t\t\tplayer.seekTo(time, true);\n\t\t\t\t\t\t\t\t\t\t\tplayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Clear memory\n\t\t\t\t\t\t\t\t\tObject.keys(pausedPlayers).forEach((key) => delete pausedPlayers[key]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Store the cancelAnimationFrame function for cleanup\n\t\t\t\t\t\t\tintervalMap[firstIframe.id] = () => cancelAnimationFrame(rafId);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (lastIframe?.id && !players[lastIframe?.id]) {\n\t\t\t\tplayers[lastIframe.id] = new YT.Player(lastIframe.id, {\n\t\t\t\t\tplayerVars: {\n\t\t\t\t\t\tcontrols: 0,\n\t\t\t\t\t\trel: 0,\n\t\t\t\t\t\tfs: 0,\n\t\t\t\t\t\tmute: 1,\n\t\t\t\t\t\tenablejsapi: 1,\n\t\t\t\t\t},\n\t\t\t\t\tevents: {\n\t\t\t\t\t\tonReady: (event) => {\n\t\t\t\t\t\t\tif (intervalMap[lastIframe.id]) {\n\t\t\t\t\t\t\t\t// Could be either setInterval or requestAnimationFrame\n\t\t\t\t\t\t\t\tif (typeof intervalMap[lastIframe.id] === \"function\") {\n\t\t\t\t\t\t\t\t\tintervalMap[lastIframe.id]();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tclearInterval(intervalMap[lastIframe.id]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst youtubeUrl = new URL(event.target.g.src);\n\t\t\t\t\t\t\tconst { start, end, loop } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\tconst startTime = parseFloat(start || 0);\n\t\t\t\t\t\t\t// Safe getDuration call with fallback\n\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t} else if (typeof event.target.getDuration === 'function') {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tendTime = event.target.getDuration();\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Setup requestAnimationFrame loop for smoother performance\n\t\t\t\t\t\t\tlet rafId;\n\t\t\t\t\t\t\tlet lastCheckTime = 0;\n\n\t\t\t\t\t\t\t// Check video only every 200ms to reduce CPU usage\n\t\t\t\t\t\t\tconst checkVideoTime = (timestamp) => {\n\t\t\t\t\t\t\t\t// Throttle checks to reduce CPU usage (check every 200ms)\n\t\t\t\t\t\t\t\tif (timestamp - lastCheckTime >= 200) {\n\t\t\t\t\t\t\t\t\tlastCheckTime = timestamp;\n\t\t\t\t\t\t\t\t\tconst currentTime = event.target.getCurrentTime();\n\n\t\t\t\t\t\t\t\t\tif (loop && loop !== \"0\") {\n\t\t\t\t\t\t\t\t\t\tif (!isNaN(endTime) && Math.round(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tevent.target.seekTo(startTime, true);\n\t\t\t\t\t\t\t\t\t\t\tevent.target.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (Math.ceil(currentTime) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\t\t\tchildren[0].children[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Continue the loop only if player is playing (state 1)\n\t\t\t\t\t\t\t\tif (event.target.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Start the animation frame loop\n\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\n\t\t\t\t\t\t\t// Handle state changes to manage rAF loop\n\t\t\t\t\t\t\tevent.target.addEventListener(\"onStateChange\", (stateEvent) => {\n\t\t\t\t\t\t\t\tif (stateEvent.data === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t// Resume animation frame loop when video plays\n\t\t\t\t\t\t\t\t\trafId = requestAnimationFrame(checkVideoTime);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.PAUSED ||\n\t\t\t\t\t\t\t\t\tstateEvent.data === YT.PlayerState.ENDED\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Stop animation frame loop when video is paused or ended\n\t\t\t\t\t\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tconst pausedPlayers = {}; // Track paused players and their current times\n\n\t\t\t\t\t\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\t\t\t\t\t\tif (document.hidden) {\n\t\t\t\t\t\t\t\t\t// Tab is hidden — pause all playing videos\n\t\t\t\t\t\t\t\t\tObject.entries(players).forEach(([id, player]) => {\n\t\t\t\t\t\t\t\t\t\tif (player && typeof player.getPlayerState === \"function\") {\n\t\t\t\t\t\t\t\t\t\t\tif (player.getPlayerState() === YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst time = player.getCurrentTime();\n\t\t\t\t\t\t\t\t\t\t\t\tpausedPlayers[id] = time;\n\t\t\t\t\t\t\t\t\t\t\t\tplayer.pauseVideo();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Tab is visible again — resume paused videos\n\t\t\t\t\t\t\t\t\tObject.entries(pausedPlayers).forEach(([id, time]) => {\n\t\t\t\t\t\t\t\t\t\tconst player = players[id];\n\t\t\t\t\t\t\t\t\t\tif (player && typeof time === \"number\") {\n\t\t\t\t\t\t\t\t\t\t\tplayer.seekTo(time, true);\n\t\t\t\t\t\t\t\t\t\t\tplayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t// Clear memory\n\t\t\t\t\t\t\t\t\tObject.keys(pausedPlayers).forEach((key) => delete pausedPlayers[key]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Store the cancelAnimationFrame function for cleanup\n\t\t\t\t\t\t\tintervalMap[lastIframe.id] = () => cancelAnimationFrame(rafId);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction onYouTubeIframeAPIReady() {\n\tinitYouTubePlayers();\n\tinitHTML5VideoPlayers();\n}\n\n// Add mutation observer for dynamic content\nconst observeElements = function () {\n\t// Use MutationObserver to detect dynamically added elements\n\tconst observer = new MutationObserver(function (mutations) {\n\t\tmutations.forEach(function (mutation) {\n\t\t\tif (mutation.addedNodes.length) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tinitYouTubePlayers();\n\t\t\t\t\tinitHTML5VideoPlayers();\n\t\t\t\t\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t\t\t\t\tjQuery(this).coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t\t\t\t\tjQuery(this).addClass(\"initialized\");\n\t\t\t\t\t});\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t});\n\t});\n\n\tobserver.observe(document.body, {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t});\n};\n\n// Initialize on document ready and again on window load\njQuery(document).ready(function () {\n\tobserveElements();\n\n\t// Initialize existing sliders\n\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t// Remove any existing duplicate wrappers or controls\n\t\tconst $container = jQuery(this);\n\t\tif (\n\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t) {\n\t\t\t// Unwrap once to fix double wrapping\n\t\t\t$container.unwrap();\n\t\t}\n\n\t\t// Remove any duplicate controls\n\t\tif (\n\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t) {\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t}\n\n\t\t// Initialize\n\t\t$container.coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t$container.addClass(\"initialized\");\n\t});\n});\n\n// Also initialize on window load (after all resources)\njQuery(window).on(\"load\", function () {\n\t// Reinitialize players and sliders\n\tinitYouTubePlayers();\n\tinitHTML5VideoPlayers();\n\n\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t// Remove any existing duplicate wrappers or controls\n\t\tconst $container = jQuery(this);\n\t\tif (\n\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t) {\n\t\t\t// Unwrap once to fix double wrapping\n\t\t\t$container.unwrap();\n\t\t}\n\n\t\t// Remove any duplicate controls\n\t\tif (\n\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t) {\n\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t}\n\n\t\t// Initialize\n\t\t$container.coca_imageCompare($container.data(\"settings\") || {});\n\t\t$container.addClass(\"initialized\");\n\t});\n});\n\n// Handle Elementor frontend init\njQuery(window).on(\"elementor/frontend/init\", function () {\n\tif (typeof elementorFrontend !== \"undefined\") {\n\t\telementorFrontend.hooks.addAction(\"frontend/element_ready/widget\", function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\t// Clean up any duplicate elements first\n\t\t\t\tjQuery(\".coca-bais-container\").each(function () {\n\t\t\t\t\tconst $container = jQuery(this);\n\n\t\t\t\t\t// Check for double wrapping\n\t\t\t\t\tif (\n\t\t\t\t\t\t$container.parent().hasClass(\"coca-image-compare-wrapper\") &&\n\t\t\t\t\t\t$container.parent().parent().hasClass(\"coca-image-compare-wrapper\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Unwrap once to fix double wrapping\n\t\t\t\t\t\t$container.unwrap();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove any duplicate controls\n\t\t\t\t\tif (\n\t\t\t\t\t\t$container.next(\".video-control-area\").length > 0 &&\n\t\t\t\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").length > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\t$container.next(\".video-control-area\").next(\".video-control-area\").remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove duplicate overlay and handle elements inside container\n\t\t\t\t\tconst $overlays = $container.find(\".coca-image-compare-overlay\");\n\t\t\t\t\tif ($overlays.length > 1) {\n\t\t\t\t\t\t$overlays.not(\":first\").remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle specific case for template-style07 with handle-bottom\n\t\t\t\t\t// Remove duplicate handle-wrapper elements\n\t\t\t\t\tconst $handleWrappers = $container.find(\".coca-image-compare-handle-wrapper\");\n\t\t\t\t\tif ($handleWrappers.length > 1) {\n\t\t\t\t\t\t$handleWrappers.last().remove();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst $handles = $container.find(\".coca-image-compare-handle\");\n\t\t\t\t\tif ($handles.length > 1) {\n\t\t\t\t\t\t$handles.not(\":first\").remove();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tinitYouTubePlayers();\n\t\t\t\tinitHTML5VideoPlayers();\n\n\t\t\t\tjQuery(\".coca-bais-container:not(.initialized)\").each(function () {\n\t\t\t\t\tjQuery(this).coca_imageCompare(jQuery(this).data(\"settings\") || {});\n\t\t\t\t\tjQuery(this).addClass(\"initialized\");\n\t\t\t\t});\n\t\t\t}, 500);\n\t\t});\n\t}\n});\n\nwindow.jQuery.fn.coca_imageCompare = function (userOptions) {\n\t// Prevent multiple initializations on the same element\n\tif (this.hasClass(\"initialized\")) {\n\t\treturn this;\n\t}\n\tconst jquery = window.jQuery;\n\tconst defaultOptions = {\n\t\tdefault_offset_pct: 0.5,\n\t\torientation: \"horizontal\",\n\t\tbefore_label: \"Before\",\n\t\tafter_label: \"After\",\n\t\tbefore_image: \"\",\n\t\tafter_image: \"\",\n\t\tindicator_image: \"\",\n\t\tclasses: [],\n\t\tshow_labels: 'yes',\n\t\tno_overlay: false,\n\t\thandle_bottom_only: false,\n\t\tmove_slider_on_hover: false,\n\t\tmove_with_handle_only: true,\n\t\tclick_to_move: false,\n\t\tauto_slide_enabled: false,\n\t\tauto_slide_duration: 4,\n\t\tauto_slide_direction: 'back_and_forth',\n\t\tauto_slide_pause_on_hover: true,\n\t};\n\n\tconst options = jquery.extend(defaultOptions, userOptions);\n\n\treturn this.each(function () {\n\t\tlet imgHeight;\n\t\tlet imgWidth;\n\t\tlet offsetY;\n\t\tlet offsetX;\n\t\tconst container = jquery(this);\n\t\tconst orientation = options.orientation;\n\n\t\tlet tagName;\n\n\t\tif (container.find(\"img\")?.length) {\n\t\t\ttagName = \"img\";\n\t\t} else if (container.find(\"iframe\")?.length) {\n\t\t\ttagName = \"iframe\";\n\t\t} else if (container.find(\"video\")?.length) {\n\t\t\ttagName = \"video\";\n\t\t}\n\n\t\tconst wrapperClassList = [].join.call(options.classes, \" \");\n\t\tconst classPrefix = \"coca-image-compare\";\n\n\t\tconst beforeD = orientation === \"vertical\" ? \"down\" : \"left\";\n\t\tconst afterD = orientation === \"vertical\" ? \"up\" : \"right\";\n\n\t\t// Update wrapper class.\n\t\tconst handleBottomClass = options.handle_bottom_only ? \"handle-bottom\" : \"\";\n\t\tconst noOverlayClass = options.no_overlay ? \"no-overlay\" : \"\";\n\n\t\t// Check if already wrapped\n\t\tif (!container.parent().hasClass(`${classPrefix}-wrapper`)) {\n\t\t\tcontainer.wrap(\n\t\t\t\t`<div class='${wrapperClassList} ${classPrefix}-wrapper ${classPrefix}-${orientation} ${handleBottomClass}'></div>`,\n\t\t\t);\n\t\t}\n\n\t\t// const beforeImg = container.find(\"img:first\");\n\t\t// const afterImg = container.find(\"img:last\");\n\t\tconst beforeImg = container.find(`${tagName}:first`);\n\t\tconst afterImg = container.find(`${tagName}:last`);\n\n\t\tcontainer.addClass(`${classPrefix}-container`);\n\t\tbeforeImg.addClass(`${classPrefix}-before`);\n\t\tafterImg.addClass(`${classPrefix}-after`);\n\n\t\t// create an indicator image feature\n\t\tif (options.indicator_image.length) {\n\t\t\tcontainer.append(jquery(options.indicator_image).addClass(`${classPrefix}-overlay-image`));\n\t\t}\n\n\t\tcontainer.append(`<div class='${classPrefix}-overlay ${noOverlayClass}'></div>`);\n\t\tcontainer.append(`<div class='${classPrefix}-handle'></div>`);\n\n\t\tconst overlay = container.find(`.${classPrefix}-overlay`);\n\t\tconst slider = container.find(`.${classPrefix}-handle`);\n\n\t\t// Set handle position.\n\t\tif (options.handle_bottom_only) {\n\t\t\t// For template-style07, check if it already has a handle wrapper\n\t\t\tif (options.classes && options.classes.includes(\"template-style07\")) {\n\t\t\t\t// First clean up any existing handle wrappers or extra handles\n\t\t\t\tconst existingWrappers = container.find(`.${classPrefix}-handle-wrapper`);\n\t\t\t\tif (existingWrappers.length > 0) {\n\t\t\t\t\t// Keep only the first wrapper\n\t\t\t\t\texistingWrappers.not(\":first\").remove();\n\t\t\t\t\t// Move the slider to the first wrapper if it's not already there\n\t\t\t\t\tif (!slider.parent().hasClass(`${classPrefix}-handle-wrapper`)) {\n\t\t\t\t\t\texistingWrappers.first().append(slider);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No wrappers exist, create one\n\t\t\t\t\tslider.wrap(`<div class='${classPrefix}-handle-wrapper'></div>`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normal behavior for other templates\n\t\t\t\tslider.wrap(`<div class='${classPrefix}-handle-wrapper'></div>`);\n\t\t\t}\n\t\t} else {\n\t\t\tslider.append(`<span class='${classPrefix}-${beforeD}-arrow'></span>`);\n\t\t\tslider.append(`<span class='${classPrefix}-${afterD}-arrow'></span>`);\n\t\t}\n\n\t\t// Add labels.\n\t\tif (options.show_labels !== '') {\n\t\t\tconst quote = options.before_label.indexOf(\"'\") !== -1 ? '\"' : \"'\";\n\t\t\toverlay.append(\n\t\t\t\t`<div class='${classPrefix}-before-label ${options.show_labels}' data-content=${quote}${options.before_label}${quote}></div>`,\n\t\t\t);\n\t\t\toverlay.append(\n\t\t\t\t`<div class='${classPrefix}-after-label ${options.show_labels}' data-content=${quote}${options.after_label}${quote}></div>`,\n\t\t\t);\n\t\t}\n\n\t\tconst calcOffset = (pct) => {\n\t\t\tconst [root] = container;\n\n\t\t\t// remove first.\n\t\t\t// if (root.querySelector(\"img:first-child\").style.width) {\n\t\t\t// \troot.querySelector(\"img:first-child\").style.width = \"\";\n\t\t\t// }\n\t\t\tif (root.querySelector(`${tagName}:first-child`).style.width) {\n\t\t\t\troot.querySelector(`${tagName}:first-child`).style.width = \"\";\n\t\t\t}\n\n\t\t\tconst sampleImageWidth = root.querySelector(`${tagName}:first-child`).width;\n\n\t\t\t// [].forEach.call(root.querySelectorAll(\"img\"), function (imageElement) {\n\t\t\t[].forEach.call(root.querySelectorAll(`${tagName}`), function (imageElement) {\n\t\t\t\t// Set image width.\n\t\t\t\tif (sampleImageWidth > root.clientWidth) {\n\t\t\t\t\timageElement.style.width = `${root.clientWidth}px`;\n\t\t\t\t} else {\n\t\t\t\t\timageElement.style.width = `${sampleImageWidth}px`;\n\t\t\t\t}\n\n\t\t\t\t// Set width and height when not exists.\n\t\t\t\tif (!imageElement.getAttribute(\"width\")) {\n\t\t\t\t\timageElement.setAttribute(\"width\", imageElement.naturalWidth);\n\t\t\t\t}\n\t\t\t\tif (!imageElement.getAttribute(\"height\")) {\n\t\t\t\t\timageElement.setAttribute(\"height\", imageElement.naturalHeight);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// let width = root.querySelector(\"img:first-child\").width;\n\t\t\t// let height = root.querySelector(\"img:first-child\").height;\n\t\t\tlet width = root.querySelector(`${tagName}:first-child`).width;\n\t\t\tlet height = root.querySelector(`${tagName}:first-child`).height;\n\n\t\t\tif (container.hasClass(\"popup-loaded\")) {\n\t\t\t\tconst windowWidth = window.innerWidth;\n\t\t\t\tconst windowHeight = window.innerHeight;\n\n\t\t\t\tconst targetWidth = windowWidth - windowWidth * 0.2;\n\t\t\t\tconst targetHeight = windowHeight - windowHeight * 0.2;\n\n\t\t\t\tconst ratio = width / height;\n\n\t\t\t\tif (ratio > targetWidth / targetHeight) {\n\t\t\t\t\twidth = targetWidth;\n\t\t\t\t\theight = targetWidth / ratio;\n\t\t\t\t} else {\n\t\t\t\t\theight = targetHeight;\n\t\t\t\t\twidth = targetHeight * ratio;\n\t\t\t\t}\n\n\t\t\t\t// [].forEach.call(root.querySelectorAll(\"img\"), function (imageElement) {\n\t\t\t\t[].forEach.call(root.querySelectorAll(`${tagName}`), function (imageElement) {\n\t\t\t\t\timageElement.style.width = `${width}px`;\n\t\t\t\t});\n\n\t\t\t\twidth = root.querySelector(`${tagName}:first-child`).width;\n\t\t\t\theight = root.querySelector(`${tagName}:first-child`).height;\n\t\t\t}\n\n\t\t\tif (tagName !== \"img\") {\n\t\t\t\twidth = container[0].clientWidth;\n\t\t\t}\n\n\t\t\t// Round values to prevent sub-pixel rendering issues (especially for iframes/videos)\n\t\t\t// Sub-pixel values cause shaking/jittering during auto-slide animation\n\t\t\treturn {\n\t\t\t\tw: `${Math.round(width)}px`,\n\t\t\t\th: `${Math.round(height)}px`,\n\t\t\t\tcw: `${Math.round(pct * width)}px`,\n\t\t\t\tch: `${Math.round(pct * height)}px`,\n\t\t\t};\n\t\t};\n\n\t\tconst adjustContainer = function (offset) {\n\t\t\tlet hasAfter;\n\n\t\t\tif (tagName === \"img\") {\n\t\t\t\thasAfter = true;\n\t\t\t} else {\n\t\t\t\thasAfter = afterImg[0].id.includes(\"after\");\n\t\t\t}\n\n\t\t\t// For iframes/videos: only clip the \"before\" element, leave \"after\" unclipped\n\t\t\t// This prevents shaking on Windows Chrome/Edge since the after iframe has no CSS changes\n\t\t\tconst isIframeOrVideo = tagName === \"iframe\" || tagName === \"video\";\n\n\t\t\tif (orientation === \"vertical\") {\n\t\t\t\tbeforeImg.css(\"clip\", `rect( 0, ${offset.w}, ${offset.ch}, 0)`);\n\t\t\t\t// Also update parent div clip for videos\n\t\t\t\tif (isIframeOrVideo && beforeImg.parent().length) {\n\t\t\t\t\tbeforeImg.parent().css(\"clip\", `rect( 0, ${offset.w}, ${offset.ch}, 0)`);\n\t\t\t\t}\n\t\t\t\tif (hasAfter && !isIframeOrVideo) {\n\t\t\t\t\t// Only clip after for images, not for iframes/videos\n\t\t\t\t\tafterImg.css(\"clip\", `rect( ${offset.ch}, ${offset.w}, ${offset.h}, 0)`);\n\t\t\t\t}\n\t\t\t\t// Update after parent div clip for videos to allow full visibility\n\t\t\t\tif (isIframeOrVideo && afterImg.parent().length) {\n\t\t\t\t\tafterImg.parent().css(\"clip\", `rect( ${offset.ch}, ${offset.w}, ${offset.h}, 0)`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbeforeImg.css(\"clip\", `rect( 0, ${offset.cw}, ${offset.h}, 0)`);\n\t\t\t\t// Also update parent div clip for videos\n\t\t\t\tif (isIframeOrVideo && beforeImg.parent().length) {\n\t\t\t\t\tbeforeImg.parent().css(\"clip\", `rect( 0, ${offset.cw}, ${offset.h}, 0)`);\n\t\t\t\t}\n\n\t\t\t\tif (hasAfter && !isIframeOrVideo) {\n\t\t\t\t\t// Only clip after for images, not for iframes/videos\n\t\t\t\t\tafterImg.css(\"clip\", `rect( 0, ${offset.w}, ${offset.h} , ${offset.cw})`);\n\t\t\t\t}\n\t\t\t\t// Update after parent div clip for videos to allow full visibility\n\t\t\t\tif (isIframeOrVideo && afterImg.parent().length) {\n\t\t\t\t\tafterImg.parent().css(\"clip\", `rect( 0, ${offset.w}, ${offset.h} , ${offset.cw})`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontainer.css(\"height\", offset.h);\n\t\t};\n\n\t\tconst adjustSliderWidth = function (offset) {\n\t\t\tcontainer.css(\"max-width\", offset.w);\n\t\t};\n\n\t\tconst adjustSlider = function (offset) {\n\t\t\t// Parse and round the position value to prevent sub-pixel jittering during auto-slide\n\t\t\tconst position = orientation === \"vertical\" ? offset.ch : offset.cw;\n\t\t\tconst roundedPosition = `${Math.round(parseFloat(position))}px`;\n\t\t\t\n\t\t\tslider.css(orientation === \"vertical\" ? \"top\" : \"left\", roundedPosition);\n\t\t\tadjustContainer(offset);\n\t\t};\n\n\t\t// Return the number specified or the min/max number if it outside the range given.\n\t\tconst minMaxNumber = function (num, min, max) {\n\t\t\treturn Math.max(min, Math.min(max, num));\n\t\t};\n\n\t\t// Calculate the slider percentage based on the position.\n\t\tconst getSliderPercentage = function (positionX, positionY) {\n\t\t\tconst vertical = (positionY - offsetY) / imgHeight;\n\t\t\tconst horizontal = (positionX - offsetX) / imgWidth;\n\t\t\tconst sliderPercentage = orientation === \"vertical\" ? vertical : horizontal;\n\n\t\t\treturn minMaxNumber(sliderPercentage, 0, 1);\n\t\t};\n\n\t\t// Handle label visibility based on slider position\n\t\tconst updateLabelVisibility = function() {\n\t\t\t// Get the current position of the slider\n\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t// Hide the labels based on slider position\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\t// Hide \"Before\" label when slider is close to left edge\n\t\t\t\tif (sliderPosition <= container.width() * 0.05) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\n\t\t\t\t// Hide \"After\" label when slider is close to right edge\n\t\t\t\tif (sliderPosition >= container.width() * 0.95) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-horizontal-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if (orientation === \"vertical\") {\n\t\t\t\t// Hide \"Before\" label when slider is close to top edge\n\t\t\t\tif (sliderPosition <= container.height() * 0.05) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-before-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".before-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\n\t\t\t\t// Hide \"After\" label when slider is close to bottom edge\n\t\t\t\tif (sliderPosition >= container.height() * 0.95) {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").hide();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontainer.find(\".coca-image-compare-after-label\").show();\n\t\t\t\t\tcontainer.closest(\".label-vertical-center, .label-vertical-middle, .coca-bais-shortcode, .elementor-widget-coca_bais_before_after_image_slider\").find(\".after-image-caption\").css(\"opacity\", 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// jquery( window ).on( 'resize.coca_image_compare', function() {\n\t\t// \tcontainer.imagesLoaded().done( function() {\n\t\t// \t\twindow.setTimeout( function() {\n\t\t// \t\t\tadjustSlider( calcOffset( options.default_offset_pct ) );\n\t\t// \t\t\tcontainer.css( 'opacity', 1 );\n\t\t// \t\t}, 100 );\n\t\t// \t} );\n\t\t// } );\n\n\t\tif (tagName === \"video\") {\n\t\t\tif (!players[beforeImg[0].id]) {\n\t\t\t\tbeforeImg[0].muted = true;\n\t\t\t\tplayers[beforeImg[0].id] = beforeImg[0];\n\t\t\t}\n\n\t\t\tif (!players[afterImg[0].id]) {\n\t\t\t\tafterImg[0].muted = true;\n\t\t\t\tplayers[afterImg[0].id] = afterImg[0];\n\t\t\t}\n\t\t}\n\n\t\tjQuery(document).ready(function ($) {\n\t\t\t// Add class to drag feature\n\t\t\t$(\".coca-bais-container\").each(function () {\n\t\t\t\tlet settings = $(this).attr(\"data-settings\");\n\t\t\t\tif (settings) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet parsedSettings = JSON.parse(settings.replace(/"/g, '\"')); // Convert HTML entities to JSON\n\n\t\t\t\t\t\tif (parsedSettings.move_slider_on_hover === false) {\n\t\t\t\t\t\t\t$(this).addClass(\"coca-slider-hover-false\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error parsing data-settings:\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Add class to hover feature\n\t\t\t$(\".coca-bais-container\").each(function () {\n\t\t\t\tlet settings = $(this).attr(\"data-settings\");\n\t\t\t\tif (settings) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet parsedSettings = JSON.parse(settings.replace(/"/g, '\"')); // Convert HTML entities to JSON\n\n\t\t\t\t\t\tif (parsedSettings.move_slider_on_hover === true) {\n\t\t\t\t\t\t\t$(this).addClass(\"coca-slider-hover-true\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(\"Error parsing data-settings:\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Imagesloaded\n\t\t\tcontainer.imagesLoaded().done(function () {\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\tconst offset = calcOffset(options.default_offset_pct);\n\t\t\t\t\tadjustSliderWidth(offset);\n\t\t\t\t\tadjustSlider(offset);\n\t\t\t\t\tcontainer.css(\"opacity\", 1);\n\t\t\t\t}, 100);\n\t\t\t});\n\t\t});\n\n\t\toffsetX = 0;\n\t\toffsetY = 0;\n\t\timgWidth = 0;\n\t\timgHeight = 0;\n\n\t\t// On move start event\n\t\tconst onMoveStart = function (e) {\n\t\t\tif (\n\t\t\t\t((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) &&\n\t\t\t\torientation !== \"vertical\"\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if (\n\t\t\t\t((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) &&\n\t\t\t\torientation === \"vertical\"\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tcontainer.addClass(\"active\");\n\t\t\toffsetX = container.offset().left;\n\t\t\toffsetY = container.offset().top;\n\t\t\timgWidth = beforeImg.width();\n\t\t\timgHeight = beforeImg.height();\n\t\t};\n\n\t\t// On move event\n\t\tconst onMove = function (e) {\n\t\t\tcontainer.addClass(\"moving\");\n\n\t\t\tif (container.hasClass(\"active\")) {\n\t\t\t\t// Adjust the slider position based on mouse/touch movement\n\t\t\t\tadjustSlider(calcOffset(getSliderPercentage(e.pageX, e.pageY)));\n\n\t\t\t\t// Update label visibility after slider position changes\n\t\t\t\tupdateLabelVisibility();\n\n\t\t\t\t// Add hover effect when the mouse is moving\n\t\t\t\tif (e.type === \"mousemove\") {\n\t\t\t\t\tjquery(this).find(`.${classPrefix}-overlay`).addClass(\"hover\");\n\t\t\t\t}\n\n\t\t\t\tif (tagName !== \"img\") {\n\t\t\t\t\tconst playPause = container.parent().find(\".video-play-pause\");\n\t\t\t\t\tconst children = playPause[0].children;\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst containerPosition =\n\t\t\t\t\t\toptions.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\n\t\t\t\t\t// Get current slider position\n\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\n\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tif (beforePlayer && beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof beforePlayer.getCurrentTime === 'function' && typeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(beforePlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play before video, pause after video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\t// Play after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst afterPlayer = players[afterImg[0].id];\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterPlayer && afterPlayer.g && afterPlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(afterPlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\t\t\t// Safely get duration from before player\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (beforePlayer && typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof afterPlayer.getCurrentTime === 'function' && typeof afterPlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(afterPlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tafterPlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play after video, pause before video\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\t// Play before video (when slider is on after side)\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// On move end event\n\t\tconst onMoveEnd = function (e) {\n\t\t\tcontainer.removeClass(\"active\");\n\t\t\tif (e.type === \"mouseleave\") {\n\t\t\t\tjquery(this).find(`.${classPrefix}-overlay`).removeClass(\"hover\");\n\t\t\t}\n\t\t};\n\n\t\tconst moveTarget = options.move_with_handle_only ? slider : container;\n\t\t\n\t\t// Disable drag functionality if auto slide is enabled and pause on hover is disabled\n\t\tconst isDragDisabled = options.auto_slide_enabled && !options.auto_slide_pause_on_hover;\n\t\t\n\t\tif (!isDragDisabled) {\n\t\t\tmoveTarget.on(\"movestart\", onMoveStart);\n\t\t\tmoveTarget.on(\"move\", onMove);\n\t\t\tmoveTarget.on(\"mouseleave\", function () {\n\t\t\t\tcontainer.removeClass(\"moving\");\n\t\t\t});\n\t\t}\n\n\t\tif (options.move_slider_on_hover && !isDragDisabled) {\n\t\t\tcontainer.on(\"mouseenter\", onMoveStart);\n\t\t\tcontainer.on(\"mousemove\", onMove);\n\t\t\tcontainer.on(\"mouseleave\", onMoveEnd);\n\t\t}\n\n\t\tslider.on(\"touchmove\", function (e) {\n\t\t\tif (!isDragDisabled) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\t// container.find(\"img\").on(\"mousedown\", function (event) {\n\t\tcontainer.find(`${tagName}`).on(\"mousedown\", function (event) {\n\t\t\tif (!isDragDisabled) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tif (options.click_to_move && !isDragDisabled) {\n\t\t\tcontainer.on(\"click\", function (e) {\n\t\t\t\tif (!e.target.closest(\".popup-button\")) {\n\t\t\t\t\toffsetX = container.offset().left;\n\t\t\t\t\toffsetY = container.offset().top;\n\t\t\t\t\timgWidth = beforeImg.width();\n\t\t\t\t\timgHeight = beforeImg.height();\n\n\t\t\t\t\tadjustSlider(getSliderPercentage(e.pageX, e.pageY));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (tagName !== \"img\") {\n\t\t\tif (beforeImg.length !== 0 || afterImg.length !== 0) {\n\t\t\t\tconst containerParent = container.parent();\n\n\t\t\t\tcontainerParent.append(\n\t\t\t\t\t`<div class=\"video-control-area\">\n\t\t\t\t\t<div class=\"video-play-pause\">\n\t\t\t\t\t\t<div title=\"play\" class=\"show\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-play-icon lucide-play\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<polygon points=\"6 3 20 12 6 21 6 3\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div title=\"pause\" class=\"hidden\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-pause-icon lucide-pause\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n\t\t\t\t\t\t\t\t<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"video-sound\">\n\n\t\t\t\t\t<div class=\"show\" title=\"mute\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\tclass=\"lucide lucide-volume-x-icon lucide-volume-x\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<line x1=\"22\" x2=\"16\" y1=\"9\" y2=\"15\" />\n\t\t\t\t\t\t\t\t<line x1=\"16\" x2=\"22\" y1=\"9\" y2=\"15\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div title=\"unmute\" class=\"hidden\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-volume2-icon lucide-volume-2\"><path d=\"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z\"/><path d=\"M16 9a5 5 0 0 1 0 6\"/><path d=\"M19.364 18.364a9 9 0 0 0 0-12.728\"/></svg>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</div>`,\n\t\t\t\t);\n\n\t\t\t\tconst palyPause = containerParent.find(\".video-play-pause\");\n\t\t\t\tconst videoSound = containerParent.find(\".video-sound\");\n\n\t\t\t\tpalyPause.on(\"click\", function () {\n\t\t\t\t\tconsole.log('🎬 Custom play button clicked');\n\t\t\t\t\tconsole.log('Available players:', Object.keys(players));\n\t\t\t\t\tconsole.log('beforeImg[0].id:', beforeImg[0].id);\n\t\t\t\t\tconsole.log('afterImg[0].id:', afterImg[0].id);\n\t\t\t\t\tconsole.log('beforeImg element:', beforeImg[0]);\n\t\t\t\t\tconsole.log('afterImg element:', afterImg[0]);\n\t\t\t\t\tconsole.log('players[beforeImg[0].id]:', players[beforeImg[0].id]);\n\t\t\t\t\tconsole.log('players[afterImg[0].id]:', players[afterImg[0].id]);\n\t\t\t\t\t\n\t\t\t\t\tconst children = palyPause[0].children;\n\n\t\t\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\n\t\t\t\t\t\tconst containerPosition =\n\t\t\t\t\t\t\toptions.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\n\t\t\t\t\t\tif (sliderPosition >= containerPosition) {\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\tconsole.log('🎬 Trying to play iframe video');\n\t\t\t\t\t\t\t\tconsole.log('Before player ID:', beforeImg[0].id);\n\t\t\t\t\t\t\t\tconsole.log('Before player object:', players[beforeImg[0].id]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Add safety checks for YouTube API methods\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tconsole.log('beforePlayer:', beforePlayer);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Debug what methods are available\n\t\t\t\t\t\t\t\tconsole.log('Available methods on beforePlayer:');\n\t\t\t\t\t\t\t\tconsole.log('- playVideo:', typeof beforePlayer.playVideo);\n\t\t\t\t\t\t\t\tconsole.log('- getPlayerState:', typeof beforePlayer.getPlayerState);\n\t\t\t\t\t\t\t\tconsole.log('- mute:', typeof beforePlayer.mute);\n\t\t\t\t\t\t\t\tconsole.log('- unMute:', typeof beforePlayer.unMute);\n\t\t\t\t\t\t\t\tconsole.log('- getAllMethods:', Object.getOwnPropertyNames(beforePlayer));\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforePlayer && typeof beforePlayer.playVideo === 'function') {\n\t\t\t\t\t\t\t\t\tconsole.log('✅ beforePlayer has playVideo method');\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t// Only attempt URL parsing and time checks if player is fully ready\n\t\t\t\t\t\t\t\t\t\tif (beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Player has iframe source');\n\t\t\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t// Check if getDuration method is available before calling\n\t\t\t\t\t\t\t\t\t\t\tlet endTime = null;\n\t\t\t\t\t\t\t\t\t\t\tif (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end || beforePlayer.getDuration());\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t// Check if getCurrentTime and seekTo methods are available\n\t\t\t\t\t\t\t\t\t\t\tif (start && endTime && \n\t\t\t\t\t\t\t\t\t\t\t\ttypeof beforePlayer.getCurrentTime === 'function' && \n\t\t\t\t\t\t\t\t\t\t\t\ttypeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tconst currentTime = Math.round(beforePlayer.getCurrentTime());\n\t\t\t\t\t\t\t\t\t\t\t\tif (currentTime >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tconsole.log('🎬 About to call playVideo on beforePlayer');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Simpler approach - just try to play without state check first\n\t\t\t\t\t\t\t\t\t\tbeforePlayer.playVideo();\n\t\t\t\t\t\t\t\t\t\tconsole.log('✅ playVideo called successfully');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Error with YouTube player API:', error);\n\t\t\t\t\t\t\t\t\t\t// Fallback: just try to play without time checks\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.playVideo();\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Fallback playVideo succeeded');\n\t\t\t\t\t\t\t\t\t\t} catch (e2) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Even fallback playVideo failed:', e2);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconsole.log('❌ beforePlayer not ready or no playVideo method');\n\t\t\t\t\t\t\t\t\tconsole.log('Trying alternative approaches...');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Alternative 1: Try to find playVideo method in prototype chain\n\t\t\t\t\t\t\t\t\tlet playVideoMethod = null;\n\t\t\t\t\t\t\t\t\tlet obj = beforePlayer;\n\t\t\t\t\t\t\t\t\twhile (obj && !playVideoMethod) {\n\t\t\t\t\t\t\t\t\t\tif (obj.playVideo && typeof obj.playVideo === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tplayVideoMethod = obj.playVideo.bind(beforePlayer);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tobj = Object.getPrototypeOf(obj);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (playVideoMethod) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Found playVideo in prototype chain');\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tplayVideoMethod();\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Prototype playVideo succeeded');\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Prototype playVideo failed:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tconsole.log('❌ No playVideo method found anywhere');\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// Alternative 2: Try direct iframe interaction\n\t\t\t\t\t\t\t\t\t\tconst iframe = beforePlayer.g || document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\t\tif (iframe && iframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('🎬 Trying direct iframe postMessage');\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tiframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('✅ Direct postMessage sent');\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ Direct postMessage failed:', e);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('❌ No iframe found for direct interaction');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\tconsole.log('🎬 Trying to play after iframe video');\n\t\t\t\t\t\t\t\tconsole.log('After player ID:', afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tconsole.log('🎬 Sending playVideo to after iframe');\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video playVideo command sent');\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconsole.log('❌ After iframe not found or no contentWindow');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t// Use direct iframe postMessage for pause (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tconsole.log('🎬 Sending pauseVideo to iframes');\n\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ Before video pause command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ After video pause command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvideoSound.on(\"click\", function (e) {\n\t\t\t\t\tconst children = videoSound[0].children;\n\t\t\t\t\tconst sliderPosition = parseFloat(slider.css(orientation === \"vertical\" ? \"top\" : \"left\"));\n\n\t\t\t\t\tif (children[0].className === \"show\") {\n\t\t\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\t\tif (sliderPosition >= container.width() / 2) {\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage for unmute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconsole.log('🔊 Sending unMute to iframes (slider position check)');\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ Before video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = false;\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t\t// Use direct iframe postMessage for unmute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\t\tconsole.log('🔊 Sending unMute to iframes');\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ After video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"unMute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\tconsole.log('✅ Before video unMute command sent');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = false;\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildren[1].classList.remove(\"show\");\n\t\t\t\t\t\tchildren[1].classList.add(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.remove(\"hidden\");\n\t\t\t\t\t\tchildren[0].classList.add(\"show\");\n\n\t\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\t\t// Use direct iframe postMessage for mute (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tconsole.log('🔇 Sending mute to iframes');\n\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ Before video mute command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\tconsole.log('✅ After video mute command sent');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplayers[beforeImg[0].id].muted = true;\n\t\t\t\t\t\t\tplayers[afterImg[0].id].muted = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Auto slide functionality\n\t\tif (options.auto_slide_enabled) {\n\t\t\tlet autoSlideRequestId;\n\t\t\tlet startTime;\n\t\t\tlet isAutoSliding = true;\n\t\t\tlet userHasInteracted = false;\n\t\t\tlet animationDirection = options.auto_slide_direction === 'back_and_forth' ? -1 : 1; // Start moving left for back_and_forth since handle starts at right\n\t\t\tlet pausedProgress = 0; // Store progress when paused\n\t\t\tlet isPausedByHover = false;\n\t\t\tlet lastUpdateTime = 0; // For throttling updates on Windows\n\n\t\t\tconst duration = options.auto_slide_duration * 1000; // Convert to milliseconds\n\t\t\t\n\t\t\t// Throttle interval for iframes to prevent Windows shaking (update every 32ms = ~30fps instead of 60fps)\n\t\t\tconst throttleInterval = (tagName === \"iframe\" || tagName === \"video\") ? 32 : 0;\n\n\t\t\t// For iframes/videos: ensure before is on top so we only need to clip before (not after)\n\t\t\t// This prevents shaking on Windows since after iframe has no CSS changes during animation\n\t\t\tif (tagName === \"iframe\" || tagName === \"video\") {\n\t\t\t\tbeforeImg.parent().css({\n\t\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\t\"z-index\": \"2\"\n\t\t\t\t});\n\t\t\t\tafterImg.parent().css({\n\t\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\t\"z-index\": \"1\"\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Easing function: ease-in-out (slow-fast-slow)\n\t\t\tconst easeInOut = function(t) {\n\t\t\t\treturn t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n\t\t\t};\n\n\t\t\t// Get current slider position (0-1)\n\t\t\tconst getCurrentPosition = function() {\n\t\t\t\tconst sliderPos = parseFloat(slider.css(orientation === 'vertical' ? 'top' : 'left'));\n\t\t\t\tconst containerSize = orientation === 'vertical' ? container.height() : container.width();\n\t\t\t\treturn containerSize > 0 ? Math.max(0, Math.min(1, sliderPos / containerSize)) : 0.5;\n\t\t\t};\n\n\n\n\t\t\tconst animate = function(currentTime) {\n\t\t\t\tif (!startTime) startTime = currentTime;\n\t\t\t\t\n\t\t\t\t// Throttle updates for iframes/videos to prevent Windows shaking\n\t\t\t\tif (throttleInterval > 0 && (currentTime - lastUpdateTime) < throttleInterval) {\n\t\t\t\t\t// Skip this frame, request next\n\t\t\t\t\tif (isAutoSliding && !isPausedByHover && !userHasInteracted) {\n\t\t\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastUpdateTime = currentTime;\n\t\t\t\t\n\t\t\t\tconst elapsed = currentTime - startTime;\n\t\t\t\tlet progress = (elapsed / duration) + pausedProgress;\n\n\t\t\t\t// Handle different directions\n\t\t\t\tif (options.auto_slide_direction === 'left_to_right') {\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reset for continuous left to right\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tadjustSlider(calcOffset(easedProgress));\n\t\t\t\t} \n\t\t\t\telse if (options.auto_slide_direction === 'right_to_left') {\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reset for continuous right to left\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tadjustSlider(calcOffset(1 - easedProgress));\n\t\t\t\t}\n\t\t\t\telse { // back_and_forth\n\t\t\t\t\tif (progress >= 1) {\n\t\t\t\t\t\t// Reverse direction and reset\n\t\t\t\t\t\tanimationDirection *= -1;\n\t\t\t\t\t\tstartTime = currentTime;\n\t\t\t\t\t\tprogress = 0;\n\t\t\t\t\t\tpausedProgress = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst easedProgress = easeInOut(progress);\n\t\t\t\t\tconst position = animationDirection === 1 ? easedProgress : (1 - easedProgress);\n\t\t\t\t\tadjustSlider(calcOffset(position));\n\t\t\t\t\t\n\t\t\t\t\t// Add video control for auto slide animation\n\t\t\t\t\tif (tagName === \"iframe\") {\n\t\t\t\t\t\tconst containerPosition = options.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\t\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods (same as manual dragging)\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\tif (beforePlayer && beforePlayer.g && beforePlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(beforePlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof beforePlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = beforePlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof beforePlayer.getCurrentTime === 'function' && typeof beforePlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(beforePlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tbeforePlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play before video, pause after video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\t// Play after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Add safety checks for YouTube API methods \n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst afterPlayer = players[afterImg[0].id];\n\t\t\t\t\t\t\t\tconst beforePlayer = players[beforeImg[0].id];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterPlayer && afterPlayer.g && afterPlayer.g.src) {\n\t\t\t\t\t\t\t\t\tconst youtubeUrl = new URL(afterPlayer.g.src);\n\t\t\t\t\t\t\t\t\tconst { start, end } = Object.fromEntries(youtubeUrl.searchParams.entries());\n\n\t\t\t\t\t\t\t\t\t// Safely get duration\n\t\t\t\t\t\t\t\t\tlet endTime;\n\t\t\t\t\t\t\t\t\tif (end) {\n\t\t\t\t\t\t\t\t\t\tendTime = parseFloat(end);\n\t\t\t\t\t\t\t\t\t} else if (typeof afterPlayer.getDuration === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tendTime = afterPlayer.getDuration();\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tendTime = null;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Check time and seek if needed\n\t\t\t\t\t\t\t\t\tif (start && endTime && typeof afterPlayer.getCurrentTime === 'function' && typeof afterPlayer.seekTo === 'function') {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (Math.round(afterPlayer.getCurrentTime()) >= endTime) {\n\t\t\t\t\t\t\t\t\t\t\t\tafterPlayer.seekTo(start);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error seeking video:', e);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error with YouTube player API:', error);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Direct iframe control for video (YouTube API methods don't work after lazy loading)\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\t// Play after video, pause before video\n\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\t// Play before video\n\t\t\t\t\t\t\t\t\tconst beforeIframe = document.getElementById(beforeImg[0].id);\n\t\t\t\t\t\t\t\t\tif (beforeIframe && beforeIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tbeforeIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Pause after video\n\t\t\t\t\t\t\t\t\tconst afterIframe = document.getElementById(afterImg[0].id);\n\t\t\t\t\t\t\t\t\tif (afterIframe && afterIframe.contentWindow) {\n\t\t\t\t\t\t\t\t\t\tafterIframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Handle MP4/HTML5 videos\n\t\t\t\t\tif (tagName === \"video\") {\n\t\t\t\t\t\tconst containerPosition = options.orientation === \"vertical\" ? container.height() / 2 : container.width() / 2;\n\t\t\t\t\t\tconst sliderPosition = options.orientation === \"vertical\" \n\t\t\t\t\t\t\t? parseFloat(slider.css(\"top\")) || 0\n\t\t\t\t\t\t\t: parseFloat(slider.css(\"left\")) || 0;\n\n\t\t\t\t\t\tconst hasBeforeVideo = beforeImg[0].id.includes(\"before\");\n\t\t\t\t\t\tconst hasAfterVideo = afterImg[0].id.includes(\"after\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (sliderPosition > containerPosition) {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasBeforeVideo) {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (hasBeforeVideo && hasAfterVideo) {\n\t\t\t\t\t\t\t\tplayers[afterImg[0].id].play();\n\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (hasAfterVideo) {\n\t\t\t\t\t\t\t\t\tplayers[beforeImg[0].id].play();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tplayers[afterImg[0].id].pause();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Update label visibility after slider position changes\n\t\t\t\tupdateLabelVisibility();\n\n\t\t\t\t// Continue animation if still sliding\n\t\t\t\tif (isAutoSliding && !isPausedByHover && !userHasInteracted) {\n\t\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst startAutoSlide = function() {\n\t\t\t\tif (!isAutoSliding || isPausedByHover) return;\n\t\t\t\t\n\t\t\t\tif (pausedProgress === 0) {\n\t\t\t\t\tstartTime = null; // Reset start time only if not resuming\n\t\t\t\t}\n\t\t\t\tautoSlideRequestId = requestAnimationFrame(animate);\n\t\t\t};\n\n\t\t\tconst stopAutoSlide = function() {\n\t\t\t\tif (autoSlideRequestId) {\n\t\t\t\t\tcancelAnimationFrame(autoSlideRequestId);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst pauseAutoSlide = function() {\n\t\t\t\tisPausedByHover = true;\n\t\t\t\t\n\t\t\t\t// Calculate current progress to resume from same position\n\t\t\t\tif (startTime) {\n\t\t\t\t\tconst currentTime = performance.now();\n\t\t\t\t\tconst elapsed = currentTime - startTime;\n\t\t\t\t\tconst currentProgress = (elapsed / duration) + pausedProgress;\n\t\t\t\t\t\n\t\t\t\t\t// Store progress for resume\n\t\t\t\t\tpausedProgress = currentProgress % 1; // Keep within 0-1 range\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstopAutoSlide();\n\t\t\t};\n\n\t\t\tconst resumeAutoSlide = function() {\n\t\t\t\tisPausedByHover = false;\n\t\t\t\tisAutoSliding = true;\n\t\t\t\tstartTime = null; // Will be set in animate function\n\t\t\t\tstartAutoSlide();\n\t\t\t};\n\n\t\t\t// Pause on hover if enabled\n\t\t\tif (options.auto_slide_pause_on_hover) {\n\t\t\t\tcontainer.on('mouseenter', pauseAutoSlide);\n\t\t\t\tcontainer.on('mouseleave', function() {\n\t\t\t\t\t// Reset user interaction flag when mouse leaves\n\t\t\t\t\t// This allows auto slide to resume even after manual interaction\n\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// Only add manual interaction handlers if pause on hover is enabled\n\t\t\t\t// Pause (don't permanently stop) auto slide when user interacts manually\n\t\t\t\tmoveTarget.on('movestart', function() {\n\t\t\t\t\tuserHasInteracted = true;\n\t\t\t\t\tpauseAutoSlide();\n\t\t\t\t});\n\n\t\t\t\t// Update position when user manually moves the slider\n\t\t\t\tmoveTarget.on('move', function() {\n\t\t\t\t\tif (userHasInteracted) {\n\t\t\t\t\t\t// Continuously update the position during manual drag\n\t\t\t\t\t\tconst currentPosition = getCurrentPosition();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Update progress based on direction for smooth resume\n\t\t\t\t\t\tif (options.auto_slide_direction === 'left_to_right') {\n\t\t\t\t\t\t\tpausedProgress = currentPosition;\n\t\t\t\t\t\t} \n\t\t\t\t\t\telse if (options.auto_slide_direction === 'right_to_left') {\n\t\t\t\t\t\t\tpausedProgress = 1 - currentPosition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse { // back_and_forth\n\t\t\t\t\t\t\t// Determine direction and progress based on current position\n\t\t\t\t\t\t\tif (currentPosition <= 0.5) {\n\t\t\t\t\t\t\t\tanimationDirection = 1;\n\t\t\t\t\t\t\t\tpausedProgress = currentPosition;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tanimationDirection = -1;\n\t\t\t\t\t\t\t\tpausedProgress = 1 - currentPosition;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Add touch event handling for mobile devices\n\t\t\t\t// Resume auto slide when touch ends (user lifts finger)\n\t\t\t\tmoveTarget.on('touchend', function() {\n\t\t\t\t\t// Small delay to ensure drag is complete\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t\t}, 300);\n\t\t\t\t});\n\n\t\t\t\t// Also handle when touch is cancelled\n\t\t\t\tmoveTarget.on('touchcancel', function() {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tuserHasInteracted = false;\n\t\t\t\t\t\tresumeAutoSlide();\n\t\t\t\t\t}, 300);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Set initial position to show before content first (handle at 100% position)\n\t\t\tadjustSlider(calcOffset(1.0)); // Start with handle at the end (right side)\n\t\t\tupdateLabelVisibility(); // Update labels for initial position\n\t\t\t\n\t\t\t// Set custom play/pause button to \"playing\" state and keep it there for auto slide\n\t\t\tconst playPause = container.parent().find(\".video-play-pause\");\n\t\t\tif (playPause.length > 0 && playPause[0].children) {\n\t\t\t\tconst children = playPause[0].children;\n\t\t\t\t// Show pause/stop icon (playing state) and hide play icon\n\t\t\t\tchildren[0].classList.remove(\"show\");\n\t\t\t\tchildren[0].classList.add(\"hidden\");\n\t\t\t\tchildren[1].classList.remove(\"hidden\");\n\t\t\t\tchildren[1].classList.add(\"show\");\n\t\t\t\t\n\t\t\t\t// Disable click functionality during auto slide\n\t\t\t\tplayPause.off('click').on('click', function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t// Do nothing - button stays in playing state during auto slide\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// Start auto sliding after initial setup\n\t\t\tsetTimeout(startAutoSlide, 0.1);\n\t\t}\n\n\t\twindow.jQuery(window).trigger(\"resize.coca_image_compare\");\n\t});\n};\n\n// Listen for lazy-loaded iframe events and reinitialize YouTube players only\ndocument.addEventListener('baislIframeLoaded', function(event) {\n\tconst iframe = event.detail.iframe;\n\tconst container = event.detail.container;\n\t\n\tif (container && iframe && iframe.src && iframe.src.includes('youtube.com')) {\n\t\t// Find the slider container\n\t\tconst sliderContainer = container.closest('.coca-image-compare-container') || \n\t\t\t\t\t\t container.closest('[data-bais-lazy-id]') ||\n\t\t\t\t\t\t container.closest('[class*=\"coca-bais-\"]');\n\t\t\n\t\tif (sliderContainer) {\n\t\t\t// Small delay to ensure iframe is fully loaded\n\t\t\tsetTimeout(() => {\n\t\t\t\t// Only reinitialize YouTube players for this specific iframe\n\t\t\t\tif (iframe.id && !players[iframe.id] && typeof YT !== 'undefined' && YT.Player) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tplayers[iframe.id] = new YT.Player(iframe.id, {\n\t\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\t\tonReady: function(event) {\n\t\t\t\t\t\t\t\t\tconsole.log('YouTube player ready for:', iframe.id);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tonError: function(event) {\n\t\t\t\t\t\t\t\t\tconsole.error('YouTube player error for:', iframe.id, event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('Error creating YouTube player:', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 200);\n\t\t}\n\t}\n});\n\n// Initialize HTML5 videos when document is ready\nif (document.readyState === 'loading') {\n\tdocument.addEventListener('DOMContentLoaded', initHTML5VideoPlayers);\n} else {\n\tinitHTML5VideoPlayers();\n}\n\n// Function to cleanup player references for a specific container\nfunction cleanupPlayersForContainer(container) {\n\tconst iframes = container.querySelectorAll('iframe[id]');\n\tconst videos = container.querySelectorAll('video[id]');\n\t\n\t// Remove iframe player references\n\tiframes.forEach(iframe => {\n\t\tif (iframe.id && players[iframe.id]) {\n\t\t\ttry {\n\t\t\t\t// Try to destroy YouTube player if it exists\n\t\t\t\tif (typeof players[iframe.id].destroy === 'function') {\n\t\t\t\t\tplayers[iframe.id].destroy();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// Silent error handling for player destruction\n\t\t\t}\n\t\t\tdelete players[iframe.id];\n\t\t}\n\t});\n\t\n\t// Remove video player references\n\tvideos.forEach(video => {\n\t\tif (video.id && players[video.id]) {\n\t\t\tdelete players[video.id];\n\t\t}\n\t});\n}\n\n// Function to initialize YouTube players for a specific container\nfunction initYouTubePlayersForContainer(container) {\n\t// Find YouTube iframes in this container\n\tconst iframes = container.querySelectorAll('iframe[src*=\"youtube.com\"], iframe[data-src*=\"youtube.com\"]');\n\t\n\tiframes.forEach(iframe => {\n\t\tif (iframe.src && iframe.src.includes('youtube.com') && iframe.id) {\n\t\t\t// Only create player if it doesn't exist and YouTube API is ready\n\t\t\tif (!players[iframe.id] && typeof YT !== 'undefined' && YT.Player) {\n\t\t\t\ttry {\n\t\t\t\t\tplayers[iframe.id] = new YT.Player(iframe.id, {\n\t\t\t\t\t\tevents: {\n\t\t\t\t\t\t\tonReady: function(event) {\n\t\t\t\t\t\t\t\tconsole.log('YouTube player ready for:', iframe.id);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonError: function(event) {\n\t\t\t\t\t\t\t\tconsole.error('YouTube player error for:', iframe.id, event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error('Error creating YouTube player:', error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}"],"names":["players","intervalMap","vimeoPlayers","tag","document","createElement","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","window","console","shouldFilter","args","message","join","hasWidgetError","includes","arg","Error","error","originalConsoleError","apply","warn","originalConsoleWarn","log","originalConsoleLog","originalOnError","onerror","source","lineno","colno","call","html5PausedVideos","Map","initHTML5VideoPlayers","querySelectorAll","forEach","videoElement","startTime","parseFloat","dataset","endTime","duration","hasLoop","hasAttribute","hasAutoPlay","playPauseContainer","parentElement","lastElementChild","firstElementChild","children","classList","remove","add","currentTime","addEventListener","container","$","closest","autoSlideEnabled","data","attr","pause","videos","hidden","video","paused","ended","set","time","play","clear","initYouTubePlayers","YT","Player","setTimeout","tagName","playPause","lastChild","firstIframe","lastIframe","id","playerVars","controls","rel","fs","mute","enablejsapi","events","onReady","event","clearInterval","youtubeUrl","URL","target","g","start","end","autoplay","loop","Object","fromEntries","searchParams","entries","getDuration","e","isNaN","seekTo","playVideo","rafId","lastCheckTime","checkVideoTime","timestamp","getCurrentTime","Math","round","ceil","cancelAnimationFrame","getPlayerState","PlayerState","PLAYING","requestAnimationFrame","stateEvent","PAUSED","ENDED","pausedPlayers","player","dir","pauseVideo","keys","key","onYouTubeIframeAPIReady","observeElements","observer","MutationObserver","mutations","mutation","addedNodes","length","jQuery","each","coca_imageCompare","addClass","observe","body","childList","subtree","ready","$container","parent","hasClass","unwrap","next","on","elementorFrontend","hooks","addAction","$overlays","find","not","$handleWrappers","last","$handles","fn","userOptions","jquery","defaultOptions","default_offset_pct","orientation","before_label","after_label","before_image","after_image","indicator_image","classes","show_labels","no_overlay","handle_bottom_only","move_slider_on_hover","move_with_handle_only","click_to_move","auto_slide_enabled","auto_slide_duration","auto_slide_direction","auto_slide_pause_on_hover","options","extend","imgHeight","imgWidth","offsetY","offsetX","wrapperClassList","classPrefix","beforeD","afterD","handleBottomClass","noOverlayClass","wrap","beforeImg","afterImg","append","overlay","slider","existingWrappers","first","quote","indexOf","calcOffset","pct","root","querySelector","style","width","sampleImageWidth","imageElement","clientWidth","getAttribute","setAttribute","naturalWidth","naturalHeight","height","windowWidth","innerWidth","windowHeight","innerHeight","targetWidth","targetHeight","ratio","w","h","cw","ch","adjustContainer","offset","hasAfter","isIframeOrVideo","css","adjustSliderWidth","adjustSlider","position","roundedPosition","minMaxNumber","num","min","max","getSliderPercentage","positionX","positionY","vertical","horizontal","sliderPercentage","updateLabelVisibility","sliderPosition","hide","show","muted","settings","parsedSettings","JSON","parse","replace","imagesLoaded","done","onMoveStart","distX","distY","preventDefault","left","top","onMove","pageX","pageY","type","className","containerPosition","hasBeforeVideo","hasAfterVideo","beforePlayer","beforeIframe","getElementById","afterIframe","contentWindow","postMessage","afterPlayer","onMoveEnd","removeClass","moveTarget","isDragDisabled","containerParent","palyPause","videoSound","unMute","getOwnPropertyNames","e2","playVideoMethod","obj","bind","getPrototypeOf","iframe","autoSlideRequestId","isAutoSliding","userHasInteracted","animationDirection","pausedProgress","isPausedByHover","lastUpdateTime","throttleInterval","easeInOut","t","getCurrentPosition","sliderPos","containerSize","animate","elapsed","progress","easedProgress","startAutoSlide","stopAutoSlide","pauseAutoSlide","performance","now","currentProgress","resumeAutoSlide","currentPosition","off","stopPropagation","trigger","detail","sliderContainer","onError","readyState","cleanupPlayersForContainer","iframes","destroy","initYouTubePlayersForContainer"],"sourceRoot":""} -
wp-before-after-image-slider/trunk/includes/admin/Panel.php
r3029200 r3473372 17 17 */ 18 18 private static ?self $instance = null; // phpcs:ignore Squiz.Commenting.VariableComment.Missing 19 20 /** 21 * Supported post types for React panel. 22 * 23 * @var array 24 */ 25 private array $supported_post_types = array( 'coca_bais', 'coca_bais_carousel' ); 19 26 20 27 /** … … 46 53 */ 47 54 public function set_html_edit_panel_root( WP_Post $post ) { 48 if ( 'coca_bais' !== get_post_type( $post ) ) { 55 $post_type = get_post_type( $post ); 56 57 if ( ! in_array( $post_type, $this->supported_post_types, true ) ) { 49 58 return; 50 59 } … … 52 61 printf( 53 62 '<div id="%s__edit_panel_root"></div> <!-- end edit panel --><!-- Al Amin Ahamed (alaminahamed.com) -->', 54 esc_attr( PostType::get_post_type())63 esc_attr( $post_type ) 55 64 ); 56 65 } -
wp-before-after-image-slider/trunk/includes/admin/RestApiRoutes.php
r3457783 r3473372 27 27 private static ?self $instance = null; // phpcs:ignore Squiz.Commenting.VariableComment.Missing 28 28 29 30 /** 31 * Extract YouTube video ID from URL. 32 * 33 * @param string $url YouTube URL. 34 * @return string|false Video ID or false if not found. 35 */ 36 private function extract_youtube_id( $url ) { 37 if ( empty( $url ) ) { 38 return false; 39 } 40 41 $patterns = array( 42 '/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([a-zA-Z0-9_-]{11})/', 43 '/youtube\.com\/v\/([a-zA-Z0-9_-]{11})/', 44 ); 45 46 foreach ( $patterns as $pattern ) { 47 if ( preg_match( $pattern, $url, $matches ) ) { 48 return $matches[1]; 49 } 50 } 51 52 return false; 53 } 54 55 /** 56 * Extract hex color from value (handles both string and array formats). 57 * 58 * @param mixed $value Color value (string or array with 'hex' key). 59 * @return string Sanitized hex color or empty string. 60 */ 61 private function extract_hex_color( $value ) { 62 if ( empty( $value ) ) { 63 return ''; 64 } 65 // If it's an array (from ColorPicker object), extract hex. 66 if ( is_array( $value ) && isset( $value['hex'] ) ) { 67 $value = $value['hex']; 68 } 69 // Sanitize and return. 70 return is_string( $value ) ? sanitize_hex_color( $value ) : ''; 71 } 72 29 73 /** 30 74 * The constructor class. … … 40 84 */ 41 85 public function register_routes() { 86 // Slider routes. 42 87 register_rest_route( 43 88 'coca-bais/v1', … … 46 91 'methods' => WP_REST_Server::CREATABLE, 47 92 'callback' => array( $this, 'save_post_meta' ), 93 'permission_callback' => function () { 94 return current_user_can( 'edit_posts' ); 95 }, 96 ) 97 ); 98 99 // Carousel routes. 100 register_rest_route( 101 'coca-bais/v1', 102 '/save-carousel-meta', 103 array( 104 'methods' => WP_REST_Server::CREATABLE, 105 'callback' => array( $this, 'save_carousel_meta' ), 106 'permission_callback' => function () { 107 return current_user_can( 'edit_posts' ); 108 }, 109 ) 110 ); 111 112 // Get all sliders for carousel selection. 113 register_rest_route( 114 'coca-bais/v1', 115 '/sliders', 116 array( 117 'methods' => WP_REST_Server::READABLE, 118 'callback' => array( $this, 'get_sliders' ), 48 119 'permission_callback' => function () { 49 120 return current_user_can( 'edit_posts' ); … … 91 162 92 163 /** 164 * Save the carousel meta data. 165 * 166 * @param WP_REST_Request $request The client request object. 167 * 168 * @return WP_Error|WP_HTTP_Response|WP_REST_Response 169 */ 170 public function save_carousel_meta( WP_REST_Request $request ) { 171 $params = $request->get_params(); 172 $post_id = isset( $params['post_id'] ) ? absint( $params['post_id'] ) : get_the_ID(); 173 174 // Extract and save slider IDs separately for backward compatibility. 175 $slider_ids = isset( $params['selected_slider_ids'] ) ? array_map( 'absint', (array) $params['selected_slider_ids'] ) : array(); 176 update_post_meta( $post_id, '_carousel_slider_ids', $slider_ids ); 177 178 // Extract carousel settings. 179 $settings = array( 180 'loop' => isset( $params['loop'] ) ? (bool) $params['loop'] : true, 181 'autoplay' => isset( $params['autoplay'] ) ? (bool) $params['autoplay'] : false, 182 'autoplay_delay' => isset( $params['autoplay_delay'] ) ? absint( $params['autoplay_delay'] ) : 3000, 183 'pause_on_hover' => isset( $params['pause_on_hover'] ) ? (bool) $params['pause_on_hover'] : true, 184 'speed' => isset( $params['speed'] ) ? absint( $params['speed'] ) : 300, 185 'navigation' => isset( $params['navigation'] ) ? (bool) $params['navigation'] : true, 186 'pagination' => isset( $params['pagination'] ) ? (bool) $params['pagination'] : true, 187 'pagination_type' => isset( $params['pagination_type'] ) ? sanitize_text_field( $params['pagination_type'] ) : 'bullets', 188 // Navigation colors. 189 'nav_bg_color' => isset( $params['nav_bg_color'] ) ? $this->extract_hex_color( $params['nav_bg_color'] ) : '', 190 'nav_arrow_color' => isset( $params['nav_arrow_color'] ) ? $this->extract_hex_color( $params['nav_arrow_color'] ) : '', 191 'nav_hover_bg_color' => isset( $params['nav_hover_bg_color'] ) ? $this->extract_hex_color( $params['nav_hover_bg_color'] ) : '', 192 'nav_hover_arrow_color' => isset( $params['nav_hover_arrow_color'] ) ? $this->extract_hex_color( $params['nav_hover_arrow_color'] ) : '', 193 // Pagination colors. 194 'pag_bg_color' => isset( $params['pag_bg_color'] ) ? $this->extract_hex_color( $params['pag_bg_color'] ) : '', 195 'pag_active_color' => isset( $params['pag_active_color'] ) ? $this->extract_hex_color( $params['pag_active_color'] ) : '', 196 'pag_hover_color' => isset( $params['pag_hover_color'] ) ? $this->extract_hex_color( $params['pag_hover_color'] ) : '', 197 'breakpoint_mobile' => isset( $params['breakpoint_mobile'] ) ? absint( $params['breakpoint_mobile'] ) : 640, 198 'breakpoint_tablet' => isset( $params['breakpoint_tablet'] ) ? absint( $params['breakpoint_tablet'] ) : 768, 199 'breakpoint_desktop' => isset( $params['breakpoint_desktop'] ) ? absint( $params['breakpoint_desktop'] ) : 1024, 200 'slides_mobile' => isset( $params['slides_mobile'] ) ? absint( $params['slides_mobile'] ) : 1, 201 'slides_tablet' => isset( $params['slides_tablet'] ) ? absint( $params['slides_tablet'] ) : 2, 202 'slides_desktop' => isset( $params['slides_desktop'] ) ? absint( $params['slides_desktop'] ) : 3, 203 'space_mobile' => isset( $params['space_mobile'] ) ? absint( $params['space_mobile'] ) : 10, 204 'space_tablet' => isset( $params['space_tablet'] ) ? absint( $params['space_tablet'] ) : 20, 205 'space_desktop' => isset( $params['space_desktop'] ) ? absint( $params['space_desktop'] ) : 30, 206 ); 207 208 update_post_meta( $post_id, '_carousel_settings', $settings ); 209 210 // Save clean meta for React component state restoration (only relevant fields). 211 $clean_meta = array_merge( $settings, array( 'selected_slider_ids' => $slider_ids ) ); 212 update_post_meta( $post_id, '_coca_bais_carousel_meta_data', $clean_meta ); 213 214 return rest_ensure_response( 215 array( 216 'code' => 'SUCCESS', 217 'message' => esc_html__( 'Carousel settings saved.', 'wp-before-after-image-slider' ), 218 ) 219 ); 220 } 221 222 /** 223 * Get all available sliders for carousel selection. 224 * 225 * @param WP_REST_Request $request The client request object. 226 * 227 * @return WP_Error|WP_HTTP_Response|WP_REST_Response 228 */ 229 public function get_sliders( WP_REST_Request $request ) { 230 $sliders = get_posts( 231 array( 232 'post_type' => 'coca_bais', 233 'posts_per_page' => -1, 234 'orderby' => 'title', 235 'order' => 'ASC', 236 'post_status' => 'publish', 237 ) 238 ); 239 240 $result = array(); 241 foreach ( $sliders as $slider ) { 242 // Get slider meta data - used for slider type check and thumbnail. 243 $meta_data = get_post_meta( $slider->ID, '_coca_bais_meta_data', true ); 244 $slider_type = isset( $meta_data['slider_type'] ) ? $meta_data['slider_type'] : 'default'; 245 246 $thumbnail_url = get_the_post_thumbnail_url( $slider->ID, 'thumbnail' ); 247 248 // Handle thumbnails based on slider type. 249 if ( ! $thumbnail_url ) { 250 if ( 'video' === $slider_type ) { 251 // Handle video thumbnails. 252 $video_source_type = isset( $meta_data['video_source_type'] ) ? $meta_data['video_source_type'] : 'youtube'; 253 254 if ( 'youtube' === $video_source_type ) { 255 // Extract YouTube video ID from before video URL. 256 $youtube_url = isset( $meta_data['video_before_youtube'] ) ? $meta_data['video_before_youtube'] : ''; 257 if ( $youtube_url ) { 258 $video_id = $this->extract_youtube_id( $youtube_url ); 259 if ( $video_id ) { 260 $thumbnail_url = 'https://img.youtube.com/vi/' . $video_id . '/hqdefault.jpg'; 261 } 262 } 263 } else { 264 // For uploaded video files, try to get actual thumbnail. 265 $video_file = isset( $meta_data['video_before_file'] ) ? $meta_data['video_before_file'] : ''; 266 if ( $video_file ) { 267 // Try to get video file data. 268 $video_file_data = is_array( $video_file ) ? $video_file : array(); 269 $video_attachment_id = isset( $video_file_data['id'] ) ? $video_file_data['id'] : 0; 270 271 // Try to get WordPress-generated thumbnail for video. 272 if ( $video_attachment_id ) { 273 $video_thumb = wp_get_attachment_image_url( $video_attachment_id, 'thumbnail' ); 274 if ( $video_thumb ) { 275 $thumbnail_url = $video_thumb; 276 } 277 } 278 279 // If no thumbnail generated, use video placeholder. 280 if ( ! $thumbnail_url ) { 281 $thumbnail_url = plugins_url( 'assets/lib/images/video-placeholder.svg', COCA_BAIS_PRO_FILE ); 282 } 283 } 284 } 285 } else { //phpcs:ignore 286 // Fallback to before image from slider meta for image sliders. 287 if ( ! empty( $meta_data['before_image'] ) ) { 288 $before_image_id = is_array( $meta_data['before_image'] ) 289 ? ( isset( $meta_data['before_image']['id'] ) ? $meta_data['before_image']['id'] : 0 ) 290 : $meta_data['before_image']; 291 if ( $before_image_id ) { 292 $thumbnail_url = wp_get_attachment_image_url( $before_image_id, 'thumbnail' ); 293 } 294 } 295 } 296 } 297 298 // Determine display type for filtering and get video URL if applicable. 299 $display_type = 'image'; 300 $video_url = ''; 301 if ( 'video' === $slider_type ) { 302 $video_source_type = isset( $meta_data['video_source_type'] ) ? $meta_data['video_source_type'] : 'youtube'; 303 $display_type = 'youtube' === $video_source_type ? 'youtube' : 'upload_video'; 304 305 // Get video URL for upload videos. 306 if ( 'upload_video' === $display_type ) { 307 $video_file = isset( $meta_data['video_before_file'] ) ? $meta_data['video_before_file'] : ''; 308 if ( $video_file ) { 309 $video_file_data = is_array( $video_file ) ? $video_file : array(); 310 $video_url = isset( $video_file_data['url'] ) ? $video_file_data['url'] : $video_file; 311 } 312 } 313 } 314 315 $result[] = array( 316 'id' => $slider->ID, 317 'title' => $slider->post_title, 318 'thumbnail' => $thumbnail_url ? $thumbnail_url : '', 319 'slider_type' => $slider_type, 320 'type' => $display_type, 321 'video_url' => $video_url, 322 ); 323 } 324 325 return rest_ensure_response( $result ); 326 } 327 328 /** 93 329 * Get the instance of the class. 94 330 * -
wp-before-after-image-slider/trunk/readme.txt
r3457783 r3473372 6 6 Tested up to: 6.9 7 7 Requires PHP: 7.4 8 Stable tag: 2. 1.28 Stable tag: 2.2.0 9 9 License: GPL-2.0-or-later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 122 122 123 123 == Upgrade Notice == 124 = 2.2.0 = 125 * Added: Carousel feature for displaying multiple before-after sliders 126 124 127 = 2.1.2 = 125 128 * Added: Auto slider feature -
wp-before-after-image-slider/trunk/wp-before-after-image-slider.php
r3457783 r3473372 15 15 * Plugin URI: https://codecanel.com/wp-before-after-image-slider/ 16 16 * Description: Craft dynamic before and after image sliders effortlessly. Engage viewers with seamless visual transitions. Compatible with top page builders like Elementor, Divi, and Gutenberg. 17 * Version: 2. 1.217 * Version: 2.2.0 18 18 * Requires at least: 6.0 19 19 * Tested up to: 6.9 … … 47 47 * @var string 48 48 */ 49 private string $version = '2. 1.2';49 private string $version = '2.2.0'; 50 50 51 51 /** … … 115 115 require_once COCA_BAIS_PATH . 'includes/admin/Dashboard.php'; 116 116 require_once COCA_BAIS_PATH . 'includes/admin/LazyLoadSettings.php'; 117 require_once COCA_BAIS_PATH . 'includes/admin/CarouselUpgrade.php'; 117 118 require_once COCA_BAIS_PATH . 'includes/features/LazyLoad.php'; 118 119 } … … 150 151 ); 151 152 add_filter( 'coca_bais_widget_rendered_html', $widget_rendered_html_callback, 10, 2 ); 153 154 // Register fallback shortcode for carousel when Pro is not active 155 // This ensures the shortcode returns empty instead of showing raw text. 156 add_action( 'init', array( $this, 'register_carousel_fallback_shortcode' ), 5 ); 157 } 158 159 /** 160 * Register fallback shortcode for carousel when Pro plugin is not active. 161 * Returns empty string to prevent raw shortcode from being displayed. 162 * 163 * @since 2.1.0 164 */ 165 public function register_carousel_fallback_shortcode(): void { 166 // Only register if the shortcode doesn't already exist (Pro not active). 167 if ( ! shortcode_exists( 'coca_bais_carousel' ) ) { 168 add_shortcode( 'coca_bais_carousel', array( $this, 'carousel_fallback_handler' ) ); 169 } 170 } 171 172 /** 173 * Fallback handler for carousel shortcode when Pro is not active. 174 * Returns empty string to hide the shortcode gracefully. 175 * 176 * @since 2.1.0 177 * @return string Empty string. 178 */ 179 public function carousel_fallback_handler(): string { 180 // Return empty - don't show anything when Pro is deactivated. 181 return ''; 152 182 } 153 183 … … 268 298 */ 269 299 public function register_admin_dependencies( string $hook_suffix ) { 270 $allowed_hooks = array( 'edit.php', 'post-new.php', 'post.php' ); 271 if ( ( 'coca_bais_page_license' === $hook_suffix ) || ( in_array( $hook_suffix, $allowed_hooks, true ) && 'coca_bais' === get_post_type() ) ) { 300 $allowed_hooks = array( 'edit.php', 'post-new.php', 'post.php' ); 301 $current_post_type = get_post_type(); 302 $allowed_post_types = array( 'coca_bais', 'coca_bais_carousel' ); 303 if ( ( 'coca_bais_page_license' === $hook_suffix ) || ( in_array( $hook_suffix, $allowed_hooks, true ) && in_array( $current_post_type, $allowed_post_types, true ) ) ) { 272 304 // The common script and styles for widgets. 273 305 $default_asset = array( … … 411 443 Admin\ShortCode::get_instance(); 412 444 Admin\Dashboard::get_instance(); 445 new Admin\CarouselUpgrade(); 413 446 } 414 447 }
Note: See TracChangeset
for help on using the changeset viewer.