PageSourceSearch

https://currents.dev/_next/static/chunks/pages/admin/changelog-3fb338e5ea08bbfc.js

js currents.dev collected 2026-09-25 20:49:27 UTC 29,227 bytes, 27 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4335,7046,7878],{8668:(e,t,r)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/admin/changelog",function(){return r(16697)}])},16697:(e,t,r)=>{"use strict";r.r(t),r.d(t,{__N_SSP:()=>z,default:()=>R});var a=r(37876),i=r(24628),s=r(81936),l=r(50426),n=r(73631),o=r(75516),d=r(14232);let c="/img/og-card.jpg",m="currents.dev";function g({size:e=18}){return(0,a.jsx)("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:e,height:e,borderRadius:"50%",background:"#fff",border:"1px solid rgba(0,0,0,0.08)",overflow:"hidden",flexShrink:0},children:(0,a.jsx)("img",{src:"/favicon.svg",alt:"",width:e-4,height:e-4})})}function h(e){return{display:"-webkit-box",WebkitLineClamp:e,WebkitBoxOrient:"vertical",overflow:"hidden"}}let x='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';function u({d:e,theme:t}){let r="dark"===t,i={bg:r?"#202124":"#ffffff",title:r?"#8ab4f8":"#1a0dab",snippet:r?"#bdc1c6":"#4d5156",sitename:r?"#e8eaed":"#202124",url:r?"#bdc1c6":"#4d5156",date:r?"#9aa0a6":"#70757a"};return(0,a.jsx)("div",{style:{background:i.bg,padding:20,borderRadius:8,fontFamily:"Arial, sans-serif"},children:(0,a.jsxs)("div",{style:{maxWidth:600},children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:4},children:[(0,a.jsx)(g,{size:26}),(0,a.jsxs)("div",{style:{lineHeight:1.3,minWidth:0},children:[(0,a.jsx)("div",{style:{fontSize:14,color:i.sitename,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:m}),(0,a.jsx)("div",{style:{fontSize:12,color:i.url,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:`https://${m} › changelog › ${e.slug}`})]})]}),(0,a.jsx)("div",{style:{fontSize:20,lineHeight:"26px",color:i.title,fontWeight:400,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",cursor:"pointer"},children:e.googleTitle}),(0,a.jsxs)("div",{style:{fontSize:14,lineHeight:"22px",color:i.snippet,marginTop:3,...h(2)},children:[e.datePrefix&&(0,a.jsxs)("span",{style:{color:i.date},children:[e.datePrefix," — "]}),e.description||"Google will show text pulled from the page here when no meta description is set."]})]})})}function p({d:e,theme:t}){return(0,a.jsx)("div",{style:{maxWidth:504,fontFamily:x},children:(0,a.jsxs)("div",{style:{position:"relative",borderRadius:16,overflow:"hidden",border:`1px solid ${"dark"===t?"#2f3336":"#cfd9de"}`},children:[(0,a.jsx)("img",{src:e.heroImage,alt:"",style:{display:"block",width:"100%",aspectRatio:"2 / 1",objectFit:"cover"}}),(0,a.jsx)("span",{style:{position:"absolute",left:12,bottom:12,height:20,display:"inline-flex",alignItems:"center",padding:"0 4px",borderRadius:4,background:"rgba(0,0,0,0.77)",color:"#fff",fontSize:13,lineHeight:1},children:m})]})})}function f({d:e,theme:t}){let r="dark"===t,i={card:r?"#1d2226":"#ffffff",border:r?"rgba(255,255,255,0.13)":"rgba(0,0,0,0.15)",title:r?"rgba(255,255,255,0.9)":"rgba(0,0,0,0.9)",domain:r?"rgba(255,255,255,0.6)":"rgba(0,0,0,0.6)"};return(0,a.jsx)("div",{style:{maxWidth:552,fontFamily:x},children:(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:16,padding:16,borderRadius:8,border:`1px solid ${i.border}`,background:i.card},children:[(0,a.jsx)("div",{style:{width:128,height:116,flexShrink:0,borderRadius:6,overflow:"hidden",background:r?"#111417":"#f3f2ef"},children:(0,a.jsx)("img",{src:e.ogImage,alt:"",style:{display:"block",width:"100%",height:"100%",objectFit:"cover"}})}),(0,a.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,a.jsx)("div",{style:{fontSize:16,fontWeight:600,lineHeight:"20px",color:i.title,...h(2)},children:e.title}),(0,a.jsx)("div",{style:{fontSize:14,fontWeight:400,lineHeight:"18px",color:i.domain,marginTop:4},children:m})]})]})})}function b({d:e,theme:t}){let r="dark"===t,i={card:r?"#0e1113":"#ffffff",titleText:r?"#eef1f3":"#181c1f",meta:r?"#b7cad4":"#333d42",muted:r?"#8ba2ad":"#5c6c74",thumbBorder:r?"rgba(255,255,255,0.098)":"rgba(0,0,0,0.098)",blue:"#115bca"};return(0,a.jsx)("div",{style:{maxWidth:665,fontFamily:x},children:(0,a.jsx)("div",{style:{background:i.card,borderRadius:16,padding:"12px 16px"},children:(0,a.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr min-content",gap:12,alignItems:"start"},children:[(0,a.jsxs)("div",{style:{minWidth:0},children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:6},children:[(0,a.jsx)(g,{size:20}),(0,a.jsx)("span",{style:{fontSize:12,fontWeight:700,color:i.meta},children:"r/PlaywrightTest"}),(0,a.jsx)("span",{style:{fontSize:12,fontWeight:400,color:i.muted},children:"• 2h ago"})]}),(0,a.jsx)("div",{style:{fontSize:18,fontWeight:600,lineHeight:"24px",color:i.titleText,...h(3)},children:e.title}),(0,a.jsx)("div",{style:{fontSize:14,fontWeight:600,color:i.blue,marginTop:6,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.url.replace(/^https:\/\//,"")})]}),(0,a.jsx)("div",{style:{width:128,height:98,borderRadius:8,overflow:"hidden",border:`1px solid ${i.thumbBorder}`,flexShrink:0},children:(0,a.jsx)("img",{src:e.ogImage,alt:"",style:{width:"100%",height:"100%",objectFit:"cover"}})})]})})})}let y={google:{light:"#ffffff",dark:"#202124"},x:{light:"#ffffff",dark:"#15202b"},linkedin:{light:"#f4f2ee",dark:"#1b1f23"},reddit:{light:"#dae0e6",dark:"#030303"}};function v({label:e,hint:t,platform:r,theme:i,children:s}){return(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-2 flex items-baseline gap-2",children:[(0,a.jsx)("h3",{className:"font-poppins text-sm font-medium text-dark-700",children:e}),(0,a.jsx)("span",{className:"font-inter text-xs text-dark-500",children:t})]}),(0,a.jsx)("div",{style:{background:y[r][i],borderRadius:12,padding:20},className:"border border-dark-100",children:s})]})}function j(e){var t;let r,i,[s,g]=(0,d.useState)("dark"),h=function({title:e,description:t,date:r,slug:a,heroImageSrc:i,ogImageSrc:s}){let d=[e||"Untitled",/^\d{4}-\d{2}-\d{2}
1$/.test(r)?(0,o.d8)(r):"","Currents.dev Changelog"].filter(Boolean).join(" | "),g=`https://${m}/changelog/${a||"…"}`,h=i?.trim()||c,x=s?.trim()||i?.trim()||c;return{title:e||"Untitled entry",description:t.trim(),googleTitle:d,url:g,slug:a||"entry",datePrefix:/^\d{4}-\d{2}-\d{2}$/.test(r)?(0,l.A)((0,n.A)(r),"MMM d, yyyy"):"",heroImage:h,ogImage:x,usingDefaultHero:!i?.trim(),usingDefaultOg:!s?.trim()&&!i?.trim(),hasDedicatedOg:!!s?.trim()}}(e),x=(t=e.description.trim(),r=[],(i=h.googleTitle.length)>60?r.push({level:"warn",text:`Google title is ${i} chars — the SERP link truncates around 60. Shorten the entry title.`}):r.push({level:"ok",text:`Google title fits (${i}/60 chars).`}),t?t.length>160?r.push({level:"warn",text:`Description is ${t.length} chars — Google clamps the snippet near 160.`}):r.push({level:"ok",text:`Description fits (${t.length}/160 chars).`}):r.push({level:"warn",text:"No description — Google will scrape body text for the snippet, and messaging previews (Slack/iMessage) have nothing to show."}),h.usingDefaultHero?r.push({level:"warn",text:"No cover image — X (and every card) falls back to the generic site og-card.png. Generate one with the changelog-covers skill."}):h.hasDedicatedOg?r.push({level:"ok",text:"Both a 16:9 hero and a 1.91:1 OG image are set."}):r.push({level:"info",text:"No dedicated 1.91:1 OG image — the large-card consumers (Facebook, Slack, iMessage) fall back to the 16:9 hero. A -og.jpg gives them the correct 1.91:1 crop."}),r.push({level:"info",text:"X center-crops the 16:9 hero to 2:1 and overlays the domain bottom-left — keep that strip clear of key art."}),r);return(0,a.jsxs)("div",{className:"mx-auto max-w-3xl space-y-6",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("p",{className:"font-inter text-xs text-dark-500",children:"How this entry unfurls when shared. Cards reproduce each platform's real 2026 layout, crop and truncation from your live meta tags."}),(0,a.jsx)("div",{className:"flex shrink-0 rounded-md border border-dark-100 p-0.5",children:["light","dark"].map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>g(e),className:`rounded px-3 py-1 font-inter text-xs capitalize transition-colors ${s===e?"bg-emerald-400/15 text-emerald-300":"text-dark-500 hover:text-dark-700"}`,children:e},e))})]}),(0,a.jsx)("div",{className:"space-y-1.5 rounded-md border border-dark-100 bg-dark-300 p-4",children:x.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-start gap-2 font-inter text-xs",children:[(0,a.jsx)("span",{className:"warn"===e.level?"text-amber-300":"ok"===e.level?"text-emerald-400":"text-dark-500",children:"warn"===e.level?"▲":"ok"===e.level?"✓":"•"}),(0,a.jsx)("span",{className:"warn"===e.level?"text-dark-700":"text-dark-500",children:e.text})]},t))}),(0,a.jsx)(v,{label:"Google",hint:"search result",platform:"google",theme:s,children:(0,a.jsx)(u,{d:h,theme:s})}),(0,a.jsx)(v,{label:"X",hint:"summary_large_image — image + domain only",platform:"x",theme:s,children:(0,a.jsx)(p,{d:h,theme:s})}),(0,a.jsx)(v,{label:"LinkedIn",hint:"compact link card — thumbnail left, no description",platform:"linkedin",theme:s,children:(0,a.jsx)(f,{d:h,theme:s})}),(0,a.jsx)(v,{label:"Reddit",hint:"link post — title is submitter-typed",platform:"reddit",theme:s,children:(0,a.jsx)(b,{d:h,theme:s})})]})}var k=r(96360),w=r(18847),N=r.n(w),S=r(77328),C=r.n(S);let I=N()(()=>Promise.all([r.e(2017),r.e(6701),r.e(8722),r.e(8318),r.e(8302),r.e(698),r.e(5354),r.e(279)]).then(r.bind(r,279)),{loadableGenerated:{webpack:()=>[279]},ssr:!1,loading:()=>(0,a.jsx)("div",{className:"rounded-md border border-dark-100 bg-dark-300 p-4 font-inter text-sm text-dark-500",children:"Loading editor…"})}),W=(0,k.W9)(),$=Object.keys(k.R6),E={slug:"",title:"",date:"",category:"New",tracks:[],description:"",imageSrc:"",imageWidth:"1600",imageHeight:"900",ogImageSrc:"",ogImageWidth:"1200",ogImageHeight:"630",body:""},H=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,120),O="w-full rounded-md border border-dark-100 bg-dark-300 px-3 py-2 text-sm text-dark-700 placeholder:text-dark-500 outline-none focus:border-emerald-400/60",P="mb-1.5 block font-inter text-xs font-medium uppercase tracking-wide text-dark-500";var z=!0;function R(){let[e,t]=(0,d.useState)([]),[r,l]=(0,d.useState)(null),[n,o]=(0,d.useState)(!1),[c,m]=(0,d.useState)(E),[g,h]=(0,d.useState)(!1),[x,u]=(0,d.useState)(!1),[p,f]=(0,d.useState)(null),[b,y]=(0,d.useState)(""),[v,w]=(0,d.useState)(0),[N,S]=(0,d.useState)(!1),[z,R]=(0,d.useState)("wysiwyg"),[T,F]=(0,d.useState)(null),[M,_]=(0,d.useState)(null),[A,D]=(0,d.useState)(!1),G=(e,t)=>{m(r=>({...r,[e]:t})),h(!0)},L=(0,d.useCallback)(async()=>{let e=await fetch("/api/changelog-admin");t((await e.json()).entries??[])},[]);(0,d.useEffect)(()=>{L()},[L]);let X=async e=>{let t=await fetch(`/api/changelog-admin?slug=${encodeURIComponent(e)}`);
1if(!t.ok)return void f({kind:"err",text:"Failed to load entry"});let{frontmatter:r,body:a}=await t.json();m({slug:e,title:r.title??"",date:r.date??"",category:$.includes(r.category)?r.category:"New",tracks:(r.tracks??[]).filter(e=>W.includes(e)),description:r.description??"",imageSrc:r.image?.src??"",imageWidth:r.image?.width!=null?String(r.image.width):"1600",imageHeight:r.image?.height!=null?String(r.image.height):"900",ogImageSrc:r.ogImage?.src??"",ogImageWidth:r.ogImage?.width!=null?String(r.ogImage.width):"1200",ogImageHeight:r.ogImage?.height!=null?String(r.ogImage.height):"630",body:a??""}),l(e),o(!1),h(!1),f(null),w(e=>e+1)},U=(n?c.slug.trim()||H(c.title):c.slug)||"",B=async e=>{if(!U)return void f({kind:"err",text:"Set a title or slug before uploading a cover."});S(!0);try{let t=await fetch(`/api/changelog-upload?slug=${encodeURIComponent(U)}&filename=${encodeURIComponent(e.name)}&kind=cover`,{method:"POST",body:e}),r=await t.json();if(!t.ok)return void f({kind:"err",text:r.error??"Cover upload failed"});G("imageSrc",r.src),r.width&&G("imageWidth",String(r.width)),r.height&&G("imageHeight",String(r.height)),r.ogSrc&&G("ogImageSrc",r.ogSrc),r.ogWidth&&G("ogImageWidth",String(r.ogWidth)),r.ogHeight&&G("ogImageHeight",String(r.ogHeight))}catch(e){f({kind:"err",text:e?.message??"Cover upload failed"})}finally{S(!1)}},J=(0,d.useRef)(c.body);J.current=c.body,(0,d.useEffect)(()=>{if("exact"!==z)return;let e=setTimeout(async()=>{D(!0);try{let e=await fetch("/api/changelog-admin",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"preview",body:J.current})}),t=await e.json();t.compiled?(F(t.compiled),_(null)):(F(null),_(t.error??"Failed to compile"))}catch(e){_(e?.message??"Preview request failed")}finally{D(!1)}},500);return()=>clearTimeout(e)},[c.body,z]);let Y=async()=>{u(!0),f(null);let e=n?c.slug.trim()||H(c.title):c.slug,t={title:c.title,date:c.date,category:c.category,tracks:c.tracks,description:c.description};c.imageSrc.trim()&&(t.image={src:c.imageSrc.trim(),width:Number(c.imageWidth)||0,height:Number(c.imageHeight)||0}),c.ogImageSrc.trim()&&(t.ogImage={src:c.ogImageSrc.trim(),width:Number(c.ogImageWidth)||0,height:Number(c.ogImageHeight)||0});try{let r=await fetch("/api/changelog-admin",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save",slug:e,frontmatter:t,body:c.body}
1)}),a=await r.json();r.ok?(f({kind:"ok",text:`Saved changelog/${a.slug}.mdx`}),h(!1),l(a.slug),o(!1),m(e=>({...e,slug:a.slug})),await L()):f({kind:"err",text:a.error??"Save failed"})}catch(e){f({kind:"err",text:e?.message??"Save failed"})}finally{u(!1)}},V=e.filter(e=>!b||e.title.toLowerCase().includes(b.toLowerCase())||e.slug.includes(b.toLowerCase())),q=n||null!=r,K={slug:U,title:c.title,date:c.date,description:c.description,image:c.imageSrc?{src:c.imageSrc,width:Number(c.imageWidth)||void 0,height:Number(c.imageHeight)||void 0}:void 0};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(C(),{children:[(0,a.jsx)("title",{children:"Changelog Admin (dev)"}),(0,a.jsx)("meta",{name:"robots",content:"noindex,nofollow"})]}),(0,a.jsxs)("div",{className:"flex h-screen flex-col bg-dark text-dark-700",children:[(0,a.jsxs)("header",{className:"flex items-center justify-between border-b border-dark-100 px-6 py-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("h1",{className:"font-poppins text-lg font-medium text-dark-700",children:"Changelog Admin"}),(0,a.jsx)("span",{className:"rounded-full border border-amber-400/40 bg-amber-400/10 px-2 py-0.5 font-inter text-[11px] font-medium uppercase tracking-wide text-amber-300",children:"dev only"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[p&&(0,a.jsx)("span",{className:`font-inter text-sm ${"ok"===p.kind?"text-emerald-400":"text-red-400"}`,children:p.text}),(0,a.jsx)(i.default,{as:"button",onClick:()=>{m(E),l(null),o(!0),h(!1),f(null),F(null),_(null),w(e=>e+1)},variant:"secondary",children:"New entry"}),(0,a.jsx)(i.default,{as:"button",onClick:Y,variant:"primary",disabled:!q||x||!g,className:q&&!x&&g?"":"opacity-50",children:x?"Saving…":"Save"})]})]}),(0,a.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,a.jsxs)("aside",{className:"flex w-72 shrink-0 flex-col border-r border-dark-100",children:[(0,a.jsx)("div",{className:"border-b border-dark-100 p-3",children:(0,a.jsx)("input",{className:O,placeholder:"Filter entries…",value:b,onChange:e=>y(e.target.value)})}),(0,a.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:[V.map(e=>(0,a.jsxs)("button",{type:"button",onClick:()=>X(e.slug),className:`block w-full border-b border-dark-100/50 px-4 py-3 text-left transition-colors hover:bg-dark-300 ${r===e.slug?"bg-dark-300":""}`,children:[(0,a.jsx)("div",{className:"truncate font-inter text-sm text-dark-700",children:e.title}),(0,a.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 font-inter text-xs text-dark-500",children:[(0,a.jsx)("span",{children:e.date}),e.category&&(0,a.jsxs)("span",{className:"text-dark-500",children:["\xb7 ",e.category]})]})]},e.slug)),0===V.length&&(0,a.jsx)("p",{className:"p-4 font-inter text-sm text-dark-500",children:"No entries."})]})]}),(0,a.jsx)("main",{className:"min-h-0 w-[440px] shrink-0 overflow-y-auto border-r border-dark-100 p-6",children:q?(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:P,children:"Slug (filename)"}),(0,a.jsx)("input",{className:`${O} ${!n?"opacity-60":""}`,value:c.slug,disabled:!n,placeholder:H(c.title)||"my-new-entry",onChange:e=>G("slug",e.target.value)}),n&&(0,a.jsxs)("p",{className:"mt-1 font-inter text-xs text-dark-500",children:["Leave blank to derive from title →"," ",(0,a.jsx)("code",{className:"text-dark-500",children:H(c.title)||"…"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:P,children:"Title"}),(0,a.jsx)("input",{className:O,value:c.title,onChange:e=>G("title",e.target.value)})]}),(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("label",{className:P,children:"Date"}),(0,a.jsx)("input",{type:"date",className:O,value:c.date,onChange:e=>G("date",e.target.value)})]}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("label",{className:P,children:"Category"}),(0,a.jsx)("select",{className:O,value:c.category,onChange:e=>G("category",e.target.value),children:$.map(e=>(0,a.jsx)("option",{value:e,children:e},e))})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:P,children:"Tracks"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:W.map(e=>{let t=c.tracks.includes(e);return(0,a.jsx)("button",{type:"button",onClick:()=>G("tracks",c.tracks.includes(e)?c.tracks.filter(t=>t!==e):[...c.tracks,e]),className:`rounded-full border px-3 py-1 font-inter text-xs transition-colors ${t?"border-emerald-400/50 bg-emerald-400/10 text-emerald-300":"border-dark-100 text-dark-500 hover:border-dark-500"}`,children:k.pS[e]},e)})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:P,children:"Description"}),(0,a.jsx)("textarea",{className:`${O} min-h-[72px] resize-y`,value:c.description,onChange:e=>G("description",e.target.value)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:P,children:"Cover image (optional)"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("input",{className:O,placeholder:"/img/changelog/my-entry.jpg",value:c.imageSrc,onChange:e=>G("imageSrc",e.target.value)}),(0,a.jsxs)("label",{className:"flex shrink-0 cursor-pointer items-center rounded-md border border-dark-100 px-3 font-inter text-xs text-dark-500 transition-colors hover:border-emerald-400/50 hover:text-emerald-300",children:[N?"Uploading…":"Upload",(0,a.jsx)("input",{type:"file",accept:"image/png,image/jpeg,image/webp",className:"hidden",disabled:N,onChange:e=>{let t=e.target.files?.[0];t&&B(t),e.currentTarget.value=""}})]})]}),(0,a.jsxs)("div",{className:"mt-2 flex gap-4",children:[(0,a.jsx)("div",{className:"flex-1",children:(0,a.jsx)("input",{className:O,placeholder:"width",value:c.imageWidth,onChange:e=>G("imageWidth",e.target.value)})}),(0,a.jsx)("div",{className:"flex-1",children:(0,a.jsx)("input",{className:O,placeholder:"height",value:c.imageHeight,onChange:e=>G("imageHeight",e.target.value)})})]}),(0,a.jsxs)("p",{className:"mt-2 font-inter text-xs text-dark-500",children:["Upload re-encodes to two social JPEGs — a 1600\xd7900 hero/X card and a 1200\xd7630 OG/LinkedIn image",c.ogImageSrc?(0,a.jsxs)(a.Fragment,{children:[" ","(",(0,a.jsx)("code",{className:"text-dark-600",children:c.ogImageSrc}),")"]}):null,". For brand-generated art, use the changelog-covers skill instead."]})]})]}):(0,a.jsx)("div",{className:"flex h-full items-center justify-center text-center",children:(0,a.jsxs)("p",{className:"font-inter text-sm text-dark-500",children:["Select an entry to edit,",(0,a.jsx)("br",{}),"or create a new one."]})})}),(0,a.jsxs)("section",{className:"flex min-h-0 min-w-0 flex-1 flex-col bg-dark",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-dark-100 px-4 py-2",children:[(0,a.jsx)("div",{className:"flex rounded-md border border-dark-100 p-0.5",children:[["wysiwyg","WYSIWYG"],["source","Source"],["exact","Exact preview"],["social","Social"]].map(([e,t])=>(0,a.jsx)("button",{type:"button",onClick:()=>{"wysiwyg"===e&&w(e=>e+1),R(e)},className:`rounded px-3 py-1 font-inter text-xs transition-colors ${z===e?"bg-emerald-400/15 text-emerald-300":"text-dark-500 hover:text-dark-700"}`,children:t},e))}),"exact"===z&&A&&(0,a.jsx)("span",{className:"font-inter text-xs text-dark-500",children:"compiling…"})]}),q?"wysiwyg"===z?(0,a.jsx)("div",{className:"min-h-0 flex-1",children:(0,a.jsx)(I,{header:(0,a.jsx)(s.j,{animateHero:!1,entry:K}),initialMarkdown:c.body,slug:U,onChange:e=>G("body",e)},v)}):"source"===z?(0,a.jsx)("textarea",{className:"min-h-0 flex-1 resize-none bg-dark px-6 py-4 font-sourcepro text-sm text-dark-700 outline-none",value:c.body,onChange:e=>G("body",e.target.value),spellCheck:!1,placeholder:"Raw MDX / Markdown…"}):"social"===z?(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-8 py-10",children:(0,a.jsx)(j,{title:c.title,de
1scription:c.description,date:c.date,slug:U,heroImageSrc:c.imageSrc,ogImageSrc:c.ogImageSrc})}):(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-8 py-10",children:M?(0,a.jsx)("pre",{className:"whitespace-pre-wrap rounded-md border border-red-400/30 bg-red-400/5 p-4 font-sourcepro text-xs text-red-300",children:M}):(0,a.jsx)("article",{className:"prose prose-invert mx-auto max-w-3xl",children:(0,a.jsx)(s.j,{animateHero:!1,entry:{...K,content:T}})})}):(0,a.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,a.jsx)("p",{className:"font-inter text-sm text-dark-500",children:"Select an entry to edit, or create a new one."})})]})]})]})]})}},24628:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>l});var a=r(37876),i=r(15039),s=r.n(i);r(14232);let l=({children:e,link:t,big:r=!1,medium:i=!1,className:l="",variant:n="primary",as:o="a",...d})=>{let c=s()(`
2        rounded-3xl
3
4        text-center
5        text-[14px]
6        text-white
7
8        subpixel-antialiased
9        font-medium
10        font-poppins
11
12        flex
13        justify-center
14        items-center
15
16        select-none
17        whitespace-nowrap
18
19        cursor-pointer
20        backdrop-blur-sm
21
22        transition-all
23        duration-150
24
25        shadow-sm
26        hover:shadow-lg
27`,(l??"").split(" "),{"bg-gradient-to-br from-blue-700/20 to-blue-400/40 border border-dark-50 border-blue-400/30 hover:bg-blue-500":"secondary"===n,"bg-gradient-to-br from-teal-700/20 to-emerald-400/40 border border-dark-50 border-emerald-400/30 hover:bg-emerald-400 ":"primary"===n,"bg-gradient-to-br from-amber-700/20 to-amber-400/40 border border-dark-50 border-amber-400/30 hover:bg-amber-400 hover:text-black":"warning"===n,"py-4 px-12 leading-12 min-w-[180px] ":r,"py-4 px-8 leading-12 min-w-[180px] ":i,"py-2 px-4 min-w-[120px] ":!r&&!i});return"button"===o?(0,a.jsx)("button",{...d,type:"button",className:c,children:e}):(0,a.jsx)("a",{...d,href:t,target:"_blank",rel:"noreferrer",className:c,children:e})}},26790:(e,t,r)=>{"use strict";r.d(t,{F:()=>i,X:()=>s});let a=e=>`currents.changelog.heroRect:${e}`;function i(e,t){try{window.sessionStorage.setItem(a(e),JSON.stringify(t))}catch{}}function s(e){try{let t=window.sessionStorage.getItem(a(e));if(!t)return null;return window.sessionStorage.removeItem(a(e)),JSON.parse(t)}catch{return null}}},75516:(e,t,r)=>{"use strict";r.d(t,{FY:()=>n,d8:()=>l,dw:()=>s});var a=r(50426),i=r(73631);let s=e=>(0,a.A)((0,i.A)(e),"MMM dd, yyyy"),l=e=>(0,a.A)((0,i.A)(e),"MMM yyyy"),n=e=>(0,a.A)((0,i.A)(e),"MMM d, yyyy")},81936:(e,t,r)=>{"use strict";r.d(t,{j:()=>b});var a=r(37876),i=r(97850),s=r(4902),l=r(45088),n=r(38861),o=r(92768);function d(){var e=!1,t=[],r=new Set,a={subscribe:function(e){return r.add(e),function(){r.delete(e)}},start:function(a,i){if(!e)return new Promise(function(e){t.push({animation:[a,i],resolve:e})});var s=[];return r.forEach(function(e){s.push((0,n._0)(e,a,{transitionOverride:i}))}),Promise.all(s)},set:function(t){return(0,l.V)(e,"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook."),r.forEach(function(e){(0,o.VI)(e,t)})},stop:function(){r.forEach(function(e){(0,n.TV)(e)})},mount:function(){return e=!0,t.forEach(function(e){var t=e.animation,r=e.resolve;a.start.apply(a,(0,s.fX)([],(0,s.zs)(t),!1)).then(r)}),function(){e=!1,a.stop()}}};return a}var c=r(14232),m=r(91200),g=r(5646),h=r(26790),x=r(75516),u=r(84289),p=r(54587),f=r.n(p);function b({entry:e,animateHero:t=!0}){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"mt-10 mb-6 flex flex-wrap items-center gap-x-3 gap-y-2",children:(0,a.jsx)("time",{className:"font-inter text-sm text-dark-500",dateTime:e.date,children:e.date?(0,x.dw)(e.date):""})}),(0,a.jsx)("h1",{className:"mb-6",children:e.title}),e.description&&(0,a.jsx)("p",{className:"lead",children:e.description}),e.image?.src&&(0,a.jsx)(y,{entry:e,animate:t}),e.content?.compiledSource&&(0,a.jsx)("div",{children:(0,a.jsx)(u.Lo,{...e.content,components:i.U1})})]})}function y({entry:e,animate:t}){var r;let s=(0,c.useRef)(null),l=(r=(0,m.M)(d),(0,c.useEffect)(r.mount,[]),r);(0,c.useEffect)(()=>
27{if(!t)return;let r=(0,h.X)(e.slug),a=s.current?.getBoundingClientRect();if(r&&a&&a.width>0&&a.height>0){let e=r.left-a.left,t=r.top-a.top,i=r.width/a.width,s=r.height/a.height;l.set({x:e,y:t,scaleX:i,scaleY:s,opacity:1}),l.start({x:0,y:0,scaleX:1,scaleY:1,transition:{type:"spring",stiffness:260,damping:30}})}else l.set({opacity:0,y:16,scale:.98}),l.start({opacity:1,y:0,scale:1,transition:{duration:.4,ease:"easeOut"}})},[]);let n=(0,a.jsx)(i.Px,{src:e.image.src,alt:e.title,children:(0,a.jsx)(f(),{priority:!0,className:"rounded-2xl ring-1 ring-inset ring-white/10",style:{objectFit:"cover",objectPosition:"center"},src:e.image.src,alt:e.title,width:e.image.width??1600,height:e.image.height??900,quality:100})});return t?(0,a.jsx)(g.P.div,{ref:s,initial:{opacity:0},animate:l,style:{transformOrigin:"top left"},className:"relative mx-auto rounded-2xl lg:max-w-none",children:n}):(0,a.jsx)("div",{className:"relative mx-auto rounded-2xl lg:max-w-none",children:n})}},96360:(e,t,r)=>{"use strict";r.d(t,{Pm:()=>l,R6:()=>s,W9:()=>i,pS:()=>a});let a={platform:"Platform",cli:"CLI",reporters:"Reporters",extension:"IDE Extension",api:"API"},i=()=>Object.keys(a),s={New:{label:"New",className:"text-emerald-300 border-emerald-300/40 bg-emerald-300/10",dotClassName:"bg-emerald-300"},Improved:{label:"Improved",className:"text-sky-300 border-sky-300/40 bg-sky-300/10",dotClassName:"bg-sky-300"},Fixed:{label:"Fixed",className:"text-amber-300 border-amber-300/40 bg-amber-300/10",dotClassName:"bg-amber-300"}},l=10},97850:(e,t,r)=>{"use strict";r.d(t,{Bi:()=>g,Px:()=>m,U1:()=>h});var a=r(37876),i=r(89410),s=r(24418),l=r(5646),n=r(54587),o=r.n(n),d=r(14232),c=r(98477);function m({src:e,alt:t,children:r}){let[i,n]=(0,d.useState)(!1),[o,g]=(0,d.useState)(!1);return(0,d.useEffect)(()=>g(!0),[]),(0,d.useEffect)(()=>{if(!i)return;let e=e=>{"Escape"===e.key&&n(!1)};document.addEventListener("keydown",e);let t=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",e),document.body.style.overflow=t}},[i]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{role:"button",tabIndex:0,"aria-label":`Enlarge image: ${t}`,onClick:()=>n(!0),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),n(!0))},className:"block cursor-zoom-in rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-400/70 focus-visible:ring-offset-2 focus-visible:ring-offset-dark",children:r}),o&&(0,c.createPortal)((0,a.jsx)(s.N,{children:i&&(0,a.jsx)(l.P.div,{role:"dialog","aria-modal":"true","aria-label":t,initial:{opacity:0}
27,animate:{opacity:1},exit:{opacity:0},transition:{duration:.2,ease:"easeOut"},onClick:()=>n(!1),className:"fixed inset-0 z-[120] flex cursor-zoom-out items-center justify-center bg-black/85 p-4 backdrop-blur-md sm:p-8",children:(0,a.jsx)(l.P.img,{src:e,alt:t,initial:{scale:.92,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.95,opacity:0},transition:{type:"spring",stiffness:240,damping:28},className:"max-h-[92vh] max-w-[92vw] rounded-2xl object-contain shadow-2xl"})},"changelog-image-zoom")}),document.body)]})}let g={...i.mdxComponents,img:({src:e,alt:t="",title:r})=>(0,a.jsxs)("figure",{className:"text-center",children:[(0,a.jsx)(m,{src:e,alt:t,children:(0,a.jsx)("img",{src:e,className:"rounded",alt:t})}),(r||t)&&(0,a.jsx)("figcaption",{className:"z-10 mt-4 text-xs italic text-gray-400",children:r||t})]}),Image:e=>{let t;return(0,a.jsxs)("figure",{className:"text-center",children:[(0,a.jsx)(m,{src:"string"==typeof(t=e.src)?t:"default"in t?t.default.src:t.src,alt:e.alt,children:(0,a.jsx)(o(),{...e,className:"rounded",alt:e.alt})}),(0,a.jsx)("figcaption",{className:"z-10 mt-4 text-xs italic text-gray-400",children:e.alt})]})}},h=g}},e=>{e.O(0,[6593,5587,888,3557,4587,5646,6289,6004,2749,9532,8732,9410,636,8792],()=>e(e.s=8668)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.