{"version":3,"file":"VideoButtonSystem.BMiZr_4J.mjs","names":["useState","useRef","React.useState","ReactDOM.render","React.useRef","__legacyOverrideHOC_DataObserverContext","_jsx"],"sources":["https:/framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js","https:/framer.com/m/framer/store.js@^1.0.0","https:/framerusercontent.com/modules/3JR1w1rwfwD00s2tS2yj/J0UQWPm9mmWZDsU4OAop/Examples.js","https:/framerusercontent.com/modules/CC5Sr8AbWeVviHYMdjUd/137SIguGQdPD9jIPXz7u/VideoButtonSystem.js"],"sourcesContent":["import{useState,useEffect}from\"react\";import{Data,useObserveData}from\"framer\";export function createStore(state1){// Use Data so that a Preview reload resets the state\nconst dataStore=Data({state:Object.freeze({...state1})});// Create a set function that updates the state\nconst setDataStore=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(dataStore.state);}dataStore.state=Object.freeze({...dataStore.state,...newState});};// Store the initial state, copy the object if it's an object\nlet storeState=typeof state1===\"object\"?Object.freeze({...state1}):state1;// Keep a list of all the listeners, in the form of React hook setters\nconst storeSetters=new Set();// Create a set function that updates all the listeners / setters\nconst setStoreState=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(storeState);}storeState=typeof newState===\"object\"?Object.freeze({...storeState,...newState}):newState;// Update all the listeners / setters with the new value\nstoreSetters.forEach(setter=>setter(storeState));};// Create the actual hook based on everything above\nfunction useStore(){// Create the hook we are going to use as a listener\nconst[state,setState]=useState(storeState);// If we unmount the component using this hook, we need to remove the listener\n// @ts-ignore\nuseEffect(()=>{// But right now, we need to add the listener\nstoreSetters.add(setState);return()=>storeSetters.delete(setState);},[]);// If Data context exists, use Data, otherwise use vanilla React state\nif(useObserveData()===true){useObserveData();return[dataStore.state,setDataStore];}else{// Return the state and a function to update the central store\nreturn[state,setStoreState];}}return useStore;}\nexport const __FramerMetadata__ = {\"exports\":{\"createStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./createStore.map","/*\n * createStore (framer/store@1.0.1)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js\"\n","import{jsx as _jsx}from\"react/jsx-runtime\";import{useRef,useEffect}from\"react\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";// Mantenemos el store por compatibilidad\nconst useStore=createStore({background:\"#FFFFFF\"});// Versión con tamaños optimizados para PC y móvil\nexport function withIndividualZoom(Component){return props=>{const containerRef=useRef(null);useEffect(()=>{if(!containerRef.current)return;// Variable local para bloqueo de múltiples zooms\nlet zoomActive=false;// Detectar si es dispositivo móvil\nconst isMobile=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)||window.innerWidth<768;// Función para mostrar zoom\nconst handleZoomClick=event=>{event.stopPropagation();// Evitar múltiples zooms simultáneos\nif(zoomActive)return;zoomActive=true;// Obtener la URL de la imagen\nlet imageUrl=\"\";// Intentar obtener la imagen\nif(event.target.tagName===\"IMG\"){imageUrl=event.target.src;}else{// Buscar la primera imagen dentro del elemento clickeado\nconst nestedImg=event.currentTarget.querySelector(\"img\");if(nestedImg){imageUrl=nestedImg.src;}}if(!imageUrl){console.warn(\"No se encontr\\xf3 imagen para mostrar\");zoomActive=false;return;}// Crear overlay\nconst overlay=document.createElement(\"div\");overlay.style.position=\"fixed\";overlay.style.top=\"0\";overlay.style.left=\"0\";overlay.style.width=\"100%\";overlay.style.height=\"100%\";overlay.style.backgroundColor=\"rgba(0, 0, 0, 0.9)\";overlay.style.zIndex=\"999999\";overlay.style.display=\"flex\";overlay.style.justifyContent=\"center\";overlay.style.alignItems=\"center\";// Crear imagen ampliada\nconst zoomedImg=document.createElement(\"img\");zoomedImg.style.maxWidth=\"90%\";zoomedImg.style.maxHeight=\"85%\";zoomedImg.style.objectFit=\"contain\";zoomedImg.style.boxShadow=\"0 5px 25px rgba(255, 255, 255, 0.3)\";zoomedImg.style.borderRadius=\"8px\";zoomedImg.src=imageUrl;// Crear botón de cierre\nconst closeButton=document.createElement(\"div\");closeButton.style.position=\"absolute\";closeButton.style.top=\"15px\";closeButton.style.right=\"15px\";closeButton.style.width=isMobile?\"50px\":\"40px\";closeButton.style.height=isMobile?\"50px\":\"40px\";closeButton.style.borderRadius=\"50%\";closeButton.style.backgroundColor=\"rgba(255, 255, 255, 0.7)\";closeButton.style.display=\"flex\";closeButton.style.justifyContent=\"center\";closeButton.style.alignItems=\"center\";closeButton.style.cursor=\"pointer\";closeButton.innerHTML=`<svg width=\"${isMobile?\"30\":\"24\"}\" height=\"${isMobile?\"30\":\"24\"}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"black\" stroke-width=\"3\">\n                    <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n                    <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n                </svg>`;// Manejar cierre del overlay\nconst closeOverlay=()=>{document.body.removeChild(overlay);document.body.style.overflow=\"\";// Esperar un momento antes de permitir otro zoom\nsetTimeout(()=>{zoomActive=false;},100);};overlay.addEventListener(\"click\",closeOverlay);closeButton.addEventListener(\"click\",e=>{e.stopPropagation();closeOverlay();});// Añadir al documento\noverlay.appendChild(zoomedImg);overlay.appendChild(closeButton);document.body.appendChild(overlay);document.body.style.overflow=\"hidden\";};// Función para optimizar la imagen con tamaños responsivos\nconst optimizeImageDisplay=()=>{// Obtener solo nuestro contenedor específico\nconst container=containerRef.current;const componentElement=container.firstElementChild;if(!componentElement)return;// Dimensiones responsivas según dispositivo\nconst containerWidth=isMobile?\"90%\":\"95%\";const maxContainerWidth=isMobile?\"500px\":\"1000px\";// Configurar el contenedor raíz con dimensiones responsivas\ncontainer.style.transform=\"scale(1)\";container.style.width=containerWidth;container.style.maxWidth=maxContainerWidth;container.style.height=\"auto\";container.style.minHeight=\"auto\";container.style.padding=\"0\";container.style.margin=\"0 auto\";container.style.overflow=\"visible\";container.style.display=\"block\";container.style.position=\"relative\";// Ajustar el componente\ncomponentElement.style.transform=\"scale(1)\";componentElement.style.width=\"100%\";componentElement.style.maxWidth=\"100%\";componentElement.style.height=\"auto\";componentElement.style.padding=\"0\";componentElement.style.margin=\"0 auto\";componentElement.style.overflow=\"visible\";componentElement.style.display=\"block\";componentElement.style.position=\"relative\";// Buscar imágenes SOLO dentro de nuestro componente\nconst images=componentElement.querySelectorAll(\"img\");if(images.length>0){images.forEach(img=>{// Mantener visualización completa\nimg.style.maxWidth=\"100%\";img.style.height=\"auto\";img.style.display=\"block\";img.style.margin=\"0 auto\";img.style.objectFit=\"contain\";img.style.borderRadius=\"8px\";// Buscar un contenedor adecuado para la imagen\nlet parent=img.parentElement;// Si el padre es nuestro componente, crear un wrapper\nif(parent===componentElement){const wrapper=document.createElement(\"div\");wrapper.style.width=\"100%\";wrapper.style.margin=\"0 auto\";wrapper.style.position=\"relative\";wrapper.style.boxShadow=isMobile?\"0 8px 20px rgba(0, 0, 0, 0.25)\":\"0 12px 35px rgba(0, 0, 0, 0.25)\";wrapper.style.borderRadius=\"8px\";wrapper.style.cursor=\"zoom-in\";// Reemplazar imagen con wrapper\nparent.replaceChild(wrapper,img);wrapper.appendChild(img);// Agregar evento de zoom\nwrapper.onclick=handleZoomClick;}else{parent.style.width=\"100%\";parent.style.margin=\"0 auto\";parent.style.position=\"relative\";parent.style.boxShadow=isMobile?\"0 8px 20px rgba(0, 0, 0, 0.25)\":\"0 12px 35px rgba(0, 0, 0, 0.25)\";parent.style.borderRadius=\"8px\";parent.style.cursor=\"zoom-in\";// Agregar evento de zoom\nparent.onclick=handleZoomClick;}});}else{componentElement.style.boxShadow=isMobile?\"0 8px 20px rgba(0, 0, 0, 0.25)\":\"0 12px 35px rgba(0, 0, 0, 0.25)\";componentElement.style.borderRadius=\"8px\";componentElement.style.cursor=\"zoom-in\";componentElement.onclick=handleZoomClick;}// Remover sombras fantasma SOLO dentro de nuestro contenedor\nconst elementsWithinContainer=container.querySelectorAll(\"*\");elementsWithinContainer.forEach(el=>{// Si no es un padre directo de una imagen pero tiene sombra, quitarla\nconst isParentOfImage=Array.from(images).some(img=>img.parentElement===el);const hasShadowStyle=el.style.boxShadow&&el.style.boxShadow!==\"none\";if(hasShadowStyle&&!isParentOfImage&&el!==componentElement){el.style.boxShadow=\"none\";}});};// Ejecutar optimización inicial\nsetTimeout(optimizeImageDisplay,100);// Volver a aplicar al cambiar tamaño de ventana\nconst handleResize=()=>{// Actualizar detección de móvil\nconst newIsMobile=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)||window.innerWidth<768;// Solo si cambió el tipo de dispositivo\nif(newIsMobile!==isMobile){optimizeImageDisplay();}};window.addEventListener(\"resize\",handleResize);// Limpieza\nreturn()=>{window.removeEventListener(\"resize\",handleResize);};},[]);// Detectar tipo de dispositivo para el render inicial\nconst isMobileInitial=typeof window!==\"undefined\"&&(/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)||window.innerWidth<768);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:isMobileInitial?\"90%\":\"95%\",maxWidth:isMobileInitial?\"500px\":\"1000px\",height:\"auto\",display:\"block\",overflow:\"visible\",margin:\"0 auto\",padding:\"0\",position:\"relative\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}// Mantenemos las otras funciones sin cambios\nexport function withRotate(Component){return props=>{return /*#__PURE__*/_jsx(Component,{...props,animate:{rotate:90},transition:{duration:2}});};}export function withHover(Component){return props=>{return /*#__PURE__*/_jsx(Component,{...props,whileHover:{scale:1.05}});};}export function withRandomColor(Component){return props=>{const[store,setStore]=useStore();return /*#__PURE__*/_jsx(Component,{...props,animate:{background:store.background},onClick:()=>{setStore({background:randomColor()});}});};}function randomColor(){return`hsl(${Math.random()*360}, 100%, 50%)`;}export function compose(...funcs){if(funcs.length===0){return arg=>arg;}if(funcs.length===1){return funcs[0];}return funcs.reduce((a,b)=>(...args)=>a(b(...args)));}\nexport const __FramerMetadata__ = {\"exports\":{\"withHover\":{\"type\":\"reactHoc\",\"name\":\"withHover\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRandomColor\":{\"type\":\"reactHoc\",\"name\":\"withRandomColor\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"compose\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withIndividualZoom\":{\"type\":\"reactHoc\",\"name\":\"withIndividualZoom\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withRotate\":{\"type\":\"reactHoc\",\"name\":\"withRotate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Examples.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import*as ReactDOM from\"react-dom\";import{motion}from\"framer-motion\";// Estado del video\nexport function VideoButtonOverride(){const[isOpen,setIsOpen]=React.useState(false);const[videoUrl,setVideoUrl]=React.useState(\"\");const[isPlaylist,setIsPlaylist]=React.useState(false);const[playlistId,setPlaylistId]=React.useState(\"\");React.useEffect(()=>{const root=document.getElementById(\"video-overlay-root\")||document.createElement(\"div\");root.id=\"video-overlay-root\";document.body.appendChild(root);const render=()=>ReactDOM.render(/*#__PURE__*/_jsx(VideoOverlay,{isOpen:isOpen,videoUrl:videoUrl,onClose:()=>setIsOpen(false),isPlaylist:isPlaylist,playlistId:playlistId,setVideoUrl:setVideoUrl}),root);render();return()=>{ReactDOM.unmountComponentAtNode(root);};},[isOpen,videoUrl,isPlaylist,playlistId]);return{onClick:event=>{event.preventDefault();const link=event.currentTarget.getAttribute(\"href\");if(link&&link.includes(\"youtube.com\")){let videoId=\"\";let listParam=\"\";if(link.includes(\"watch?v=\")){videoId=link.split(\"v=\")[1].split(\"&\")[0];}else if(link.includes(\"youtu.be/\")){videoId=link.split(\"youtu.be/\")[1].split(\"?\")[0];}let embedUrl=`https://www.youtube.com/embed/${videoId}?enablejsapi=1`;// Si es una playlist, asegúrate de extraer el parámetro \"list\"\nif(link.includes(\"list=\")){listParam=link.split(\"list=\")[1].split(\"&\")[0];embedUrl+=`&listType=playlist&list=${listParam}`;setIsPlaylist(true);setPlaylistId(listParam);}else{setIsPlaylist(false);}setVideoUrl(embedUrl);console.log(\"Abriendo video:\",embedUrl);setIsOpen(true);}else{console.log(\"No se encontr\\xf3 un enlace de YouTube v\\xe1lido\");}}};}function VideoOverlay({isOpen,videoUrl,onClose,isPlaylist,playlistId,setVideoUrl}){const iframeRef=React.useRef(null);React.useEffect(()=>{const handleEsc=event=>{if(event.key===\"Escape\"){onClose();}};window.addEventListener(\"keydown\",handleEsc);const handleMessage=event=>{if(event.origin.includes(\"youtube.com\")){if(event.data===\"next\"){handleNextVideo();}else if(event.data===\"previous\"){handlePreviousVideo();}}};window.addEventListener(\"message\",handleMessage);return()=>{window.removeEventListener(\"keydown\",handleEsc);window.removeEventListener(\"message\",handleMessage);};},[onClose]);const handleNextVideo=()=>{if(isPlaylist){iframeRef.current.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"nextVideo\",\"args\":\"\"}',\"*\");}};const handlePreviousVideo=()=>{if(isPlaylist){iframeRef.current.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"previousVideo\",\"args\":\"\"}',\"*\");}};if(!isOpen)return null;return /*#__PURE__*/_jsx(motion.div,{style:overlayStyle,onClick:onClose,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},children:/*#__PURE__*/_jsxs(motion.div,{style:videoWrapperStyle,initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.8,opacity:0},onClick:e=>e.stopPropagation(),children:[/*#__PURE__*/_jsx(\"iframe\",{ref:iframeRef,width:\"100%\",height:\"100%\",src:videoUrl,frameBorder:\"0\",allow:\"autoplay; encrypted-media\",allowFullScreen:true}),/*#__PURE__*/_jsx(\"button\",{onClick:onClose,style:closeButtonStyle,children:\"\\xd7\"}),isPlaylist&&/*#__PURE__*/_jsxs(\"div\",{style:playlistControlsStyle,children:[/*#__PURE__*/_jsx(\"button\",{style:{...arrowButtonStyle,left:\"10px\"},onClick:handlePreviousVideo,children:\"❮\"}),/*#__PURE__*/_jsx(\"button\",{style:{...arrowButtonStyle,right:\"10px\"},onClick:handleNextVideo,children:\"❯\"})]})]})});}const overlayStyle={position:\"fixed\",top:0,left:0,right:0,bottom:0,backgroundColor:\"rgba(0, 0, 0, 0.7)\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",zIndex:9999};const videoWrapperStyle={position:\"relative\",width:\"80vw\",height:\"80vh\",maxWidth:\"1200px\",maxHeight:\"675px\",backgroundColor:\"black\"};const closeButtonStyle={position:\"absolute\",top:\"-40px\",right:\"-40px\",width:\"30px\",height:\"30px\",backgroundColor:\"white\",color:\"black\",borderRadius:\"50%\",border:\"none\",fontSize:\"20px\",cursor:\"pointer\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",boxShadow:\"0 2px 5px rgba(0,0,0,0.2)\"};const playlistControlsStyle={position:\"absolute\",top:\"50%\",transform:\"translateY(-50%)\",width:\"100%\",display:\"flex\",justifyContent:\"space-between\",pointerEvents:\"none\"};const arrowButtonStyle={position:\"absolute\",backgroundColor:\"rgba(0,0,0,0.7)\",color:\"#fff\",border:\"none\",fontSize:\"30px\",cursor:\"pointer\",padding:\"10px\",pointerEvents:\"auto\"};import{useContext as __legacyOverrideHOC_useContext}from\"react\";import{DataObserverContext as __legacyOverrideHOC_DataObserverContext}from\"framer\";export function withVideoButtonOverride(C){return props=>{__legacyOverrideHOC_useContext(__legacyOverrideHOC_DataObserverContext);return _jsx(C,{...props,...VideoButtonOverride(props)});};}withVideoButtonOverride.displayName=\"VideoButtonOverride\";\nexport const __FramerMetadata__ = {\"exports\":{\"withVideoButtonOverride\":{\"type\":\"reactHoc\",\"name\":\"withVideoButtonOverride\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"VideoButtonOverride\":{\"type\":\"override\",\"name\":\"VideoButtonOverride\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./VideoButtonSystem.map"],"mappings":"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"}