{"version":3,"file":"Medium_Blog_Posts.D-JQaVL7.mjs","names":["useState","useMemo","p"],"sources":["https:/framerusercontent.com/modules/B0isESbCSWTrNQQ8CIIW/EqowYRrgQ5R3jWP7bXYp/Medium_Blog_Posts.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useMemo,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";const MEDIUM_RSS=\"https://medium.com/feed/@sunilsingh-42118\";const RSS2JSON=\"https://api.rss2json.com/v1/api.json?rss_url=https://medium.com/feed/@sunilsingh-42118\";const CACHE_KEY=\"medium_posts_cache_v2\";export default function Medium_Blog_Posts(props){const{postCount,columnsDesktop,columnsTablet,columnsMobile,gap,radius,openInNewTab,showRefresh,refreshText,showMoreButton,buttonText,mediumProfileUrl}=props;const[posts,setPosts]=useState([]);const[error,setError]=useState(null);const[loading,setLoading]=useState(true);const[refreshKey,setRefreshKey]=useState(0);useEffect(()=>{let cancelled=false;async function load(){setLoading(true);setError(null);try{// 1) Prefer live RSS (so the newest post appears immediately)\nconst live=await fetchMediumRssViaProxy(postCount);if(!cancelled){setPosts(live);safeSetCache(live);}}catch(rssErr){try{// 2) Fallback to rss2json if proxy is flaky\nconst data=await fetchWithRetry(`${RSS2JSON}&_=${Date.now()}`,2);const parsed=(data.items||[]).slice(0,postCount).map(item=>({guid:item.guid||item.link||item.title,title:item.title||\"\",link:item.link||\"\",pubDate:item.pubDate||\"\",description:item.description||\"\"}));if(!cancelled){setPosts(parsed);safeSetCache(parsed);}}catch(jsonErr){// 3) Final fallback: last known good cache\nconst cached=safeGetCache();if(cached&&!cancelled){setPosts(cached);}else if(!cancelled){setError(\"Couldn’t load posts.\");}}}finally{if(!cancelled)setLoading(false);}}load();return()=>{cancelled=true;};},[postCount,refreshKey]);const items=useMemo(()=>{return posts.map(p=>{const excerpt=stripHtml(p.description).replace(/\\s+/g,\" \").trim();const img=extractFirstImage(p.description);return{...p,excerpt,image:img};});},[posts]);if(loading)return /*#__PURE__*/_jsx(\"div\",{style:styles.message,children:\"Loading latest posts…\"});if(error)return /*#__PURE__*/_jsx(\"div\",{style:styles.message,children:error});return /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\"},children:[/*#__PURE__*/_jsx(\"style\",{children:getCss(columnsDesktop,columnsTablet,columnsMobile)}),(showRefresh||showMoreButton)&&/*#__PURE__*/_jsxs(\"div\",{className:\"topBar\",children:[showRefresh&&/*#__PURE__*/_jsx(\"button\",{className:\"refreshBtn\",onClick:()=>setRefreshKey(Date.now()),type:\"button\",children:refreshText}),showMoreButton&&/*#__PURE__*/_jsx(\"a\",{className:\"moreBtn\",href:mediumProfileUrl,target:\"_blank\",rel:\"noreferrer\",children:buttonText})]}),/*#__PURE__*/_jsx(\"div\",{className:\"mediumGrid\",style:{gap},children:items.map(post=>{const target=openInNewTab?\"_blank\":\"_self\";const rel=openInNewTab?\"noreferrer\":undefined;return /*#__PURE__*/_jsxs(\"a\",{href:post.link,target:target,rel:rel,className:\"card\",style:{borderRadius:radius},children:[/*#__PURE__*/_jsx(\"div\",{className:\"imageWrap\",style:{borderTopLeftRadius:radius,borderTopRightRadius:radius},children:post.image?/*#__PURE__*/_jsx(\"img\",{className:\"image\",src:post.image,alt:\"\",loading:\"lazy\"}):/*#__PURE__*/_jsx(\"div\",{className:\"imageFallback\"})}),/*#__PURE__*/_jsxs(\"div\",{className:\"content\",children:[/*#__PURE__*/_jsx(\"div\",{className:\"meta\",children:formatDate(post.pubDate)}),/*#__PURE__*/_jsx(\"div\",{className:\"title\",children:post.title}),/*#__PURE__*/_jsxs(\"div\",{className:\"excerpt\",children:[post.excerpt.slice(0,140),post.excerpt.length>140?\"…\":\"\"]}),/*#__PURE__*/_jsx(\"div\",{className:\"cta\",children:\"Read article →\"})]})]},post.guid);})})]});}/**\n * Fetch Medium RSS via a free proxy (AllOrigins raw),\n * parse XML locally, sort by newest, and return the latest N posts.\n *\n * We retry because free proxies can be flaky.\n */async function fetchMediumRssViaProxy(limit){const proxyUrl=\"https://api.allorigins.win/raw?url=\"+encodeURIComponent(MEDIUM_RSS);const xmlText=await fetchTextWithRetry(proxyUrl,2);const parser=new DOMParser;const xml=parser.parseFromString(xmlText,\"text/xml\");const items=Array.from(xml.querySelectorAll(\"item\")).map(item=>{const title=item.querySelector(\"title\")?.textContent??\"\";const link=item.querySelector(\"link\")?.textContent??\"\";const pubDate=item.querySelector(\"pubDate\")?.textContent??\"\";const guid=item.querySelector(\"guid\")?.textContent??link??title;const contentEncoded=item.getElementsByTagName(\"content:encoded\")[0]?.textContent??\"\";const description=contentEncoded||item.querySelector(\"description\")?.textContent||\"\";return{guid,title,link,pubDate,description};});// Sort newest first (extra safety if proxy / parsing changes order)\nitems.sort((a,b)=>{const da=new Date(a.pubDate).getTime()||0;const db=new Date(b.pubDate).getTime()||0;return db-da;});return items.slice(0,limit);}async function fetchTextWithRetry(url,retries=2){let lastErr;for(let i=0;i<=retries;i++){try{const res=await fetch(`${url}&_=${Date.now()}`,{cache:\"no-store\"});if(!res.ok)throw new Error(\"Bad response\");return await res.text();}catch(err){lastErr=err;await new Promise(r=>setTimeout(r,450*(i+1)));}}throw lastErr;}async function fetchWithRetry(url,retries=2){let lastErr;for(let i=0;i<=retries;i++){try{const res=await fetch(url,{cache:\"no-store\"});const json=await res.json();if(!res.ok||json.status!==\"ok\"){throw new Error(json?.message||\"Bad response\");}return json;}catch(err){lastErr=err;await new Promise(r=>setTimeout(r,450*(i+1)));}}throw lastErr;}function safeSetCache(data){try{localStorage.setItem(CACHE_KEY,JSON.stringify(data));}catch{}}function safeGetCache(){try{const cached=localStorage.getItem(CACHE_KEY);return cached?JSON.parse(cached):null;}catch{return null;}}function stripHtml(html){if(!html)return\"\";const tmp=document.createElement(\"div\");tmp.innerHTML=html;return tmp.textContent||tmp.innerText||\"\";}function extractFirstImage(html){if(!html)return null;const match=html.match(/<img[^>]+src=\"([^\">]+)\"/i);return match?.[1]??null;}function formatDate(dateString){try{const d=new Date(dateString);return d.toLocaleDateString(undefined,{year:\"numeric\",month:\"short\",day:\"numeric\"});}catch{return\"\";}}function getCss(d,t,m){return`\n    .topBar{\n        display:flex;\n        justify-content:space-between;\n        align-items:center;\n        gap:12px;\n        margin-bottom:16px;\n        width:100%;\n    }\n\n    .refreshBtn{\n        appearance:none;\n        border:none;\n        cursor:pointer;\n        padding:10px 14px;\n        border-radius:999px;\n        font-weight:600;\n        font-size:13px;\n        background: rgba(255,255,255,0.10);\n        color: inherit;\n        border: 1px solid rgba(255,255,255,0.14);\n        transition: transform 200ms ease, background 200ms ease, border-color 200ms ease;\n    }\n    .refreshBtn:hover{\n        transform: translateY(-1px);\n        background: rgba(255,255,255,0.14);\n        border-color: rgba(255,255,255,0.20);\n    }\n\n    .moreBtn{\n        display:inline-block;\n        text-decoration:none;\n        padding:10px 14px;\n        border-radius:999px;\n        font-weight:600;\n        font-size:13px;\n        background: rgba(255,255,255,0.10);\n        color: inherit;\n        border: 1px solid rgba(255,255,255,0.14);\n        transition: transform 200ms ease, background 200ms ease, border-color 200ms ease;\n        white-space:nowrap;\n    }\n    .moreBtn:hover{\n        transform: translateY(-1px);\n        background: rgba(255,255,255,0.14);\n        border-color: rgba(255,255,255,0.20);\n    }\n\n    .mediumGrid {\n        display: grid;\n        grid-template-columns: repeat(${d}, minmax(0, 1fr));\n        width: 100%;\n    }\n\n    @media (max-width: 1024px) {\n        .mediumGrid {\n            grid-template-columns: repeat(${t}, minmax(0, 1fr));\n        }\n        .topBar{ justify-content:flex-start; }\n    }\n\n    @media (max-width: 768px) {\n        .mediumGrid {\n            grid-template-columns: repeat(${m}, minmax(0, 1fr));\n        }\n        .topBar{ flex-direction:column; align-items:stretch; }\n        .refreshBtn, .moreBtn{ text-align:center; width: 100%; }\n    }\n\n    .card {\n        display: block;\n        text-decoration: none;\n        color: inherit;\n        overflow: hidden;\n        background: rgba(255, 255, 255, 0.06);\n        border: 1px solid rgba(255, 255, 255, 0.10);\n        transition: transform 220ms ease, box-shadow 220ms ease, border-color 220ms ease;\n        will-change: transform;\n        box-shadow: 0 10px 30px rgba(0,0,0,0.10);\n        backdrop-filter: blur(6px);\n        -webkit-backdrop-filter: blur(6px);\n    }\n\n    .card:hover {\n        transform: translateY(-6px);\n        border-color: rgba(255,255,255,0.18);\n        box-shadow: 0 18px 48px rgba(0,0,0,0.20);\n    }\n\n    .imageWrap {\n        position: relative;\n        width: 100%;\n        aspect-ratio: 16 / 9;\n        overflow: hidden;\n        background: rgba(255,255,255,0.05);\n    }\n\n    .image {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n        transform: scale(1);\n        transition: transform 320ms ease;\n        display: block;\n    }\n\n    .card:hover .image {\n        transform: scale(1.06);\n    }\n\n    .imageFallback {\n        width: 100%;\n        height: 100%;\n        background: linear-gradient(135deg, rgba(255,255,255,0.08), rgba(255,255,255,0.02));\n    }\n\n    .content {\n        padding: 16px 16px 18px 16px;\n    }\n\n    .meta {\n        font-size: 12px;\n        opacity: 0.70;\n        margin-bottom: 10px;\n        letter-spacing: 0.2px;\n    }\n\n    .title {\n        font-size: 18px;\n        font-weight: 650;\n        line-height: 1.25;\n        margin-bottom: 10px;\n    }\n\n    .excerpt {\n        font-size: 14px;\n        line-height: 1.5;\n        opacity: 0.85;\n        margin-bottom: 14px;\n    }\n\n    .cta {\n        font-size: 13px;\n        font-weight: 600;\n        opacity: 0.85;\n    }\n    `;}const styles={message:{width:\"100%\",opacity:.8,fontSize:14}};addPropertyControls(Medium_Blog_Posts,{postCount:{type:ControlType.Number,title:\"Posts\",defaultValue:6,min:1,max:20},columnsDesktop:{type:ControlType.Number,title:\"Cols (D)\",defaultValue:3,min:1,max:6},columnsTablet:{type:ControlType.Number,title:\"Cols (T)\",defaultValue:2,min:1,max:4},columnsMobile:{type:ControlType.Number,title:\"Cols (M)\",defaultValue:1,min:1,max:2},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:18,min:0,max:60},radius:{type:ControlType.Number,title:\"Radius\",defaultValue:16,min:0,max:40},openInNewTab:{type:ControlType.Boolean,title:\"New tab\",defaultValue:true},showRefresh:{type:ControlType.Boolean,title:\"Refresh\",defaultValue:true},refreshText:{type:ControlType.String,title:\"Refresh text\",defaultValue:\"Refresh\"},showMoreButton:{type:ControlType.Boolean,title:\"Show More\",defaultValue:true},buttonText:{type:ControlType.String,title:\"More text\",defaultValue:\"View all on Medium →\"},mediumProfileUrl:{type:ControlType.String,title:\"Medium URL\",defaultValue:\"https://medium.com/@sunilsingh-42118\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Medium_Blog_Posts\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Medium_Blog_Posts.map"],"mappings":"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"}