1import{_ as pe,e as he,I as Ce,g as ve}from"#entry";import{z as ye,d as T,C as i,v as ce,o as fe,V as v,P as r,Y as s,a7 as we,F as a,_ as E,H as B,Z as h,aj as $e,a0 as w,G as V,a6 as H,O as U,ai as Te,$ as W,A as xe,y as ke,c as ee,Q as me,a3 as Ae}from"./C46I0s0p.js";import{f as Ee}from"./C8nfPv5V.js";import{u as Se,q as De}from"./Dyc5aA03.js";const Le=["aria-expanded"],Me={class:"select-label"},Oe={class:"select-value"},Be=["aria-multiselectable"],Ve=["aria-selected","onClick"],Ie={class:"select-tick","aria-hidden":"true"},Fe={class:"select-option-label"},Re={key:0,class:"select-option-count"},Ne=ye({__name:"BlogFilterSelect",props:{label:{},options:{},modelValue:{},multiple:{type:Boolean,default:!1},placeholder:{default:"All"}},emits:["update:modelValue"],setup(u,{emit:b}){const o=u,y=b,d=T(!1),_=T(null),f=i(()=>Array.isArray(o.modelValue)?o.modelValue:o.modelValue?[o.modelValue]:[]),x=m=>f.value.includes(m),N=i(()=>f.value.length===0?o.placeholder:o.multiple?f.value.length===1?o.options.find(m=>m.value===f.value[0])?.label??o.placeholder:`${f.value.length} selected`:o.options.find(m=>m.value===f.value[0])?.label??o.placeholder),G=m=>{if(!o.multiple){y("update:modelValue",m),d.value=!1;return}const L=x(m)?f.value.filter(D=>D!==m):[...f.value,m];y("update:modelValue",L)},j=()=>{y("update:modelValue",o.multiple?[]:""),d.value=!1},I=m=>{_.value&&!_.value.contains(m.target)&&(d.value=!1)},S=m=>{m.key==="Escape"&&(d.value=!1,_.value?.querySelector(".select-trigger")?.focus())};return ce(d,m=>{typeof document>"u"||(m?(document.addEventListener("pointerdown",I),document.addEventListener("keydown",S)):(document.removeEventListener("pointerdown",I),document.removeEventListener("keydown",S)))}),fe(()=>{typeof document>"u"||(document.removeEventListener("pointerdown",I),document.removeEventListener("keydown",S))}),(m,L)=>{const D=pe;return r(),v("div",{ref_key:"root",ref:_,class:"select"},[s("button",{type:"button",class:E(["select-trigger",{"select-trigger--on":a(f).length>0,"select-trigger--open":a(d)}]),"aria-expanded":a(d),"aria-haspopup":"listbox",onClick:L[0]||(L[0]=$=>d.value=!a(d))},[s("span",Me,h(u.label),1),s("span",Oe,h(a(N)),1),B(D,{name:"lucide:chevron-down",class:E(["select-caret",{"select-caret--up":a(d)}])},null,8,["class"])],10,Le),we(s("div",{class:"select-menu",role:"listbox","aria-multiselectable":u.multiple},[(r(!0),v(V,null,H(u.options,$=>(r(),v("button",{key:$.value,type:"button",role:"option",class:E(["select-option",{"select-option--on":x($.value)}]),"aria-selected":x($.value),onClick:F=>G($.value)},[s("span",Ie,[x($.value)?(r(),U(D,{key:0,name:"lucide:check"})):w("",!0)]),s("span",Fe,h($.label),1),$.count!==void 0?(r(),v("span",Re,h($.count),1)):w("",!0)],10,Ve))),128)),u.multiple&&a(f).length?(r(),v("button",{key:0,type:"button",class:"select-clear",onClick:j}," CLEAR ")):w("",!0)],8,Be),[[$e,a(d)]])],512)}}}),Pe=Object.assign(he(Ne,[["__scopeId","data-v-81ee6d93"]]),{__name:"BlogFilterSelect"}),Ye=["aria-expanded"],Ue={class:"range-value"},He=["aria-labelledby"],Ge={class:"range-head"},je=["id"],ze={class:"range-years"},Ke=["onClick"],We={class:"range-year-count"},qe={class:"range-header"},Je=["disabled"],Qe={class:"range-month-count"},Ze=["disabled"],Xe={class:"range-weekdays","aria-hidden":"true"},et={class:"range-grid"},tt=["aria-label","onClick"],nt={key:0,class:"range-mark","aria-hidden":"true"},at={class:"range-footer"},st={class:"range-hint"},ot=ye({__name:"BlogDateRange",props:{dates:{},start:{},end:{}},emits:["update:start","update:end"],setup(u,{emit:b}){const o=u,y=b,d=T(!1),_=T(null),f=T(null),x=Te(),N=()=>{d.value=!1,f.value?.focus()},G=["M","T","W","T","F","S","S"],j=["January","February","March","April","May","June","July","August","September","October","November","December"],I=t=>t.slice(0,10),S=(t,e,p)=>`${t}-${String(e+1).padStart(2,"0")}-${String(p).padStart(2,"0")}`,m=i(()=>{const t=new Map;for(const e of o.dates){const p=I(e);t.set(p,(t.get(p)??0)+1)}return t}),L=i(()=>{const t=new Map;for(const e of m.value.keys()){const p=e.slice(0,7);t.set(p,(t.get(p)??0)+(m.value.get(e)??0))}return t}),D=i(()=>{const t=new Map;for(const[e,p]of m.value){const g=e.slice(0,4);t.set(g,(t.get(g)??0)+p)}return t}),$=i(()=>[...D.value.keys()].sort((t,e)=>e.localeCompare(t))),F=i(()=>[...m.value.keys()].sort()),te=i(()=>F.value[0]?.slice(0,7)??null),P=i(()=>F.value[F.value.length-1]?.slice(0,7)??null),C=T(P.value?{year:Number(P.value.slice(0,4)),month:Number(P.value.slice(5,7))-1}:{year:new Date().getFullYear(),month:new Date().getMonth()}),q=i(()=>`${C.value.year}-${String(C.value.month+1).padStart(2,"0")}`),M=i(()=>L.value.get(q.value)??0),ne=i(()=>!!te.value&&q.value>te.value),ae=i(()=>!!P.value&&q.value<P.value),O=t=>{const e=new Date(C.value.year,C.value.month+t,1);C.value={year:e.getFullYear(),month:e.getMonth()}},J=t=>{const e=F.value.filter(g=>g.startsWith(t)),p=e[e.length-1];p&&(C.value={year:Number(t),month:Number(p.slice(5,7))-1})},ie=i(()=>{const{year:t,month:e}=C.value,g=(new Date(t,e,1).getDay()+6)%7,R=new Date(t,e,1-g),k=[];for(let re=0;re<6;re++){const be=[];for(let ge=0;ge<7;ge++){const X=new Date(R.getFullYear(),R.getMonth(),R.getDate()+re*7+ge),_e=S(X.getFullYear(),X.getMonth(),X.getDate());be.push({key:_e,day:X.getDate(),outside:X.getMonth()!==e,count:m.value.get(_e)??0})}k.push(be)}return k}),se=t=>t.some(e=>e.count>0),Y=i(()=>o.start&&!o.end?"end":"start"),z=t=>
1{if(Y.value==="start"){y("update:start",t.key),y("update:end",null);return}const e=o.start,[p,g]=t.key<e?[t.key,e]:[e,t.key];y("update:start",p),y("update:end",g)},oe=t=>!o.start||!o.end?!1:t>o.start&&t<o.end,ue=t=>t===o.start,Q=t=>t===o.end,K=()=>{y("update:start",null),y("update:end",null)},le=t=>{y("update:start",`${t}-01-01`),y("update:end",`${t}-12-31`),J(t)},de=()=>{const{year:t,month:e}=C.value,p=new Date(t,e+1,0).getDate();y("update:start",S(t,e,1)),y("update:end",S(t,e,p))},n=t=>t?`${t.slice(8,10)}.${t.slice(5,7)}.${t.slice(0,4)}`:null,l=i(()=>o.start&&o.end?`${n(o.start)} - ${n(o.end)}`:o.start?`${n(o.start)} - ...`:"Any time"),c=i(()=>!!(o.start||o.end)),A=t=>{_.value&&!_.value.contains(t.target)&&(d.value=!1)},Z=t=>{t.key==="Escape"&&N()};return ce(d,t=>{typeof document>"u"||(t?(document.addEventListener("pointerdown",A),document.addEventListener("keydown",Z)):(document.removeEventListener("pointerdown",A),document.removeEventListener("keydown",Z)))}),fe(()=>{typeof document>"u"||(document.removeEventListener("pointerdown",A),document.removeEventListener("keydown",Z))}),(t,e)=>{const p=pe;return r(),v("div",{ref_key:"root",ref:_,class:"range"},[s("button",{ref_key:"trigger",ref:f,type:"button",class:E(["range-trigger",{"range-trigger--on":a(c),"range-trigger--open":a(d)}]),"aria-expanded":a(d),"aria-haspopup":"dialog",onClick:e[0]||(e[0]=g=>d.value=!a(d))},[B(p,{name:"lucide:calendar",class:"range-icon"}),e[3]||(e[3]=s("span",{class:"range-label"},"DATES",-1)),s("span",Ue,h(a(l)),1),B(p,{name:"lucide:chevron-down",class:E(["range-caret",{"range-caret--up":a(d)}])},null,8,["class"])],10,Ye),we(s("div",{class:"range-panel",role:"dialog","aria-labelledby":a(x)},[s("div",Ge,[s("span",{id:a(x),class:"range-title"},"FILTER BY DATE",8,je),s("button",{type:"button",class:"range-close","aria-label":"Close date filter",onClick:N},[B(p,{name:"lucide:x"})])]),s("div",ze,[(r(!0),v(V,null,H(a($),g=>(r(),v("button",{key:g,type:"button",class:E(["range-year",{"range-year--current":String(a(C).year)===g}]),onClick:R=>le(g)},[W(h(g)+" ",1),s("span",We,h(a(D).get(g)),1)],10,Ke))),128))]),s("div",qe,[s("button",{type:"button",class:"range-nav",disabled:!a(ne),"aria-label":"Previous month",onClick:e[1]||(e[1]=g=>O(-1))},[B(p,{name:"lucide:chevron-left"})],8,Je),s("button",{type:"button",class:"range-month",onClick:de},[W(h(j[a(C).month])+" "+h(a(C).year)+" ",1),s("span",Qe,h(a(M)),1)]),s("button",{type:"button",class:"range-nav",disabled:!a(ae),"aria-label":"Next month",onClick:e[2]||(e[2]=g=>O(1))},[B(p,{name:"lucide:chevron-right"})],8,Ze)]),s("div",Xe,[(r(),v(V,null,H(G,(g,R)=>s("span",{key:R},h(g),1)),64))]),s("div",et,[(r(!0),v(V,null,H(a(ie),(g,R)=>(r(),v("div",{key:R,class:E(["range-week",{"range-week--has":se(g)}])},[(r(!0),v(V,null,H(g,k=>(r(),v("button",{key:k.key,type:"button",class:E(["range-day",{"range-day--outside":k.outside,"range-day--has":k.count>0,"range-day--start":ue(k.key),"range-day--end":Q(k.key),"range-day--between":oe(k.key)}]),"aria-label":`${k.key}${k.count?`, ${k.count} article${k.count===1?"":"s"}`:""}`,onClick:re=>z(k)},[W(h(k.day)+" ",1),k.count>0?(r(),v("span",nt)):w("",!0)],10,tt))),128))],2))),128))]),s("div",at,[s("span",st,h(a(Y)==="end"?"Pick an end date":"Pick a start date"),1),a(c)?(r(),v("button",{key:0,type:"button",class:"range-clear",onClick:K}," CLEAR ")):w("",!0)])],8,He),[[$e,a(d)]])],512)}}}),lt=Object.assign(he(ot,[["__scopeId","data-v-74a4c072"]]),{__name:"BlogDateRange"}),rt={key:0,class:"blog-controls"},ct={class:"blog-controls-status"},it={"aria-live":"polite"},ut={class:"blog-controls-filters"},dt={class:"blog-grid"},gt=["src","alt"],vt={key:2,class:"blog-placeholder"},mt={class:"blog-card-content"},pt={class:"blog-meta"},ht={class:"blog-date"},yt={key:0,class:"blog-reading-time"},ft={class:"blog-card-title"},bt={class:"blog-card-excerpt"},_t={class:"blog-tags"},kt={key:1,class:"blog-more"},wt={key:2,class:"blog-empty"},$t={class:"empty-icon"},Ct={class:"empty-title"},Tt={class:"empty-text"},xt=ye({__name:"BlogCardGrid",props:{posts:{},linkableTags:{default:()=>[]},facets:{default:()=>[]},initial:{default:6},step:{default:6},emptyTitle:{default:"NO POSTS YET"},emptyText:{default:"Check back soon for productivity tips and insights."}},setup(u){const b=u,o=T([]),y=T(""),d=T(null),_=T(null),f=T("newest"),x=n=>b.facets.includes(n),N=n=>n.author??"TheTab Team",G=n=>n.date.slice(0,10),j=i(()=>{const n=new Map;for(const l of b.posts)for(const c of l.tags)n.set(c,(n.get(c)??0)+1);return[...n.entries()].sort((l,c)=>c[1]-l[1]||l[0].localeCompare(c[0])).map(([l,c])=>({name:l,count:c}
1))}),I=i(()=>{const n=new Map;for(const l of b.posts){const c=N(l);n.set(c,(n.get(c)??0)+1)}return[...n.entries()].sort((l,c)=>c[1]-l[1]).map(([l,c])=>({name:l,count:c}))}),S=i(()=>x("author")&&I.value.length>1),m=i(()=>x("tag")&&j.value.length>1),L=i(()=>x("year")&&b.posts.length>1),D=i(()=>x("sort")&&b.posts.length>1),$=i(()=>D.value||m.value||L.value||S.value),F={newest:"Newest",oldest:"Oldest",longest:"Longest read",shortest:"Quickest read"},te=Object.keys(F).map(n=>({value:n,label:F[n]})),P=i(()=>j.value.map(n=>({value:n.name,label:n.name,count:n.count}))),C=i(()=>I.value.map(n=>({value:n.name,label:n.name,count:n.count}))),q=i(()=>b.posts.map(n=>n.date)),M=i(()=>{let n=b.posts;if(o.value.length&&(n=n.filter(c=>c.tags.some(A=>o.value.includes(A)))),y.value&&(n=n.filter(c=>N(c)===y.value)),d.value&&(n=n.filter(c=>G(c)>=d.value)),_.value&&(n=n.filter(c=>G(c)<=_.value)),f.value==="newest")return n;const l=[...n];switch(f.value){case"oldest":l.reverse();break;case"longest":l.sort((c,A)=>(A.readingTime??0)-(c.readingTime??0));break;case"shortest":l.sort((c,A)=>(c.readingTime??1/0)-(A.readingTime??1/0));break}return l}),ne=i(()=>o.value.length>0||!!y.value||!!d.value||!!_.value),ae=()=>{o.value=[],y.value="",d.value=null,_.value=null},O=T(b.initial),J=i(()=>O.value<M.value.length),ie=i(()=>M.value.length-O.value),se=()=>{O.value=Math.min(O.value+b.step,M.value.length)};ce(M,()=>{O.value=b.initial});const Y=T(null);let z=null;const oe=()=>{z?.disconnect(),!(!Y.value||!J.value)&&(z=new IntersectionObserver(n=>{n.some(l=>l.isIntersecting)&&se()},{rootMargin:"400px 0px"}),z.observe(Y.value))};xe(()=>ke(oe)),ce([J,Y],()=>ke(oe)),fe(()=>z?.disconnect());const ue=n=>`/blog/tag/${n}`,Q=n=>b.linkableTags.includes(n),K=n=>n.thumb??n.cover,le=n=>n.thumbAlt??n.coverAlt??n.title,de=n=>!!n&&n.endsWith(".svg");return(n,l)=>{const c=Pe,A=lt,Z=Ce,t=pe;return r(),v("div",null,[a($)?(r(),v("div",rt,[s("div",ct,[s("span",it,h(a(M).length)+" of "+h(u.posts.length)+" article"+h(u.posts.length===1?"":"s"),1),a(ne)?(r(),v("button",{key:0,type:"button",class:"blog-clear",onClick:ae}," CLEAR ")):w("",!0)]),s("div",ut,[a(D)?(r(),U(c,{key:0,modelValue:a(f),"onUpdate:modelValue":l[0]||(l[0]=e=>ee(f)?f.value=e:null),label:"SORT",options:a(te)},null,8,["modelValue","options"])):w("",!0),a(m)?(r(),U(c,{key:1,modelValue:a(o),"onUpdate:modelValue":l[1]||(l[1]=e=>ee(o)?o.value=e:null),label:"TOPIC",multiple:"",placeholder:"All topics",options:a(P)},null,8,["modelValue","options"])):w("",!0),a(S)?(r(),U(c,{key:2,modelValue:a(y),"onUpdate:modelValue":l[2]||(l[2]=e=>ee(y)?y.value=e:null),label:"AUTHOR",placeholder:"Anyone",options:a(C)},null,8,["modelValue","options"])):w("",!0),a(L)?(r(),U(A,{key:3,start:a(d),"onUpdate:start":l[3]||(l[3]=e=>ee(d)?d.value=e:null),end:a(_),"onUpdate:end":l[4]||(l[4]=e=>ee(_)?_.value=e:null),dates:a(q)},null,8,["start","end","dates"])):w("",!0)])])):w("",!0),s("div",dt,[(r(!0),v(V,null,H(a(M),(e,p)=>(r(),v("article",{key:e.slug,class:E(["blog-card",{"blog-card--folded":p>=a(O)}])},[s("div",{class:E(["blog-card-image",`blog-card-image--${e.tags[0]?.toLowerCase().replace(/\s+/g,"-")||"default"}`])},[de(K(e))?(r(),v("img",{key:0,src:K(e),alt:le(e),class:"blog-card-cover blog-card-cover--diagram",width:"600",height:"315",loading:"lazy",decoding:"async"},null,8,gt)):K(e)?(r(),U(Z,{key:1,src:K(e),alt:le(e),class:"blog-card-cover",width:"600",height:"315",sizes:"sm:100vw md:50vw lg:600px",format:"webp",loading:"lazy"},null,8,["src","alt"])):(r(),v("div",vt,h(e.tags[0]?.[0]?.toUpperCase()||"?"),1))],2),s("div",mt,[s("div",pt,[s("span",ht,h(("formatDate"in n?n.formatDate:a(Ee))(e.date)),1),e.readingTime?(r(),v("span",yt,h(e.readingTime)+" MIN READ",1)):w("",!0)]),s("h2",ft,[B(a(ve),{to:e.to,class:"blog-card-title-link"},{default:me(()=>[W(h(e.title),1)]),_:2},1032,["to"])]),s("p",bt,h(e.excerpt),1),s("div",_t,[(r(!0),v(V,null,H(e.tags,g=>(r(),U(Ae(Q(g)?a(ve):"span"),{key:g,to:Q(g)?ue(g):void 0,class:E(["blog-tag",{"blog-tag--link":Q(g)}])},{default:me(()=>[W(h(g),1)]),_:2},1032,["to","class"]))),128))]),B(a(ve),{to:e.to,class:"blog-card-btn"},{default:me(()=>[...l[5]||(l[5]=[W(" READ ARTICLE â ",-1)])]),_:1},8,["to"])])],2))),128))]),s("div",{ref_key:"sentinel",ref:Y,"aria-hidden":"true",class:"blog-sentinel"},null,512),a(J)?(r(),v("div",kt,[s("button",{type:"button",class:"blog-more-btn",onClick:se}," SHOW "+h(Math.min(u.step,a(ie)))+" MORE ",1)])):w("",!0),a(M).length===0?(r(),v("div",wt,[s("div",$t,[B(t,{name:"lucide:inbox"})]),a(ne)?(r(),v(V,{key:0},[l[6]||(l[6]=s("h3",{class:"empty-title"}," NOTHING MATCHES ",-1)),l[7]||(l[7]=s("p",{class:"empty-text"}," No article matches every filter you have applied. ",-1)),s("button",{type:"button",class:"blog-more-btn",onClick:ae}," CLEAR FILTERS ")],64)):(r(),v(V,{key:1},[s("h3",Ct,h(u.emptyTitle),1),s("p",Tt,h(u.emptyText),1)],64))])):w("",!0)])}}}),Mt=Object.assign(he(xt,[["__scopeId","data-v-ef963e1e"]]),{__name:"BlogCardGrid"});function At(u){return{slug:u.path.replace(/^\/blog\//,""),to:u.path,title:u.title,excerpt:u.description??"",date:u.date,readingTime:u.readingTime??null,tags:u.tags??[],author:u.author??void 0,cover:u.cover,coverAlt:u.coverAlt,thumb:u.thumb,thumbAlt:u.thumbAlt}}async function Ot(u){const{data:b}=await Se(u,()=>De("blog").order("date","DESC").all(),"$vFps66Ot-s"),o=i(()=>b.value??[]),y=i(()=>o.value.map(At));return{posts:o,cards:y}}export{Mt as _,At as t,Ot as u};
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.