PageSourceSearch

https://app.menox.fi/assets/FestivalHub-CJEDt75_.js

js menox.fi collected 2026-10-02 00:23:32 UTC 9,638 bytes, 1 lines download raw bytes

1import{j as a}from"./vendor-ui-BR9TUZQG.js";import{f as e,r as i,L as t}from"./vendor-react-DINMFIfP.js";import{f as s,j as o,bS as n,b1 as r,aU as l,p as m,dc as u,B as d,d as p,dI as h,E as c,$ as j}from"./index-DIHYC4sg.js";import{u as k}from"./vendor-i18n-CJBVAml9.js";import"./vendor-supabase-D0bIHsuJ.js";import"./vendor-charts-CE9rMN4J.js";const x={helsinki:"Uusimaa",espoo:"Uusimaa",vantaa:"Uusimaa",kauniainen:"Uusimaa","hyvinkää":"Uusimaa","järvenpää":"Uusimaa",kerava:"Uusimaa",tuusula:"Uusimaa","nurmijärvi":"Uusimaa",vihti:"Uusimaa",lohja:"Uusimaa",porvoo:"Uusimaa",loviisa:"Uusimaa",raasepori:"Uusimaa",hanko:"Uusimaa",inkoo:"Uusimaa",kirkkonummi:"Uusimaa",sipoo:"Uusimaa","mäntsälä":"Uusimaa",turku:"Varsinais-Suomi",naantali:"Varsinais-Suomi",raisio:"Varsinais-Suomi",kaarina:"Varsinais-Suomi",salo:"Varsinais-Suomi",uusikaupunki:"Varsinais-Suomi",loimaa:"Varsinais-Suomi",parainen:"Varsinais-Suomi",somero:"Varsinais-Suomi",pori:"Satakunta",rauma:"Satakunta","kankaanpää":"Satakunta",ulvila:"Satakunta",huittinen:"Satakunta",harjavalta:"Satakunta","hämeenlinna":"Kanta-Häme","riihimäki":"Kanta-Häme",forssa:"Kanta-Häme",janakkala:"Kanta-Häme",hattula:"Kanta-Häme",tampere:"Pirkanmaa",nokia:"Pirkanmaa","ylöjärvi":"Pirkanmaa",kangasala:"Pirkanmaa",pirkkala:"Pirkanmaa","lempäälä":"Pirkanmaa",valkeakoski:"Pirkanmaa",sastamala:"Pirkanmaa",akaa:"Pirkanmaa",ikaalinen:"Pirkanmaa","mänttä":"Pirkanmaa","mänttä-vilppula":"Pirkanmaa",lahti:"Päijät-Häme",hollola:"Päijät-Häme",orimattila:"Päijät-Häme",heinola:"Päijät-Häme",asikkala:"Päijät-Häme",kotka:"Kymenlaakso",kouvola:"Kymenlaakso",hamina:"Kymenlaakso",lappeenranta:"Etelä-Karjala",imatra:"Etelä-Karjala",mikkeli:"Etelä-Savo",savonlinna:"Etelä-Savo","pieksämäki":"Etelä-Savo",kuopio:"Pohjois-Savo",varkaus:"Pohjois-Savo",iisalmi:"Pohjois-Savo","siilinjärvi":"Pohjois-Savo",suonenjoki:"Pohjois-Savo",joensuu:"Pohjois-Karjala",kitee:"Pohjois-Karjala",lieksa:"Pohjois-Karjala",nurmes:"Pohjois-Karjala",outokumpu:"Pohjois-Karjala","jyväskylä":"Keski-Suomi","jämsä":"Keski-Suomi","äänekoski":"Keski-Suomi",laukaa:"Keski-Suomi","saarijärvi":"Keski-Suomi",keuruu:"Keski-Suomi",muurame:"Keski-Suomi","seinäjoki":"Etelä-Pohjanmaa",kauhajoki:"Etelä-Pohjanmaa",kauhava:"Etelä-Pohjanmaa",lapua:"Etelä-Pohjanmaa","alajärvi":"Etelä-Pohjanmaa",ilmajoki:"Etelä-Pohjanmaa",kurikka:"Etelä-Pohjanmaa",vaasa:"Pohjanmaa",pietarsaari:"Pohjanmaa","närpiö":"Pohjanmaa",mustasaari:"Pohjanmaa",kristiinankaupunki:"Pohjanmaa",uusikaarlepyy:"Pohjanmaa",kokkola:"Keski-Pohjanmaa",kannus:"Keski-Pohjanmaa",oulu:"Pohjois-Pohjanmaa",kempele:"Pohjois-Pohjanmaa",liminka:"Pohjois-Pohjanmaa","tyrnävä":"Pohjois-Pohjanmaa",muhos:"Pohjois-Pohjanmaa","utajärvi":"Pohjois-Pohjanmaa",ii:"Pohjois-Pohjanmaa",raahe:"Pohjois-Pohjanmaa",ylivieska:"Pohjois-Pohjanmaa",nivala:"Pohjois-Pohjanmaa","haapajärvi":"Pohjois-Pohjanmaa",oulainen:"Pohjois-Pohjanmaa",kuusamo:"Pohjois-Pohjanmaa","pudasjärvi":"Pohjois-Pohjanmaa",haukipudas:"Pohjois-Pohjanmaa",kiiminki:"Pohjois-Pohjanmaa","pyhäjoki":"Pohjois-Pohjanmaa",kalajoki:"Pohjois-Pohjanmaa",kajaani:"Kainuu",sotkamo:"Kainuu",kuhmo:"Kainuu",suomussalmi:"Kainuu",rovaniemi:"Lappi",kemi:"Lappi",tornio:"Lappi","sodankylä":"Lappi","kittilä":"Lappi","kemijärvi":"Lappi",inari:"Lappi",ivalo:"Lappi","saariselkä":"Lappi",levi:"Lappi","ylläs":"Lappi",ruka:"Lappi","pyhätunturi":"Lappi"};const v=["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],g=["January","February","March","April","May","June","July","August","September","October","November","December"];const P=()=>{const{t:P,i18n:f}=k(),b=s();e();const{selectedCityObj:y}=o(),[S,K]=i.useState([]),[_,N]=i.useState(!0),[H,L]=i.useState(null),U="fi"===f.language?v:g;i.useEffect(()=>{(async()=>{N(!0);const a=(new Date).toISOString().split("T")[0],{data:e,error:i}=await j.from("events").select("id, title, slug, description, image_url, start_date, start_time, end_date, category, tags, location, location_details, organizer_id, maakunta, city, is_sold_out, profiles!events_organizer_id_fkey(organizer_name)").eq("is_published",!0).gte("end_date",a).contains("tags",JSON.stringify(["festari"])).order("start_date",{ascending:!0}).limit(200);!i&&e&&K(e),N(!1)})()},[]);const w=i.useMemo(()=>H?S.filter(a=>
1function(a){if(a.maakunta&&a.maakunta.trim().length>0)return a.maakunta;var e,i;const t=(a.city||((e=a.location)?((null==(i=e.split(",").pop())?void 0:i.trim())??"").replace(/^\d{5}\s+/,"").trim():"")).toLowerCase().trim();return t?x[t]??null:null}(a)===H):S,[S,H]),E=i.useMemo(()=>function(a){const e=new Map,i=new Date,t=`${i.getFullYear()}-${String(i.getMonth()).padStart(2,"0")}`;for(const s of a){const a=new Date(s.start_date),o=new Date(s.end_date);let n;n=a<i&&o>=i?t:`${a.getFullYear()}-${String(a.getMonth()).padStart(2,"0")}`,e.has(n)||e.set(n,[]),e.get(n).push(s)}return e}(w),[w]),z=i.useMemo(()=>Array.from(E.keys()).sort(),[E]),M=(new Date).getFullYear(),D={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Menox",item:n()},{"@type":"ListItem",position:2,name:"Festarit Suomessa",item:n("/festarit-suomessa")}]};return a.jsxs(a.Fragment,{children:[a.jsxs(r,{children:[a.jsx("title",{children:P("festivalHub.seoTitle")}),a.jsx("meta",{name:"description",content:P("festivalHub.seoDescription")}),a.jsx("link",{rel:"canonical",href:n("/festarit-suomessa")}),a.jsx("meta",{property:"og:title",content:P("festivalHub.seoTitle")}),a.jsx("meta",{property:"og:description",content:P("festivalHub.seoDescription")}),a.jsx("meta",{property:"og:url",content:n("/festarit-suomessa")}),a.jsx("script",{type:"application/ld+json",children:JSON.stringify(D)})]}),b?a.jsx(l,{}):a.jsx(m,{}),a.jsxs("section",{className:"relative w-full bg-background",children:[a.jsxs("div",{className:"absolute inset-x-0 -top-32 -bottom-64 pointer-events-none","aria-hidden":"true",children:[a.jsx("div",{className:"absolute -left-32 top-0 w-[520px] h-[520px] rounded-full bg-primary/15 blur-[140px]"}),a.jsx("div",{className:"absolute right-0 top-40 w-[420px] h-[420px] rounded-full bg-[#EE9743]/10 blur-[140px]"})]}),a.jsxs("div",{className:"relative z-10 mx-auto max-w-3xl px-4 md:px-6 pt-[calc(env(safe-area-inset-top,0px)+88px)] md:pt-32 pb-6 md:pb-10 text-center",children:[a.jsx("nav",{"aria-label":"Breadcrumb",className:"mb-6 md:mb-8",children:a.jsxs("ol",{className:"flex items-center justify-center gap-1.5 text-xs text-muted-foreground",children:[a.jsx("li",{children:a.jsx(t,{to:"/",className:"hover:text-foreground transition-colors",children:P("searchResults.cityHero.breadcrumbHome")})}),a.jsx("li",{className:"text-muted-foreground/50",children:"/"}),a.jsx("li",{className:"text-foreground font-medium",children:P("festivalHub.title")})]})}),a.jsx("h1",{className:"font-bold leading-[1.05] tracking-tight",children:a.jsx("span",{className:"text-3xl md:text-5xl bg-gradient-to-r from-[hsl(342,82%,59%)] to-[hsl(35,82%,59%)] bg-clip-text text-transparent",children:P("festivalHub.title")})}),a.jsx("div",{className:"mt-4 mx-auto h-0.5 w-12 rounded-full bg-gradient-to-r from-[hsl(342,82%,59%)] to-[hsl(35,82%,59%)]"}),a.jsx("p",{className:"mt-5 text-sm md:text-base text-muted-foreground max-w-5xl mx-auto leading-relaxed",children:P("festivalHub.description")})]}),a.jsx("div",{className:"relative z-10 mx-auto max-w-5xl px-4 md:px-6 pb-8 md:pb-12",children:a.jsx("div",{className:"rounded-3xl bg-card/60 backdrop-blur-md border border-border/60 p-3 md:p-4",children:a.jsxs("div",{className:"flex flex-wrap gap-2",children:[a.jsx(d,{type:"button",size:"sm",variant:null===H?"default":"outline",onClick:()=>L(null),className:p("h-8 md:h-10 rounded-full px-4 text-xs md:text-sm font-medium border transition-colors",null===H?"bg-gradient-to-r from-[hsl(342,82%,59%)] to-[hsl(35,82%,59%)] text-white border-transparent hover:opacity-90":"border-border bg-card text-foreground hover:bg-accent hover:text-accent-foreground"),children:P("festivalHub.allRegions")}),u.map(e=>{const i=H===e;return a.jsx(d,{type:"button",size:"sm",variant:i?"default":"outline",onClick:()=>L(e),className:p("h-8 md:h-10 rounded-full px-4 text-xs md:text-sm font-medium border transition-colors",i?"bg-gradient-to-r from-[hsl(342,82%,59%)] to-[hsl(35,82%,59%)] text-white border-transparent hover:opacity-90":"border-border bg-card text-foreground hover:bg-accent hover:text-accent-foreground"),children:e},e)})]})})})]}),a.jsx("div",{className:"mx-auto md:max-w-[1600px] pl-4 pr-2 md:pl-[60px] md:pr-4 pb-24 pt-2 md:pt-4",children:_?a.jsx("div",{className:"text-center py-12",children:P("events.loading")}):0===z.length?a.jsx("div",{className:"text-center py-12 text-muted-foreground",children:P("festivalHub.noFestivals")}):a.jsx("div",{className:"space-y-10",children:z.map(e=>{const i=E.get(e),[t,s]=e.split("-"),o=parseInt(t,10),n=parseInt(s,10),r=o===M?U[n]:`${U[n]} ${o}`,l=y?h(i,y.lat,y.lon):i;return a.jsxs("section",{children:[a.jsx("h2",{className:"text-2xl font-semibold mb-4",children:r}),a.jsx("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 md:gap-4",children:l.map(e=>{var i;return a.jsx(c,{id:e.id,slug:e.slug,title:e.title,image:e.image_url||void 0,date:e.start_date,time:e.start_time,endDate:e.end_date,endTime:void 0,category:e.category,tags:Array.isArray(e.tags)?e.tags:[],is_sold_out:e.is_sold_out,organizer_id:e.organizer_id,organizer_name:(null==(i=e.profiles)?void 0:i.organizer_name)||void 0,location:e.location,city:e.city},e.id)})})]},e)})})})]})};export{P 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.