1import{r as g,j as e}from"./vendor-react-EtBdcxzB.js";import{S as _}from"./SectionLabel-Bc9A66bh.js";import{c as I,z as V,a3 as M,a4 as Y,E as W,u as X,aj as Z,M as J,ag as K,ak as Q,v as ee,a9 as se,s as ae,al as te,a1 as ne}from"./main-nkazyCpV.js";import{C as q}from"./CollapsibleCard-BlPI6jw9.js";import{D as H}from"./DataErrorState-D9g-1Bbk.js";import{h as L,e as k,w as C,i as v,j as y,l as U,k as oe}from"./formatters-DEeARjJC.js";import{B as re}from"./baby-CXeO_vRc.js";import{C as le}from"./chevron-down-DGeXeP3c.js";import{G as ie}from"./graduation-cap-rPmuCFxe.js";import{N as de}from"./NavPill-BMvH7389.js";import{P as ce}from"./party-popper-BqxK82qZ.js";import"./minimize-2-BXJshPtz.js";/** 2 * @license lucide-react v0.469.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const me=I("CalendarPlus",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M16 19h6",key:"xwg31i"}],["path",{d:"M19 16v6",key:"tddt3s"}]]);/** 7 * @license lucide-react v0.469.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const xe=I("ImageDown",[["path",{d:"M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21",key:"9csbqa"}],["path",{d:"m14 19 3 3v-5.5",key:"9ldu5r"}],["path",{d:"m17 22 3-3",key:"1nkfve"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]);/** 12 * @license lucide-react v0.469.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const ue=I("Printer",[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]]),pe=()=>e.jsxs("div",{className:"rounded-xl border border-border bg-card/50 p-5 animate-pulse",children:[e.jsx("div",{className:"h-4 w-56 rounded bg-muted-foreground/15 mb-3"}),e.jsx("div",{className:"h-[180px] rounded bg-muted-foreground/8"})]});function he(){var t;const{data:s,error:o,mutate:c}=V("festivos-escolar"),[m,u]=g.useState(!1);return s?e.jsxs(q,{cardId:"calendario-escolar",className:"glass",title:e.jsxs(e.Fragment,{children:[e.jsx(ie,{className:"h-4 w-4 text-primary"})," Calendario escolar ",s.curso]}),description:"Inicio y fin de las actividades lectivas, vacaciones y dÃas no lectivos en Asturias.",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-left text-muted-foreground border-b border-border",children:[e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Enseñanza"}),e.jsx("th",{className:"py-2 pr-3 font-medium whitespace-nowrap",children:"Inicio"}),e.jsx("th",{className:"py-2 font-medium whitespace-nowrap",children:"Fin"})]})}),e.jsx("tbody",{children:s.lectivo.map(n=>e.jsxs("tr",{className:"border-b border-border/50",children:[e.jsx("td",{className:"py-2 pr-3",children:n.etapa}),e.jsx("td",{className:"py-2 pr-3 whitespace-nowrap font-medium",children:L(n.inicio)}),e.jsx("td",{className:"py-2 whitespace-nowrap font-medium",children:L(n.fin)})]},n.etapa))})]})}),e.jsxs("div",{className:"mt-4",children:[e.jsx("h3",{className:"text-base font-semibold mb-2",children:"Vacaciones"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:s.vacaciones.map(n=>e.jsxs("span",{className:"inline-flex rounded-full bg-primary/10 text-foreground px-3 py-1 text-sm",children:[e.jsxs("strong",{className:"mr-1.5",children:[n.name,":"]})," del ",L(n.from)," al ",L(n.to)]},n.name))})]}),e.jsxs("div",{className:"mt-4",children:[e.jsx("h3",{className:"text-base font-semibold mb-2",children:"DÃas no lectivos"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:s.noLectivos.map(n=>e.jsxs("span",{className:"inline-flex rounded-full border border-border px-3 py-1 text-sm",children:[k(n)," ",e.jsxs("span",{className:"text-muted-foreground ml-1",children:["(",M[C(n)].toLowerCase(),")"]})]},n))}),(t=s.notas)==null?void 0:t.map(n=>e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:n},n))]}),s.infantil03&&e.jsxs("div",{className:"mt-4",children:[e.jsxs("button",{onClick:()=>u(n=>!n),className:"inline-flex items-center gap-1.5 text-base font-semibold hover:text-primary transition-colors",children:[e.jsx(re,{className:"h-4 w-4 text-primary"}),"Escuelas de Educación Infantil (0-3 años)",e.jsx(le,{className:`h-4 w-4 transition-transform ${m?"rotate-180":""}`})]}),m&&e.jsxs("div",{className:"mt-2 text-sm space-y-2",children:[e.jsxs("p",{children:["Asistencia del ",e.jsx("strong",{children:k(s.infantil03.inicio)})," al"," ",e.jsx("strong",{children:k(s.infantil03.fin)}),s.infantil03.vacacionesDesde&&e.jsxs(e.Fragment,{children:["; las vacaciones de las escuelas empiezan el ",e.jsx("strong",{children:k(s.infantil03.vacacionesDesde)})]}),"."]}),e.jsx("p",{className:"text-muted-foreground",children:"El calendario de las escuelas arranca unos dÃas antes de la asistencia y termina después: los laborables de esos márgenes (primeros de septiembre, últimos de julio) figuran en el BOPA como no lectivos. Y a diferencia del resto de enseñanzas, las escuelas 0-3 no cierran en Navida
16d ni Semana Santa â solo los dÃas sueltos listados."}),e.jsx("p",{className:"font-semibold",children:"DÃas no lectivos de las escuelas 0-3"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:s.infantil03.noLectivos.map(n=>e.jsxs("span",{className:"inline-flex rounded-full border border-border/60 px-2.5 py-0.5 text-sm text-muted-foreground",children:[k(n)," ",e.jsxs("span",{className:"ml-1 opacity-70",children:["(",M[C(n)].toLowerCase(),")"]})]},n))})]})]}),e.jsxs("p",{className:"mt-5 text-sm text-muted-foreground",children:["Fuente: ",s.source]})]}):o?e.jsx(H,{onRetry:c,className:"min-h-[240px]"}):e.jsx(pe,{})}function fe(s,o){return Math.round((new Date(`${o}T12:00:00Z`)-new Date(`${s}T12:00:00Z`))/864e5)}function be(s,o){var u;if(!(s!=null&&s.regional))return[];const c=s.regional.map(t=>({...t,ambito:t.scope})),m=o&&((u=s.locales)!=null&&u[o])?s.locales[o].fiestas.map(t=>({...t,ambito:"local"})):[];return[...c,...m].sort((t,n)=>t.date.localeCompare(n.date))}function ge(s,o){return s.find(c=>c.date>=o)??null}function je(s){return s.filter(o=>{const c=C(o.date);return c===0||c===6}).length}function Ne(s){const o=new Map(s.map(t=>[t.date,t])),c=t=>{const n=C(t);return n===0||n===6||o.has(t)},m=new Set,u=[];for(const t of s){const n=C(t.date);if(n===0||n===6)continue;let i=t.date;for(;c(v(i,-1));)i=v(i,-1);let x=t.date;for(;c(v(x,1));)x=v(x,1);const h=fe(i,x)+1,f=`${i}|${x}`;if(m.has(f))continue;const l=[];for(let r=i;r<=x;r=v(r,1)){const b=o.get(r);b&&l.push(b.name)}if(h>=3)m.add(f),u.push({from:i,to:x,dias:h,coste:0,festivos:l,texto:`${h} dÃas seguidos sin gastar vacaciones`});else if(n===2){const r=v(t.date,-3);m.add(`${r}|${t.date}`),u.push({from:r,to:t.date,dias:4,coste:1,festivos:l,texto:"Cogiendo el lunes: 4 dÃas seguidos con 1 dÃa de vacaciones"})}else if(n===4){const r=v(t.date,3);m.add(`${t.date}|${r}`),u.push({from:t.date,to:r,dias:4,coste:1,festivos:l,texto:"Cogiendo el viernes: 4 dÃas seguidos con 1 dÃa de vacaciones"})}else if(n===3){const r=v(t.date,4);m.add(`${t.date}|${r}`),u.push({from:t.date,to:r,dias:5,coste:2,festivos:l,texto:"Acueducto: cogiendo jueves y viernes, 5 dÃas con 2 de vacaciones"})}}return u.sort((t,n)=>t.from.localeCompare(n.from))}const D={nacional:{label:"Nacional",cell:"bg-rose-600 text-white",badge:"bg-rose-600/15 text-rose-700 dark:text-rose-400",text:"text-rose-600 dar
16k:text-rose-400",pill:"bg-rose-600 text-white"},autonomico:{label:"Autonómico",cell:"bg-amber-500 text-black",badge:"bg-amber-500/20 text-amber-700 dark:text-amber-400",text:"text-amber-600 dark:text-amber-400",pill:"bg-amber-500 text-black"},local:{label:"Local",cell:"bg-emerald-500 text-white",badge:"bg-emerald-500/15 text-emerald-700 dark:text-emerald-400",text:"text-emerald-600 dark:text-emerald-400",pill:"bg-emerald-500 text-white"}},ve=["L","M","X","J","V","S","D"];function ye({year:s,marks:o,todayIso:c}){const m=g.useMemo(()=>Array.from({length:12},(u,t)=>{const n=t+1,x=(new Date(Date.UTC(s,t,1)).getUTCDay()+6)%7,h=new Date(Date.UTC(s,n,0)).getUTCDate(),f=[...Array.from({length:x},()=>null),...Array.from({length:h},(r,b)=>{const E=b+1;return`${s}-${String(n).padStart(2,"0")}-${String(E).padStart(2,"0")}`})];for(;f.length<42;)f.push(null);const l=f.filter(r=>r&&(o==null?void 0:o.has(r))).map(r=>({iso:r,...o.get(r)}));return{month:n,cells:f,festivos:l}}),[s,o]);return e.jsx("div",{className:"grid gap-4 grid-cols-1 sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4",children:m.map(({month:u,cells:t,festivos:n})=>e.jsxs("div",{className:"rounded-lg border border-border/60 p-2.5",children:[e.jsx("p",{className:"text-sm font-semibold mb-1.5 text-center",children:Y[u]}),e.jsxs("div",{className:"grid grid-cols-7 gap-0.5 text-center",children:[ve.map((i,x)=>e.jsx("span",{className:`text-xs font-medium ${x>=5?"text-muted-foreground/50":"text-muted-foreground"}`,children:i},i+x)),t.map((i,x)=>{if(!i)return e.jsx("span",{},`e${x}`);const h=o==null?void 0:o.get(i),l=x%7>=5,r=i===c;let b="mx-auto h-7 w-full max-w-8 grid place-items-center rounded-md text-sm tabular-nums";return h?b+=` ${D[h.ambito].cell} font-semibold`:l&&(b+=" bg-muted/60 text-muted-foreground/70"),r&&(b+=" cal-today ring-2 ring-foreground/50"),e.jsx("span",{className:b,title:h?h.name:void 0,children:parseInt(i.slice(8),10)},i)})]}),n.length>0&&e.jsx("div",{className:"mt-2 pt-1.5 border-t border-border/40 space-y-0.5",children:n.map(i=>e.jsxs("p",{className:"text-sm leading-snug",children:[e.jsx("span",{className:`font-semibold ${D[i.ambito].text}`,children:y(i.iso)})," ",e.jsxs("span",{className:"text-muted-foreground",children:["â ",i.name??"Festivo local"]})]},i.iso+i.ambito))})]},u))})}const we=()=>e.jsxs("div",{className:"rounded-xl border border-border bg-card/50 p-5 animate-pulse",children:[e.jsx("div",{className:"h-4 w-64 rounded bg-muted-foreground/15 mb-3"}),e.jsx("div",{className:"h-[320px] rounded bg-muted-foreground/8"})]});function Ce(s,o){return s.slice(0,7)===o.slice(0,7)?`Del ${parseInt(s.slice(8),10)} al ${y(o)}`:`Del ${y(s)} al ${y(o)}`}function $e(){const s=document.getElementById("lamina-calendario");if(!s)return;const o=document.createComment("lamina-placeholder");s.parentNode.insertBefore(o,s),document.body.appendChild(s),document.body.classList.add("print-lamina");const c=()=>{document.body.classList.remove("print-lamina"),o.parentNode.insertBefore(s,o),o.remove(),window.removeEventListener("afterprint",c)};window.addEventListener("afterprint",c),window.print()}function ke(){var R;const{data:s,error:o,mutate:c}=V("festivos"),m=W("agenda"),{navigateTo:u}=X(),[t,n]=g.useState(null),[i,x]=g.useState(!1),h=g.useRef(!1);g.useEffect(()=>{if(h.current||!(s!=null&&s.locales))return;h.current=!0;const a=new URLSearchParams(window.location.search).get("concejo");if(!a)return;const d=s.locales[a]?a:Object.keys(s.locales).find(p=>s.locales[p].name===a);d&&n(d)},[s]);const f=a=>{var d,p;n(a),te("concejo",a?(p=(d=s==null?void 0:s.locales)==null?void 0:d[a])==null?void 0:p.name:null)},l=t?(R=s==null?void 0:s.locales)==null?void 0:R[t]:null,r=g.useMemo(()=>be(s,t),[s,t]),b=g.useMemo(()=>new Map(r.map(a=>[a.date,{ambito:a.ambito,name:a.name??"Festivo local"}])),[r]),E=g.useMemo(()=>Ne(r),[r]),T=g.useMemo(()=>s?Object.entries(s.locales).map(([a,d])=>({slug:a,name:d.name})):[],[s]),A=g.useMemo(()=>{var p,j;const a=t&&((j=(p=s==null?void 0:s.locales)==null?void 0:p[t])==null?void 0:j.name);if(!a||!(m!=null&&m.items))return[];const d=U();return m.items.filter(N=>N.type==="evento"&&N.concejo===a&&(N.endDate??N.iso)>=d).sort((N,$)=>N.iso.localeCompare($.iso))},[m,s,t]);if(!s)return o?e.jsx(H,{onRetry:()=>c()}):e.jsx(we,{});async function z(){const a=document.getElementById("lamina-calendario");if(!a)return;x(!0);const d=document.createElement("div");
16d.className="capture-lamina-host";const p=a.cloneNode(!0);p.removeAttribute("id"),d.appendChild(p),document.body.appendChild(d);try{const{domToBlob:j}=await ne(async()=>{const{domToBlob:F}=await import("./index-B0_Hw-zY.js");return{domToBlob:F}},[]);await new Promise(F=>requestAnimationFrame(()=>requestAnimationFrame(F)));const N=await j(p,{scale:2,type:"image/png",backgroundColor:getComputedStyle(document.body).backgroundColor}),$=document.createElement("a");$.download=`calendario-laboral-${t??"asturias"}-${s.year}.png`,$.href=URL.createObjectURL(N),$.click(),URL.revokeObjectURL($.href)}catch(j){console.warn("Export PNG failed:",j)}finally{d.remove(),x(!1)}}const B=U(),w=ge(r,B),S=w?oe(w.date):null,P=je(r),G=`${Q}?action=festivos-ics${t?`&concejo=${t}`:""}`,O=l?l.name:"Asturias";return e.jsxs(q,{cardId:"calendario-festivos",className:"glass",title:e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"h-4 w-4 text-primary"})," Calendario laboral de ",O," ",s.year]}),description:l?`Los 12 festivos de Asturias más los ${l.fiestas.length} festivos locales de ${l.name}.`:"Los 12 festivos nacionales y autonómicos. Elige tu concejo para añadir sus festivos locales.",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mb-4",children:[e.jsx("div",{className:"w-full sm:w-72",children:e.jsx(Z,{municipalities:T,onSelect:a=>{const d=T.find(p=>p.name===a);d&&f(d.slug)}})}),l&&e.jsxs("button",{onClick:()=>f(null),className:"inline-flex items-center gap-1.5 h-9 rounded-md border border-border px-3 text-sm hover:bg-muted/50 transition-colors",children:[e.jsx(J,{className:"h-3.5 w-3.5 text-amber-500"}),l.name,e.jsx(K,{className:"h-3.5 w-3.5 text-muted-foreground"})]})]}),w&&e.jsx("div",{className:"rounded-lg border border-primary/30 bg-primary/5 px-4 py-3 mb-4",children:e.jsxs("p",{className:"text-base",children:["El próximo festivo",l?` en ${l.name}`:" en Asturias"," es el"," ",e.jsxs("strong",{children:[M[C(w.date)].toLowerCase()," ",k(w.date)]}),w.name?e.jsxs(e.Fragment,{children:[" â ",e.jsx("strong",{children:w.name})]}):null,"."," ",e.jsx("span",{className:"text-muted-foreground",children:S===0?"Es hoy.":S===1?"Es mañana.":`Faltan ${S} dÃas.`})]})}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4","data-print-hide":!0,children:[e.jsxs("a",{href:G,className:"inline-flex items-center gap-1.5 h-9 rounded-md border border-border px-3 text-sm hover:bg-muted/50 transition-colors",children:[e.jsx(me,{className:"h-4 w-4 text-primary"}),"Añadir a tu calendario (ICS)"]}),e.jsxs("button",{onClick:$e,className:"inline-flex items-center gap-1.5 h-9 rounded-md border border-border px-3 text-sm hover:bg-muted/50 transition-colors",children:[e.jsx(ue,{className:"h-4 w-4 text-primary"}),"Imprimir el calendario"]}),e.jsxs("button",{onClick:z,disabled:i,className:"inline-flex items-center gap-1.5 h-9 rounded-md border border-border px-3 text-sm hover:bg-muted/50 transition-colors disabled:opacity-60",children:[e.jsx(xe,{className:"h-4 w-4 text-primary"}),i?"Generandoâ¦":"Descargar imagen"]})]}),e.jsxs("div",{id:"lamina-calendario",children:[e.jsx("div",{className:"lamina-print-only mb-4 text-center",children:e.jsxs("h2",{className:"text-2xl font-bold tracking-tight",children:["Calendario laboral de ",O," ",s.year]})}),e.jsx(ye,{year:s.year,marks:b,todayIso:B}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 mt-4",children:[e.jsx("span",{className:`rounded-md px-3 py-1 text-sm font-semibold ${D.nacional.pill}`,children:"Nacional"}),e.jsx("span",{className:`rounded-md px-3 py-1 text-sm font-semibold ${D.autonomico.pill}`,children:"Autonómico"}),l?e.jsxs("span",{className:`rounded-md px-3 py-1 text-sm font-semibold ${D.local.pill}`,children:["Local · ",l.name]}):e.jsx("span",{className:"rounded-md px-3 py-1 text-sm text-muted-foreground border border-dashed border-border",children:"Local â elige tu concejo"})]}),e.jsx("div",{className:"lamina-print-only mt-4 text-sm",children:e.jsx("p",{className:"text-muted-foreground",children:"datoasturias.com/calendario-laboral · Fuente: BOE (festivos nacionales y autonómicos) y BOPA (festivos locales)"})})]}),e.jsx("div",{className:"overflow-x-auto mt-5",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-left text-muted-foreground border-b border-border",children:[e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Fecha"}),e.jsx("th",{className:"py-2 font-medium",children:"Festividad"})]})}),e.jsx("tbody",{children:r.map(a=>{const d=C(a.date),p=d===0||d===6,j=D[a.ambito];return e.jsxs("tr",{className:`border-b border-border/50 ${p?"opacity-70":""}`,children:[e.jsxs("td",{className:"py-2 pr-3 whitespace-nowrap",children:[e.jsx("span",{className:"font-medium",children:y(a.date)})," ",e.jsxs("span",{className:"text-muted-foreground",children:["(",M[d].toLowerCase(),")"]})]}),e.jsxs("td",{className:"py-2",children:[a.name??e.jsx("span",{className:"text-muted-foreground",children:"Festivo local"})," ",e.jsx("span",{className:`inline-flex whitespace-nowrap rounded-full px-2 py-0.5 text-xs font-medium align-middle ${j.badge}`,children:j.label}),p&&e.jsx("span",{className:"ml-1.5 text-xs text-muted-foreground",children:"cae en fin de semana"})]})]},`${a.date}-${a.ambito}`)})})]})}),(l==null?void 0:l.porLocalidad)&&e.jsxs("p",{className:"mt-2 text-sm text-muted-foreground",children:["En ",l.name," el BOPA designa festivos distintos por localidad o parroquia: cada fecha indica su ámbito en la denominación. No todos los festivos listados a
16plican a todo el concejo."]}),P>0&&e.jsxs("p",{className:"mt-2 text-sm text-muted-foreground",children:[P===1?"1 festivo cae":`${P} festivos caen`," en fin de semana este año."]}),E.length>0&&e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-base font-semibold mb-1.5 inline-flex items-center gap-1.5",children:[e.jsx(ee,{className:"h-4 w-4 text-primary"})," Puentes de ",s.year,l?` en ${l.name}`:""]}),e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:"Rachas de dÃas libres seguidos alrededor de cada festivo: en verde las que salen solas al encadenar con el fin de semana; en azul las que consigues pidiendo dÃas de vacaciones."}),e.jsx("ul",{className:"space-y-2",children:E.map(a=>e.jsxs("li",{className:"rounded-lg border border-border/60 px-3 py-2 text-sm flex flex-wrap items-baseline gap-x-2 gap-y-0.5",children:[e.jsx("span",{className:"font-medium",children:Ce(a.from,a.to)}),e.jsx("span",{className:`inline-flex rounded-full px-2 py-0.5 text-xs font-medium ${a.coste===0?"bg-emerald-500/15 text-emerald-700 dark:text-emerald-400":"bg-primary/15 text-primary"}`,children:a.coste===0?`${a.dias} dÃas gratis`:`${a.dias} dÃas por ${a.coste} de vacaciones`}),e.jsxs("span",{className:"text-muted-foreground",children:[a.texto," · ",a.festivos.filter(Boolean).join(" + ")]})]},a.from))})]}),l&&A.length>0&&e.jsxs("div",{className:"mt-6",children:[e.jsxs("h3",{className:"text-base font-semibold mb-1 inline-flex items-center gap-1.5",children:[e.jsx(ce,{className:"h-4 w-4 text-primary"})," Fiestas y eventos en ",l.name]}),e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:"De interés turÃstico y cultural â no son festivos laborales."}),e.jsx("ul",{className:"space-y-1",children:A.slice(0,8).map(a=>e.jsxs("li",{className:"text-sm flex gap-2 min-w-0",children:[e.jsxs("span",{className:"font-medium whitespace-nowrap",children:[y(a.iso),a.endDate&&a.endDate!==a.iso?` â ${y(a.endDate)}`:""]}),e.jsx("span",{className:"text-muted-foreground truncate min-w-0",title:a.title,children:a.title})]},a.iso+a.title))}),e.jsx("div",{className:"mt-2.5",children:e.jsxs(de,{href:"/agenda",onClick:()=>u("agenda"),children:[A.length>8?`+${A.length-8} más en la Agenda`:"Ver toda la agenda",e.jsx(se,{className:"h-3 w-3"})]})})]}),s.avanceProximo&&e.jsxs("div",{className:"mt-6 rounded-lg border border-border/60 px-4 py-3",children:[e.jsxs("h3",{className:"text-base font-semibold mb-1.5",children:["Avance ",s.avanceProximo.year]}),e.jsx("div",{className:"text-sm mb-2 space-y-0.5",children:s.avanceProximo.fiestas.map(a=>e.jsxs("p",{children:[e.jsx("strong",{children:y(a.date)})," ",e.jsxs("span",{className:"text-muted-foreground",children:["â ",a.name]})]},a.date))}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s.avanceProximo.note})]}),e.jsxs("p",{className:"mt-5 text-sm text-muted-foreground",children:["Fuentes: ",s.sources.regional," · ",s.sources.locales.replace(" (vÃa backend/data/fiestas.json)","")]})]})}function Re(){return e.jsxs(e.Fragment,{children:[e.jsx(_,{children:"Festivos y puentes"}),e.jsx(ke,{}),e.jsx(_,{children:"Calendario escolar"}),e.jsx(he,{})]})}export{Re as default};
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.