{"version":3,"file":"engine.CRSESidT.mjs","names":["useState","useMemo","useCallback","useRef"],"sources":["https:/framerusercontent.com/modules/kulEMMb6cPzlO6SNUIQZ/9yY604xiM78QbLhBX2ui/config.js","https:/framerusercontent.com/modules/FnNxVdXDZ1JlK44mtmsQ/43y1EAQwJy6Z26DNombB/engine.js"],"sourcesContent":["import{ControlType}from\"framer\";export const SHARE_PATH=\"/api/share\";export const STACK_BREAKPOINT=420;export const PACKAGE_STACK_BREAKPOINT=560;export const PACKAGE_COVER=280;export const SINGLE_MAX_TIME=15;export const PLACEHOLDER_SUBTITLE=\"youPRAY\";export const DEMO_TOKEN=\"eyJpZCI6IjRlZjM3MGFhLTU1MmItNGJjYi1hNWFkLWEzZjhjZmM1YmRiMSIsInRpbWVzdGFtcCI6bnVsbH0=\";// const testTokens = [\n//   'eyJpZCI6IjAxOWYxZDEzLWE4ZjMtNzg1Ny1iYmM4LTFhMjQ4NTEzNzYzNSIsInRpbWVzdGFtcCI6bnVsbH0=',\n//   'IJur5fHr8egUOxXsd9a1Xjsn44HsVmedtzh1Z6He6RKr_Kjhv_uvgrcdO3xwkAcEcSd6YLUvfZsrV2GSApB-2qdWDotNbmF6GMknSBozv8ADvw9CSVtUSS_ZCMKXGQtg',\n//   'KEcwfZg5C4wMAj6K5NknOjIMryIqAxcclErzjWWFm-cchu0TNQK0Yd2snF1UUFflnKYzn2aSLdQw-ac3fRb-F4_N92cdwDCpyVUt1eMlYFAJc4xuA8q0UhE4MuEcLCDG',\n// ]\n// export const TEST_TOKEN = testTokens[1]\nexport const DEFAULTS={apiBaseUrl:\"https://staging.contenu.youpray.fr\",token:\"\",accentColor:\"rgb(13, 10, 51)\",trackColor:\"rgb(214, 214, 220)\",trackBackColor:\"rgba(247, 247, 247, 0)\",titleColor:\"rgb(20, 18, 45)\",subtitleColor:\"rgb(128, 128, 128)\",timeColor:\"rgb(128, 128, 128)\",cardBackground:\"rgb(255, 255, 255)\",coverSize:110,radius:20,showCover:true,showTitle:true,showSubtitle:true,fontFamily:'\"Lato\", system-ui, -apple-system, sans-serif'};export const MESSAGES={missingToken:\"Votre lien ne semble pas valide\",invalidToken:\"Ce lien ne semble pas valide\",notFound:\"Ce partage n'est plus disponible.\",fetchFailed:\"Une erreur s'est produite lors de la r\\xe9ception des donn\\xe9es.\",emptyContent:\"Aucune playlist trouv\\xe9e\",playbackFailed:\"Une erreur s'est produite lors de la lecture.\",demoFallback:\"On vous propose d'\\xe9couter\"};export const propertyControls={apiBaseUrl:{type:ControlType.String,title:\"API\",defaultValue:DEFAULTS.apiBaseUrl,placeholder:\"https://staging.contenu.youpray.fr\"},token:{type:ControlType.String,title:\"Token\",defaultValue:\"\",placeholder:\"Vide = URL ou token par d\\xe9faut\",description:\"Token de partage. Vide = lu dans l'URL, sinon le token par d\\xe9faut.\"},accentColor:{type:ControlType.Color,title:\"Accent\",defaultValue:DEFAULTS.accentColor},trackColor:{type:ControlType.Color,title:\"Segments\",defaultValue:DEFAULTS.trackColor},trackBackColor:{type:ControlType.Color,title:\"Fond barre\",defaultValue:DEFAULTS.trackBackColor},titleColor:{type:ControlType.Color,title:\"Titre\",defaultValue:DEFAULTS.titleColor},subtitleColor:{type:ControlType.Color,title:\"Sous-titre\",defaultValue:DEFAULTS.subtitleColor},timeColor:{type:ControlType.Color,title:\"Temps\",defaultValue:DEFAULTS.timeColor},cardBackground:{type:ControlType.Color,title:\"Fond carte\",defaultValue:DEFAULTS.cardBackground},coverSize:{type:ControlType.Number,title:\"Cover\",defaultValue:DEFAULTS.coverSize,min:0,max:240,step:4,displayStepper:true},radius:{type:ControlType.Number,title:\"Arrondi\",defaultValue:DEFAULTS.radius,min:0,max:48,step:1},showCover:{type:ControlType.Boolean,title:\"Cover\",defaultValue:true},showTitle:{type:ControlType.Boolean,title:\"Titre\",defaultValue:true},showSubtitle:{type:ControlType.Boolean,title:\"Sous-titre\",defaultValue:true},fontFamily:{type:ControlType.String,title:\"Police\",defaultValue:DEFAULTS.fontFamily}};\nexport const __FramerMetadata__ = {\"exports\":{\"DEFAULTS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"STACK_BREAKPOINT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PLACEHOLDER_SUBTITLE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PACKAGE_STACK_BREAKPOINT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SINGLE_MAX_TIME\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"propertyControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MESSAGES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PACKAGE_COVER\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SHARE_PATH\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEMO_TOKEN\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./config.map","/**\n * Logique partagée du player de partage : format, normalisation de l'offre,\n * découpage en segments, lecture du token et moteur audio.\n *\n * Extrait de Player.tsx pour être réutilisé par PartagePage.tsx sans\n * dupliquer le moteur. Le comportement est identique à l'original, à une\n * correction près, signalée sur getTimeCodeFromNum.\n */import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";import{MESSAGES,PLACEHOLDER_SUBTITLE,SHARE_PATH,SINGLE_MAX_TIME}from\"https://framerusercontent.com/modules/kulEMMb6cPzlO6SNUIQZ/9yY604xiM78QbLhBX2ui/config.js\";/* ================================================================== format *//**\n * \"9:05\" sous l'heure, \"01:03:59\" au-delà.\n *\n * Correction par rapport à la version d'origine dans Player.tsx : les minutes\n * n'y étaient pas complétées à deux chiffres au-delà d'une heure, ce qui\n * affichait \"01:3:59\" sur un contenu de plus d'une heure.\n */export function getTimeCodeFromNum(num){if(!Number.isFinite(num)||num<0)num=0;let seconds=Math.floor(num);let minutes=Math.floor(seconds/60);seconds-=minutes*60;const hours=Math.floor(minutes/60);minutes-=hours*60;const ss=String(seconds).padStart(2,\"0\");if(hours===0)return`${minutes}:${ss}`;return`${String(hours).padStart(2,\"0\")}:${String(minutes).padStart(2,\"0\")}:${ss}`;}export function htmlToPlainText(html){return html.replace(/<br\\s*\\/?>/gi,\"\\n\").replace(/<\\/(p|div|li|h[1-6])>/gi,\"\\n\").replace(/<li[^>]*>/gi,\"• \").replace(/<[^>]+>/g,\"\").replace(/&nbsp;/g,\" \").replace(/&amp;/g,\"&\").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&quot;/g,'\"').replace(/&#39;/g,\"'\").replace(/[ \\t]+\\n/g,\"\\n\").replace(/\\n{3,}/g,\"\\n\\n\").trim();}/** \"1 h 12\" / \"45 min\" — durée longue lisible, pour un total de playlist. */export function formatLongDuration(totalSeconds){if(!Number.isFinite(totalSeconds)||totalSeconds<=0)return null;const minutes=Math.round(totalSeconds/60);if(minutes<60)return`${minutes} min`;const hours=Math.floor(minutes/60);const rest=minutes%60;return rest===0?`${hours} h`:`${hours} h ${String(rest).padStart(2,\"0\")}`;}/* ================================================================ normalize */export function isTrack(content){return content.type===\"audio\"||content.type===\"combined-audio\";}export function tracksOf(product){const playlist=product.content.find(c=>c.type===\"playlist\");if(playlist&&playlist.type===\"playlist\")return playlist.tracks??[];return product.content.filter(isTrack);}export function toSegments(tracks){const segments=[];for(const track of tracks){const title=track.title??\"\";const files=track.type===\"combined-audio\"?track.fileIds.map((url,i)=>({url,duration:track.durationsInSecond?.[i]})):[{url:track.fileId,duration:track.durationInSecond}];for(const file of files){if(!file.url||!file.duration)continue;segments.push({url:file.url,duration:Number(file.duration),title});}}return segments;}export function coverOf(product,tracks){const playlist=product.content.find(c=>c.type===\"playlist\");if(playlist&&playlist.type===\"playlist\"&&playlist.image)return playlist.image;return tracks[0]?.thumb||product.layout?.headerImage||null;}export function normalizeOffer(offer){const product=offer.product;const tracks=tracksOf(product);const segments=toSegments(tracks);if(segments.length===0)return null;const subtitle=product.subtitle&&product.subtitle!==PLACEHOLDER_SUBTITLE?product.subtitle:null;return{title:product.title,subtitle,cover:coverOf(product,tracks),segments};}export function displaySubtitle(value){if(!value||value.trim().toLowerCase()===PLACEHOLDER_SUBTITLE.toLowerCase())return null;return value;}export function packageViewOf(offer){const pkg=offer.package;if(!pkg)return null;const text=pkg.text?.trim()?pkg.text:null;return{title:pkg.title,subtitle:displaySubtitle(pkg.subtitle),text,cover:pkg.headerImage||null,products:(pkg.products??[]).map(product=>({...product,subtitle:displaySubtitle(product.subtitle),image:product.image||\"\"}))};}/* ================================================================ segments */export function mergeShortSegments(durations){const merged=[...durations];for(let i=0;i<merged.length;i++){if(merged[i]>SINGLE_MAX_TIME)continue;if(merged[i+1]!==undefined){merged[i+1]+=merged[i];merged.splice(i,1);i--;}else if(merged[i-1]!==undefined){merged[i-1]+=merged[i];merged.splice(i,1);i--;}}return merged;}export function totalDuration(segments){return segments.reduce((sum,s)=>sum+s.duration,0);}export function offsetOf(segments,index){let offset=0;for(let i=0;i<index&&i<segments.length;i++)offset+=segments[i].duration;return offset;}export function locate(segments,globalTime){if(segments.length===0)return{index:0,localTime:0};const total=totalDuration(segments);const clamped=Math.min(Math.max(globalTime,0),total);let offset=0;for(let i=0;i<segments.length;i++){const end=offset+segments[i].duration;if(clamped<end||i===segments.length-1){return{index:i,localTime:Math.max(0,clamped-offset)};}offset=end;}return{index:segments.length-1,localTime:0};}/* ============================================================== token utils */export function rawParam(query,name){for(const pair of query.split(\"&\")){const eq=pair.indexOf(\"=\");if(eq===-1)continue;if(pair.slice(0,eq)!==name)continue;const value=pair.slice(eq+1);try{return decodeURIComponent(value);}catch{return value;}}return null;}export function readRawToken(search){const query=search.replace(/^\\?/,\"\");if(!query)return null;const named=rawParam(query,\"token\")??rawParam(query,\"link\");if(named)return named;const bare=query.split(\"&\")[0];if(!bare)return null;if(bare.replace(/=+$/,\"\").includes(\"=\"))return null;return bare;}export function decodeToken(raw){let normalized;try{normalized=decodeURIComponent(raw);}catch{normalized=raw;}if(!normalized.trim())return null;try{const base64=normalized.replace(/-/g,\"+\").replace(/_/g,\"/\");const json=JSON.parse(atob(base64));if(json?.id)return{raw:normalized,id:json.id,timestamp:json.timestamp??null};}catch{/* opaque token */}if(/^[A-Za-z0-9_-]+$/.test(normalized)){return{raw:normalized,id:normalized,timestamp:null};}return null;}/* =================================================================== hooks */export function useLocationSearch(){const[search,setSearch]=useState(()=>typeof window!==\"undefined\"?window.location.search:\"\");useEffect(()=>{if(typeof window===\"undefined\")return;const sync=()=>setSearch(window.location.search);window.addEventListener(\"popstate\",sync);return()=>window.removeEventListener(\"popstate\",sync);},[]);return search;}export function useShareToken(override,fallback){const search=useLocationSearch();return useMemo(()=>{const fromUrl=readRawToken(search);const fromOverride=override?.trim()||null;const isDefault=!fromUrl&&!fromOverride;const candidate=fromOverride||fromUrl||fallback?.trim();if(!candidate)return{status:\"missing\"};const token=decodeToken(candidate);return token?{status:\"ok\",token,isDefault}:{status:\"invalid\"};},[override,search,fallback]);}export function useShareOffer(apiBaseUrl,rawToken){const[state,setState]=useState({status:\"idle\"});const[nonce,setNonce]=useState(0);const refetch=useCallback(()=>setNonce(n=>n+1),[]);useEffect(()=>{if(!rawToken){setState({status:\"idle\"});return;}const controller=new AbortController;setState({status:\"loading\"});const base=apiBaseUrl.replace(/\\/+$/,\"\");const url=`${base}${SHARE_PATH}?token=${encodeURIComponent(rawToken)}`;fetch(url,{signal:controller.signal,headers:{Accept:\"application/json\"}}).then(async response=>{if(!response.ok){throw new Error(response.status===404?MESSAGES.notFound:MESSAGES.fetchFailed);}return await response.json();}).then(offer=>{if(controller.signal.aborted)return;setState({status:\"success\",offer});}).catch(error=>{if(controller.signal.aborted)return;const message=error instanceof Error?error.message:MESSAGES.fetchFailed;setState({status:\"error\",message:message===MESSAGES.notFound?MESSAGES.notFound:MESSAGES.fetchFailed});});return()=>controller.abort();},[apiBaseUrl,rawToken,nonce]);return{...state,refetch};}export function useContainerWidth(ref){const[width,setWidth]=useState(0);useEffect(()=>{const element=ref.current;if(!element)return;if(typeof ResizeObserver===\"undefined\"){setWidth(element.getBoundingClientRect().width);return;}const observer=new ResizeObserver(entries=>{const entry=entries[0];if(entry)setWidth(entry.contentRect.width);});observer.observe(element);setWidth(element.getBoundingClientRect().width);return()=>observer.disconnect();},[ref]);return width;}export function useAudioEngine(segments,onExpired){const[index,setIndex]=useState(0);const[isPlaying,setIsPlaying]=useState(false);const[isReady,setIsReady]=useState(false);const[globalTime,setGlobalTime]=useState(0);const[error,setError]=useState(null);const audioRef=useRef(null);const prefetchRef=useRef(null);const pendingSeekRef=useRef(null);const shouldPlayRef=useRef(false);const retriedRef=useRef(false);const rafRef=useRef(null);const segmentsRef=useRef(segments);segmentsRef.current=segments;const indexRef=useRef(index);indexRef.current=index;const totalDur=useMemo(()=>totalDuration(segments),[segments]);const contentKey=useMemo(()=>segments.map(s=>s.duration).join(\"|\"),[segments]);const contentKeyRef=useRef(contentKey);useEffect(()=>{const audio=new Audio;audio.preload=\"metadata\";audioRef.current=audio;const prefetch=new Audio;prefetch.preload=\"auto\";prefetchRef.current=prefetch;const onLoadedMetadata=()=>{setIsReady(true);if(pendingSeekRef.current!==null){audio.currentTime=pendingSeekRef.current;pendingSeekRef.current=null;}if(shouldPlayRef.current)void audio.play().catch(()=>setIsPlaying(false));};const onTimeUpdate=()=>{const offset=offsetOf(segmentsRef.current,indexRef.current);setGlobalTime(offset+audio.currentTime);};const onEnded=()=>{const next=indexRef.current+1;if(next<segmentsRef.current.length){shouldPlayRef.current=true;setIndex(next);return;}shouldPlayRef.current=false;setIsPlaying(false);setIndex(0);setGlobalTime(0);pendingSeekRef.current=0;};const onError=()=>{if(!retriedRef.current&&onExpired){retriedRef.current=true;onExpired();return;}shouldPlayRef.current=false;setIsPlaying(false);setError(MESSAGES.playbackFailed);};audio.addEventListener(\"loadedmetadata\",onLoadedMetadata);audio.addEventListener(\"timeupdate\",onTimeUpdate);audio.addEventListener(\"ended\",onEnded);audio.addEventListener(\"error\",onError);return()=>{audio.removeEventListener(\"loadedmetadata\",onLoadedMetadata);audio.removeEventListener(\"timeupdate\",onTimeUpdate);audio.removeEventListener(\"ended\",onEnded);audio.removeEventListener(\"error\",onError);audio.pause();audio.src=\"\";prefetch.src=\"\";audioRef.current=null;prefetchRef.current=null;};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);useEffect(()=>{const sameContent=contentKeyRef.current===contentKey;contentKeyRef.current=contentKey;if(sameContent){pendingSeekRef.current=globalTime-offsetOf(segments,indexRef.current);retriedRef.current=false;return;}shouldPlayRef.current=false;retriedRef.current=false;pendingSeekRef.current=null;setIndex(0);setGlobalTime(0);setIsPlaying(false);setIsReady(false);// eslint-disable-next-line react-hooks/exhaustive-deps\n},[contentKey]);useEffect(()=>{const audio=audioRef.current;if(!audio)return;const segment=segments[index];if(!segment)return;if(audio.src!==segment.url){setIsReady(false);audio.src=segment.url;audio.load();}else if(pendingSeekRef.current!==null&&audio.readyState>=1){audio.currentTime=pendingSeekRef.current;pendingSeekRef.current=null;}const next=segments[index+1];if(prefetchRef.current)prefetchRef.current.src=next?next.url:\"\";},[segments,index]);useEffect(()=>{if(!isPlaying){if(rafRef.current!==null)cancelAnimationFrame(rafRef.current);rafRef.current=null;return;}const tick=()=>{const audio=audioRef.current;if(audio){const offset=offsetOf(segmentsRef.current,indexRef.current);setGlobalTime(offset+audio.currentTime);}rafRef.current=requestAnimationFrame(tick);};rafRef.current=requestAnimationFrame(tick);return()=>{if(rafRef.current!==null)cancelAnimationFrame(rafRef.current);rafRef.current=null;};},[isPlaying]);const toggle=useCallback(()=>{const audio=audioRef.current;if(!audio||segmentsRef.current.length===0)return;if(isPlaying){shouldPlayRef.current=false;audio.pause();setIsPlaying(false);return;}setError(null);shouldPlayRef.current=true;setIsPlaying(true);void audio.play().catch(()=>{shouldPlayRef.current=false;setIsPlaying(false);});},[isPlaying]);const seekTo=useCallback(target=>{const audio=audioRef.current;const list=segmentsRef.current;if(!audio||list.length===0)return;const{index:nextIndex,localTime}=locate(list,target);setGlobalTime(offsetOf(list,nextIndex)+localTime);if(nextIndex===indexRef.current){if(audio.readyState>=1)audio.currentTime=localTime;else pendingSeekRef.current=localTime;return;}pendingSeekRef.current=localTime;setIndex(nextIndex);},[]);return{isPlaying,isReady,globalTime,totalDuration:totalDur,currentTitle:segments[index]?.title??\"\",error,toggle,seekTo};}\nexport const __FramerMetadata__ = {\"exports\":{\"locate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"coverOf\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displaySubtitle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"tracksOf\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"htmlToPlainText\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"offsetOf\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readRawToken\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getTimeCodeFromNum\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useShareToken\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useLocationSearch\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toSegments\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isTrack\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"decodeToken\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatLongDuration\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useContainerWidth\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"rawParam\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"packageViewOf\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAudioEngine\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"normalizeOffer\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useShareOffer\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"mergeShortSegments\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"totalDuration\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}