Add registration page, fix auth paths, and improve navigation

This commit is contained in:
Torsten Schulz (local)
2025-10-21 11:31:43 +02:00
parent 2b249577a7
commit f058516a3d
86 changed files with 2914 additions and 531 deletions

View File

@@ -1,5 +1,5 @@
{
"date": "2025-10-21T08:05:05.459Z",
"date": "2025-10-21T09:30:49.008Z",
"preset": "node-server",
"framework": {
"name": "nuxt",

View File

@@ -0,0 +1,6 @@
import{e as _,r as i,c as p,a as e,j as k,h as g,k as x,v,n as y,b as n,d,u,t as f,l as L,w as M,_ as V,o as m,m as b}from"#entry";import{u as z}from"./BHFrGoXk.js";import{A}from"./C8kQt0fa.js";import{C}from"./DaSgy0Cl.js";import{L as S}from"./CUq_0rkE.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const N=_("LockIcon",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]),T={class:"min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50"},B={class:"max-w-md w-full space-y-8"},j={class:"bg-white rounded-xl shadow-lg p-8"},D={key:0,class:"bg-red-50 border border-red-200 rounded-lg p-4"},I={class:"text-sm text-red-800 flex items-center"},P={key:1,class:"bg-green-50 border border-green-200 rounded-lg p-4"},q={class:"text-sm text-green-800 flex items-center"},E=["disabled"],H={class:"text-center"},K={class:"bg-primary-50 border border-primary-100 rounded-lg p-4"},U={class:"text-sm text-primary-800 text-center"},Q={__name:"login",setup(Z){const t=i({email:"",password:""}),o=i(!1),r=i(""),l=i(""),w=async()=>{o.value=!0,r.value="",l.value="";try{const a=await $fetch("/api/auth/login",{method:"POST",body:{email:t.value.email,password:t.value.password}});a.success&&(l.value="Anmeldung erfolgreich! Sie werden weitergeleitet...",setTimeout(()=>{a.user.role==="admin"||a.user.role==="vorstand"?b("/cms"):b("/mitgliederbereich")},1e3))}catch(a){r.value=a.data?.message||"Anmeldung fehlgeschlagen. Bitte prüfen Sie Ihre Zugangsdaten."}finally{o.value=!1}};return z({title:"Login - Harheimer TC"}),(a,s)=>{const h=V;return m(),p("div",T,[e("div",B,[s[6]||(s[6]=e("div",{class:"text-center"},[e("h2",{class:"text-3xl font-display font-bold text-gray-900"}," Mitglieder-Login "),e("p",{class:"mt-2 text-sm text-gray-600"}," Melden Sie sich an, um auf den Mitgliederbereich zuzugreifen ")],-1)),e("div",j,[e("form",{onSubmit:k(w,["prevent"]),class:"space-y-6"},[e("div",null,[s[2]||(s[2]=e("label",{for:"email",class:"block text-sm font-medium text-gray-700 mb-2"}," E-Mail-Adresse ",-1)),x(e("input",{id:"email","onUpdate:modelValue":s[0]||(s[0]=c=>t.value.email=c),type:"email",required:"",autocomplete:"email",class:y(["w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all",{"border-red-500":r.value}]),placeholder:"ihre-email@example.com"},null,2),[[v,t.value.email]])]),e("div",null,[s[3]||(s[3]=e("label",{for:"password",class:"block text-sm font-medium text-gray-700 mb-2"}," Passwort ",-1)),x(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=c=>t.value.password=c),type:"password",required:"",autocomplete:"current-password",class:y(["w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all",{"border-red-500":r.value}]),placeholder:"••••••••"},null,2),[[v,t.value.password]])]),r.value?(m(),p("div",D,[e("p",I,[n(u(A),{size:18,class:"mr-2"}),d(" "+f(r.value),1)])])):g("",!0),l.value?(m(),p("div",P,[e("p",q,[n(u(C),{size:18,class:"mr-2"}),d(" "+f(l.value),1)])])):g("",!0),e("button",{type:"submit",disabled:o.value,class:"w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center"},[o.value?(m(),L(u(S),{key:0,size:20,class:"mr-2 animate-spin"})):g("",!0),e("span",null,f(o.value?"Anmeldung läuft...":"Anmelden"),1)],8,E),e("div",H,[n(h,{to:"/passwort-vergessen",class:"text-sm text-primary-600 hover:text-primary-700 font-medium"},{default:M(()=>[...s[4]||(s[4]=[d(" Passwort vergessen? ",-1)])]),_:1})])],32)]),e("div",K,[e("p",U,[n(u(N),{size:16,class:"inline mr-1"}),s[5]||(s[5]=d(" Nur für Vereinsmitglieder. Kein Zugang? Kontaktieren Sie den Vorstand. ",-1))])])])])}}};export{Q as default};

View File

@@ -1,4 +1,4 @@
import{u as V}from"./Bhv0LDrk.js";import{U as L}from"./DkeYb0_S.js";import{C as D}from"./YJHbYJtA.js";import{e as z,r as _,f as k,g as F,c as a,a as t,F as w,i as S,n as h,b as d,u as m,d as c,o as i,t as n,h as b}from"#entry";import{S as H}from"./XZ6RV9KH.js";import{B as K}from"./CkzaQq3X.js";import{E as T}from"./Cx4UcKGu.js";/**
import{u as V}from"./BHFrGoXk.js";import{U as L}from"./DkeYb0_S.js";import{C as D}from"./YJHbYJtA.js";import{e as z,r as _,f as k,g as F,c as a,a as t,F as w,i as S,n as h,b as d,u as m,d as c,o as i,t as n,h as b}from"#entry";import{S as H}from"./XZ6RV9KH.js";import{B as K}from"./CkzaQq3X.js";import{E as T}from"./Cx4UcKGu.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.

View File

@@ -1 +1 @@
import{u as t}from"./Bhv0LDrk.js";import{c as s,j as e,o as r}from"#entry";const l={class:"min-h-full py-16 bg-gray-50"},p={__name:"herren",setup(i){return t({title:"Herrenmannschaften - Harheimer TC"}),(n,a)=>(r(),s("div",l,[...a[0]||(a[0]=[e('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Herrenmannschaften </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="space-y-8"><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">1. Herren</h3><p class="text-gray-600 mb-4">Liga: Bezirksoberliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">2. Herren</h3><p class="text-gray-600 mb-4">Liga: Bezirksliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">3. Herren</h3><p class="text-gray-600 mb-4">Liga: Kreisliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div></div></div>',1)])]))}};export{p as default};
import{u as t}from"./BHFrGoXk.js";import{c as s,p as e,o as r}from"#entry";const l={class:"min-h-full py-16 bg-gray-50"},p={__name:"herren",setup(i){return t({title:"Herrenmannschaften - Harheimer TC"}),(n,a)=>(r(),s("div",l,[...a[0]||(a[0]=[e('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Herrenmannschaften </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="space-y-8"><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">1. Herren</h3><p class="text-gray-600 mb-4">Liga: Bezirksoberliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">2. Herren</h3><p class="text-gray-600 mb-4">Liga: Bezirksliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">3. Herren</h3><p class="text-gray-600 mb-4">Liga: Kreisliga</p><p class="text-gray-600">Mannschaftsführer: Name folgt</p></div></div></div>',1)])]))}};export{p as default};

View File

@@ -1,2 +1,2 @@
import{u as y}from"./Bhv0LDrk.js";import{C as w}from"./YJHbYJtA.js";import{r as v,f as _,g as k,c as l,a as t,F as D,i as T,b as M,u as F,o as i,t as o,n as z}from"#entry";const S={class:"min-h-full py-16 bg-gray-50"},A={class:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"},H={key:0,class:"space-y-4"},J={class:"flex items-start space-x-4"},C={class:"flex-shrink-0 w-16 h-16 bg-primary-600 rounded-xl flex flex-col items-center justify-center text-white"},$={class:"text-2xl font-bold"},B={class:"text-xs"},E={class:"flex-1"},N={class:"flex items-start justify-between"},V={class:"text-xl font-semibold text-gray-900 mb-1"},j={class:"text-gray-600 mb-2"},L={class:"text-sm text-gray-500"},O={key:1,class:"text-center py-16 bg-white rounded-xl shadow-lg"},G={__name:"termine",setup(K){const x=v([]),g=_(()=>{const n=new Date;return n.setHours(0,0,0,0),x.value.filter(e=>new Date(e.datum)>=n).sort((e,s)=>new Date(e.datum)-new Date(s.datum))}),h=n=>new Date(n).getDate(),p=n=>{const e=new Date(n);return["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"][e.getMonth()]},b=n=>{const e=new Date(n),s=["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],a=["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];return`${s[e.getDay()]}, ${e.getDate()}. ${a[e.getMonth()]} ${e.getFullYear()}`},f=async()=>{try{const n=await fetch("/data/termine.csv");if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);const s=(await n.text()).split(`
import{u as y}from"./BHFrGoXk.js";import{C as w}from"./YJHbYJtA.js";import{r as v,f as _,g as k,c as l,a as t,F as D,i as T,b as M,u as F,o as i,t as o,n as z}from"#entry";const S={class:"min-h-full py-16 bg-gray-50"},A={class:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"},H={key:0,class:"space-y-4"},J={class:"flex items-start space-x-4"},C={class:"flex-shrink-0 w-16 h-16 bg-primary-600 rounded-xl flex flex-col items-center justify-center text-white"},$={class:"text-2xl font-bold"},B={class:"text-xs"},E={class:"flex-1"},N={class:"flex items-start justify-between"},V={class:"text-xl font-semibold text-gray-900 mb-1"},j={class:"text-gray-600 mb-2"},L={class:"text-sm text-gray-500"},O={key:1,class:"text-center py-16 bg-white rounded-xl shadow-lg"},G={__name:"termine",setup(K){const x=v([]),g=_(()=>{const n=new Date;return n.setHours(0,0,0,0),x.value.filter(e=>new Date(e.datum)>=n).sort((e,s)=>new Date(e.datum)-new Date(s.datum))}),h=n=>new Date(n).getDate(),p=n=>{const e=new Date(n);return["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"][e.getMonth()]},b=n=>{const e=new Date(n),s=["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],a=["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"];return`${s[e.getDay()]}, ${e.getDate()}. ${a[e.getMonth()]} ${e.getFullYear()}`},f=async()=>{try{const n=await fetch("/data/termine.csv");if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);const s=(await n.text()).split(`
`).filter(a=>a.trim()!=="");if(s.length<2)return;x.value=s.slice(1).map((a,P)=>{const r=[];let m="",u=!1;for(let d=0;d<a.length;d++){const c=a[d];c==='"'?u=!u:c===","&&!u?(r.push(m.trim()),m=""):m+=c}return r.push(m.trim()),r.length<4?null:{datum:r[0].trim(),titel:r[1].trim(),beschreibung:r[2].trim(),kategorie:r[3].trim()}}).filter(a=>a!==null)}catch(n){console.error("Fehler beim Laden der Termine:",n)}};return k(()=>{f()}),y({title:"Termine & Events - Harheimer TC"}),(n,e)=>(i(),l("div",S,[t("div",A,[e[2]||(e[2]=t("div",{class:"text-center mb-12"},[t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"}," Termine & Events "),t("div",{class:"w-24 h-1 bg-primary-600 mx-auto mb-6"}),t("p",{class:"text-xl text-gray-600 max-w-3xl mx-auto"}," Alle kommenden Termine und Veranstaltungen des Harheimer TC ")],-1)),g.value.length>0?(i(),l("div",H,[(i(!0),l(D,null,T(g.value,(s,a)=>(i(),l("div",{key:a,class:"bg-white rounded-xl shadow-lg p-6 hover:shadow-xl transition-shadow"},[t("div",J,[t("div",C,[t("span",$,o(h(s.datum)),1),t("span",B,o(p(s.datum)),1)]),t("div",E,[t("div",N,[t("div",null,[t("h3",V,o(s.titel),1),t("p",j,o(s.beschreibung),1),t("p",L,o(b(s.datum)),1)]),t("span",{class:z(["px-3 py-1 text-sm font-medium rounded-full",s.kategorie==="Turnier"?"bg-yellow-100 text-yellow-800":"bg-blue-100 text-blue-800"])},o(s.kategorie),3)])])])]))),128))])):(i(),l("div",O,[M(F(w),{size:64,class:"text-gray-400 mx-auto mb-4"}),e[0]||(e[0]=t("h3",{class:"text-2xl font-semibold text-gray-900 mb-2"},"Keine kommenden Termine",-1)),e[1]||(e[1]=t("p",{class:"text-gray-600"}," Aktuell sind keine Termine geplant. Schauen Sie bald wieder vorbei! ",-1))])),e[3]||(e[3]=t("div",{class:"mt-12 bg-primary-50 border border-primary-100 rounded-xl p-6"},[t("h3",{class:"text-lg font-semibold text-primary-900 mb-2"}," Hinweis "),t("p",{class:"text-primary-800"}," Alle Termine sind vorbehaltlich kurzfristiger Änderungen. Bei Fragen zu einzelnen Veranstaltungen kontaktieren Sie uns gerne. ")],-1))])]))}};export{G as default};

View File

@@ -1 +1 @@
import{c as n,a as e,j as r,b as o,d as s,w as l,_ as i,o as d}from"#entry";import{u as g}from"./Bhv0LDrk.js";const p={class:"min-h-full py-16 bg-gray-50"},x={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},m={class:"space-y-8"},u={class:"bg-primary-50 p-8 rounded-xl border border-primary-100"},h={__name:"jugend",setup(b){return g({title:"Jugendmannschaften - Harheimer TC"}),(y,t)=>{const a=i;return d(),n("div",p,[e("div",x,[t[4]||(t[4]=e("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Jugendmannschaften ",-1)),t[5]||(t[5]=e("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),e("div",m,[t[3]||(t[3]=r('<div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">Jugend 1 (U18)</h3><p class="text-gray-600 mb-4">Liga: Bezirksliga</p><p class="text-gray-600">Betreuer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">Jugend 2 (U15)</h3><p class="text-gray-600 mb-4">Liga: Kreisliga</p><p class="text-gray-600">Betreuer: Name folgt</p></div>',2)),e("div",u,[t[1]||(t[1]=e("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Jugendtraining ",-1)),t[2]||(t[2]=e("p",{class:"text-gray-600 mb-6"},[e("strong",null,"Dienstag & Donnerstag:"),s(" 17:00 - 19:00 Uhr"),e("br"),s(" Für Kinder und Jugendliche von 8-18 Jahren ")],-1)),o(a,{to:"/training",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:l(()=>[...t[0]||(t[0]=[s(" Mehr zum Training ",-1)])]),_:1})])])])])}}};export{h as default};
import{c as n,a as e,p as r,b as o,d as s,w as l,_ as i,o as d}from"#entry";import{u as g}from"./BHFrGoXk.js";const p={class:"min-h-full py-16 bg-gray-50"},x={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},m={class:"space-y-8"},u={class:"bg-primary-50 p-8 rounded-xl border border-primary-100"},h={__name:"jugend",setup(b){return g({title:"Jugendmannschaften - Harheimer TC"}),(y,t)=>{const a=i;return d(),n("div",p,[e("div",x,[t[4]||(t[4]=e("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Jugendmannschaften ",-1)),t[5]||(t[5]=e("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),e("div",m,[t[3]||(t[3]=r('<div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">Jugend 1 (U18)</h3><p class="text-gray-600 mb-4">Liga: Bezirksliga</p><p class="text-gray-600">Betreuer: Name folgt</p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-4">Jugend 2 (U15)</h3><p class="text-gray-600 mb-4">Liga: Kreisliga</p><p class="text-gray-600">Betreuer: Name folgt</p></div>',2)),e("div",u,[t[1]||(t[1]=e("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Jugendtraining ",-1)),t[2]||(t[2]=e("p",{class:"text-gray-600 mb-6"},[e("strong",null,"Dienstag & Donnerstag:"),s(" 17:00 - 19:00 Uhr"),e("br"),s(" Für Kinder und Jugendliche von 8-18 Jahren ")],-1)),o(a,{to:"/training",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:l(()=>[...t[0]||(t[0]=[s(" Mehr zum Training ",-1)])]),_:1})])])])])}}};export{h as default};

View File

@@ -0,0 +1 @@
import{y as a,z as s,A as r,B as u,C as o}from"#entry";function i(e){const t=e||s();return t?.ssrContext?.head||t?.runWithContext(()=>{if(r())return u(o)})}function x(e,t={}){const n=i(t.nuxt);if(n)return a(e,{head:n,...t})}export{x as u};

View File

@@ -0,0 +1,6 @@
import{e as x,r as p,f as n,g as u,c as y,a as e,t as a,d as m,b as r,w as l,_ as h,o as b,u as d}from"#entry";import{u as f}from"./BHFrGoXk.js";import{U as w}from"./DkeYb0_S.js";import{N as v}from"./DAACT36i.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const _=x("UserCogIcon",[["circle",{cx:"18",cy:"15",r:"3",key:"gjjjvw"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M10 15H6a4 4 0 0 0-4 4v2",key:"1nfge6"}],["path",{d:"m21.7 16.4-.9-.3",key:"12j9ji"}],["path",{d:"m15.2 13.9-.9-.3",key:"1fdjdi"}],["path",{d:"m16.6 18.7.3-.9",key:"heedtr"}],["path",{d:"m19.1 12.2.3-.9",key:"1af3ki"}],["path",{d:"m19.6 18.7-.4-1",key:"1x9vze"}],["path",{d:"m16.8 12.3-.4-1",key:"vqeiwj"}],["path",{d:"m14.3 16.6 1-.4",key:"1qlj63"}],["path",{d:"m20.7 13.8 1-.4",key:"1v5t8k"}]]),k={class:"min-h-full py-16 bg-gray-50"},j={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},L={class:"bg-white rounded-xl shadow-lg p-8 mb-8"},M={class:"text-2xl font-display font-bold text-gray-900 mb-4"},N={class:"text-gray-600 mb-4"},z={class:"font-semibold text-primary-600"},V={class:"text-sm text-gray-500"},B={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},C={class:"flex items-center mb-4"},I={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},U={class:"flex items-center mb-4"},D={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},E={class:"flex items-center mb-4"},H={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},T={__name:"index",setup(P){const i=p(null),g=n(()=>({admin:"Administrator",vorstand:"Vorstand",mitglied:"Mitglied"})[i.value?.role]||"Mitglied"),c=n(()=>i.value?.lastLogin?new Date(i.value.lastLogin).toLocaleString("de-DE"):"Erste Anmeldung");return u(async()=>{try{const s=await $fetch("/api/auth/status");s.isLoggedIn&&(i.value=s.user)}catch(s){console.error("Fehler beim Laden der Benutzerdaten:",s)}}),f({title:"Mitgliederbereich - Harheimer TC"}),(s,t)=>{const o=h;return b(),y("div",k,[e("div",j,[t[8]||(t[8]=e("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Mitgliederbereich ",-1)),t[9]||(t[9]=e("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),e("div",L,[e("h2",M," Willkommen, "+a(i.value?.name)+"! ",1),e("p",N,[t[0]||(t[0]=m(" Sie sind als ",-1)),e("span",z,a(g.value),1),t[1]||(t[1]=m(" angemeldet. ",-1))]),e("p",V," Letzter Login: "+a(c.value),1)]),e("div",B,[r(o,{to:"/mitgliederbereich/mitglieder",class:"bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"},{default:l(()=>[e("div",C,[e("div",I,[r(d(w),{size:24,class:"text-primary-600"})]),t[2]||(t[2]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Mitgliederliste",-1))]),t[3]||(t[3]=e("p",{class:"text-gray-600 text-sm"}," Kontaktdaten aller Vereinsmitglieder ",-1))]),_:1}),r(o,{to:"/mitgliederbereich/news",class:"bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"},{default:l(()=>[e("div",U,[e("div",D,[r(d(v),{size:24,class:"text-primary-600"})]),t[4]||(t[4]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Interne News",-1))]),t[5]||(t[5]=e("p",{class:"text-gray-600 text-sm"}," Neuigkeiten nur für Mitglieder ",-1))]),_:1}),r(o,{to:"/mitgliederbereich/profil",class:"bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"},{default:l(()=>[e("div",E,[e("div",H,[r(d(_),{size:24,class:"text-primary-600"})]),t[6]||(t[6]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Mein Profil",-1))]),t[7]||(t[7]=e("p",{class:"text-gray-600 text-sm"}," Profil bearbeiten und Passwort ändern ",-1))]),_:1})])])])}}};export{T as default};

View File

@@ -1,2 +1,2 @@
import{u as N}from"./Bhv0LDrk.js";import{T as k}from"./CrCcIvVp.js";import{r as C,f as u,g as R,c as a,a as t,F as x,i as f,n as h,b as _,u as w,t as d,d as z,o as n,h as V}from"#entry";const F={class:"min-h-full py-16 bg-gray-50"},G={class:"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8"},H={class:"mb-8 flex flex-wrap gap-4"},L=["onClick"],M={key:0,class:"space-y-8"},S={class:"text-2xl font-display font-bold text-gray-900 mb-6 flex items-center"},W={key:0,class:"mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg"},O={class:"text-yellow-800 font-medium"},$={key:1,class:"space-y-6"},A={class:"text-xl font-semibold text-gray-900 mb-4"},K={class:"grid gap-3"},P={class:"flex items-center"},Q={class:"font-semibold text-gray-900"},Y={key:0,class:"text-gray-600"},q={class:"text-sm text-gray-500"},I={key:1,class:"text-center py-12 bg-white rounded-xl shadow-lg"},U={class:"mt-12 bg-gradient-to-r from-primary-600 to-primary-700 rounded-xl p-8 text-white"},X={class:"grid md:grid-cols-3 gap-6"},Z={class:"text-center"},ee={class:"text-3xl font-bold mb-2"},te={class:"text-center"},re={class:"text-3xl font-bold mb-2"},se={class:"text-center"},le={class:"text-3xl font-bold mb-2"},ae={class:"mt-8 text-center"},ne={class:"bg-white rounded-xl shadow-lg p-8 border-l-4 border-primary-600"},oe={class:"text-2xl font-display font-bold text-gray-900 mb-4 flex items-center justify-center"},ge={__name:"vereinsmeisterschaften",setup(ie){const c=C([]),g=C("alle"),J=async()=>{try{const r=await fetch("/data/vereinsmeisterschaften.csv");if(!r.ok)return;const s=(await r.text()).split(`
import{u as N}from"./BHFrGoXk.js";import{T as k}from"./CrCcIvVp.js";import{r as C,f as u,g as R,c as a,a as t,F as x,i as f,n as h,b as _,u as w,t as d,d as z,o as n,h as V}from"#entry";const F={class:"min-h-full py-16 bg-gray-50"},G={class:"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8"},H={class:"mb-8 flex flex-wrap gap-4"},L=["onClick"],M={key:0,class:"space-y-8"},S={class:"text-2xl font-display font-bold text-gray-900 mb-6 flex items-center"},W={key:0,class:"mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg"},O={class:"text-yellow-800 font-medium"},$={key:1,class:"space-y-6"},A={class:"text-xl font-semibold text-gray-900 mb-4"},K={class:"grid gap-3"},P={class:"flex items-center"},Q={class:"font-semibold text-gray-900"},Y={key:0,class:"text-gray-600"},q={class:"text-sm text-gray-500"},I={key:1,class:"text-center py-12 bg-white rounded-xl shadow-lg"},U={class:"mt-12 bg-gradient-to-r from-primary-600 to-primary-700 rounded-xl p-8 text-white"},X={class:"grid md:grid-cols-3 gap-6"},Z={class:"text-center"},ee={class:"text-3xl font-bold mb-2"},te={class:"text-center"},re={class:"text-3xl font-bold mb-2"},se={class:"text-center"},le={class:"text-3xl font-bold mb-2"},ae={class:"mt-8 text-center"},ne={class:"bg-white rounded-xl shadow-lg p-8 border-l-4 border-primary-600"},oe={class:"text-2xl font-display font-bold text-gray-900 mb-4 flex items-center justify-center"},ge={__name:"vereinsmeisterschaften",setup(ie){const c=C([]),g=C("alle"),J=async()=>{try{const r=await fetch("/data/vereinsmeisterschaften.csv");if(!r.ok)return;const s=(await r.text()).split(`
`).filter(i=>i.trim()!=="");if(s.length<2)return;c.value=s.slice(1).map(i=>{const o=[];let l="",m=!1;for(let b=0;b<i.length;b++){const v=i[b];v==='"'?m=!m:v===","&&!m?(o.push(l.trim()),l=""):l+=v}return o.push(l.trim()),o.length<6?null:{jahr:o[0].trim(),kategorie:o[1].trim(),platz:o[2].trim(),spieler1:o[3].trim(),spieler2:o[4].trim(),bemerkung:o[5].trim()}}).filter(i=>i!==null)}catch(r){console.error("Fehler beim Laden der Vereinsmeisterschaften:",r)}},j=u(()=>[...new Set(c.value.map(e=>e.jahr).filter(e=>e!==""))].sort((e,s)=>s-e)),E=u(()=>g.value==="alle"?c.value:c.value.filter(r=>r.jahr===g.value)),y=u(()=>{const r={};return E.value.forEach(e=>{if(r[e.jahr]||(r[e.jahr]={kategorien:{},bemerkungen:null}),e.bemerkung&&e.bemerkung!==""){r[e.jahr].bemerkungen=e.bemerkung;return}e.kategorie&&e.kategorie!==""&&(r[e.jahr].kategorien[e.kategorie]||(r[e.jahr].kategorien[e.kategorie]=[]),r[e.jahr].kategorien[e.kategorie].push(e))}),r}),p=u(()=>{const r={};return Object.keys(y.value).sort((s,i)=>i-s).forEach(s=>{r[s]=y.value[s]}),r}),T=u(()=>Object.keys(y.value).sort((r,e)=>e-r)),D=u(()=>c.value.filter(r=>r.kategorie==="Einzel"&&r.platz==="1").length),B=u(()=>c.value.filter(r=>r.kategorie==="Doppel"&&r.platz==="1").length);return R(()=>{J()}),N({title:"Vereinsmeisterschaften - Harheimer TC"}),(r,e)=>(n(),a("div",F,[t("div",G,[e[9]||(e[9]=t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Vereinsmeisterschaften ",-1)),e[10]||(e[10]=t("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),e[11]||(e[11]=t("p",{class:"text-xl text-gray-600 mb-12"}," Die Ergebnisse unserer Vereinsmeisterschaften der letzten Jahre ",-1)),t("div",H,[(n(!0),a(x,null,f(j.value,s=>(n(),a("button",{key:s,onClick:i=>g.value=s,class:h(["px-4 py-2 rounded-lg font-medium transition-colors",g.value===s?"bg-primary-600 text-white":"bg-white text-gray-700 hover:bg-gray-100 border border-gray-300"])},d(s),11,L))),128)),t("button",{onClick:e[0]||(e[0]=s=>g.value="alle"),class:h(["px-4 py-2 rounded-lg font-medium transition-colors",g.value==="alle"?"bg-primary-600 text-white":"bg-white text-gray-700 hover:bg-gray-100 border border-gray-300"])}," Alle Jahre ",2)]),E.value.length>0?(n(),a("div",M,[(n(!0),a(x,null,f(T.value,s=>(n(),a("div",{key:s,class:"bg-white rounded-xl shadow-lg p-6"},[t("h2",S,[_(w(k),{size:28,class:"text-primary-600 mr-3"}),z(" "+d(s),1)]),p.value[s]?.bemerkungen?(n(),a("div",W,[t("p",O,d(p.value[s].bemerkungen),1)])):V("",!0),p.value[s]?.kategorien?(n(),a("div",$,[(n(!0),a(x,null,f(p.value[s].kategorien,(i,o)=>(n(),a("div",{key:o,class:"border-l-4 border-primary-600 pl-4"},[t("h3",A,d(o),1),t("div",K,[(n(!0),a(x,null,f(i,(l,m)=>(n(),a("div",{key:m,class:h(["flex items-center justify-between p-3 rounded-lg",l.platz==="1"?"bg-yellow-50 border border-yellow-200":l.platz==="2"?"bg-gray-50 border border-gray-200":l.platz==="3"?"bg-orange-50 border border-orange-200":"bg-gray-100"])},[t("div",P,[t("div",{class:h(["w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold mr-3",l.platz==="1"?"bg-yellow-500 text-white":l.platz==="2"?"bg-gray-400 text-white":l.platz==="3"?"bg-orange-500 text-white":"bg-gray-300 text-gray-700"])},d(l.platz),3),t("div",null,[t("span",Q,[z(d(l.spieler1)+" ",1),l.spieler2?(n(),a("span",Y," / "+d(l.spieler2),1)):V("",!0)])])]),t("div",q,d(l.platz==="1"?"Vereinsmeister":l.platz+". Platz"),1)],2))),128))])]))),128))])):V("",!0)]))),128))])):(n(),a("div",I,[_(w(k),{size:48,class:"text-gray-400 mx-auto mb-4"}),e[1]||(e[1]=t("p",{class:"text-gray-600"},"Keine Ergebnisse für das ausgewählte Jahr gefunden.",-1))])),t("div",U,[e[5]||(e[5]=t("h3",{class:"text-2xl font-display font-bold mb-6"},"Statistik",-1)),t("div",X,[t("div",Z,[t("div",ee,d(j.value.length),1),e[2]||(e[2]=t("div",{class:"text-primary-100"},"Jahre mit Meisterschaften",-1))]),t("div",te,[t("div",re,d(D.value),1),e[3]||(e[3]=t("div",{class:"text-primary-100"},"Einzelgewinner",-1))]),t("div",se,[t("div",le,d(B.value),1),e[4]||(e[4]=t("div",{class:"text-primary-100"},"Doppelgewinner",-1))])])]),t("div",ae,[t("div",ne,[t("h3",oe,[_(w(k),{size:32,class:"text-primary-600 mr-3"}),e[6]||(e[6]=z(" Herzlichen Glückwunsch! ",-1))]),e[7]||(e[7]=t("p",{class:"text-lg text-gray-700 leading-relaxed"}," Wir gratulieren allen Teilnehmern und Gewinnern der Vereinsmeisterschaften zu ihren großartigen Leistungen! ",-1)),e[8]||(e[8]=t("p",{class:"text-lg text-gray-700 leading-relaxed mt-4"}," Besonders stolz sind wir auf die kontinuierliche Teilnahme und den fairen Wettkampfgeist unserer Mitglieder. ",-1))])])])]))}};export{ge as default};

View File

@@ -1 +0,0 @@
import{x as a,y as s,z as r,A as u,B as o}from"#entry";function i(e){const t=e||s();return t?.ssrContext?.head||t?.runWithContext(()=>{if(r())return u(o)})}function c(e,t={}){const n=i(t.nuxt);if(n)return a(e,{head:n,...t})}export{c as u};

View File

@@ -1 +1 @@
import{u as r}from"./Bhv0LDrk.js";import{c as n,j as s,o as i}from"#entry";const t={class:"min-h-full py-16 bg-gray-50"},g={__name:"geschichte",setup(a){return r({title:"Geschichte - Harheimer TC"}),(d,e)=>(i(),n("div",t,[...e[0]||(e[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Vereinsgeschichte </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="prose prose-lg max-w-none"><p class="text-xl text-gray-600 mb-8"> Die bewegte Geschichte des Harheimer Tischtennis Clubs seit 1954. </p><div class="space-y-6 mb-8"><p class="text-lg text-gray-700"> Nach dem zweiten Weltkrieg entwickelte sich sprunghaft der Tischtennissport in der Bundesrepublik. Auch in der damaligen Gemeinde Harheim gab es junge Menschen, die an diesem neuen Sport Gefallen fanden, so dass am <strong>10.05.1950</strong> durch deren Initiative eine Tischtennisabteilung innerhalb der Sportgemeinschaft Harheim (SGH) gegründet wurde. </p><p class="text-lg text-gray-700"> Zu Anfang waren es nur wenige TT-Begeisterte und nur durch deren Idealismus, Opfer und Gemeinschaftssinn wurden die Anfangsschwierigkeiten überwunden. Im Laufe der Zeit kamen auch die Kritiker innerhalb der SGH nicht umhin, die damaligen Tischtennisspieler mit ihrer neuen Sportart anzuerkennen. </p></div><div class="space-y-6"><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">10.06.1954 - Gründung des HTC</h3><p class="text-gray-600 mb-3"> Bei der am 20.05.1954 stattgefundenen Sitzung der SGH wurde die Trennung der einzelnen Abteilungen beschlossen. Somit sah sich die TT-Abteilung veranlasst, ihren Sportbetrieb in eigener Regie weiterzuführen. </p><p class="text-gray-600"> Am <strong>10.06.1954</strong> trafen sich 6 Damen und 22 Herren zur Gründungsversammlung in der Gaststätte „Zum Löwen&quot;. Der neu gegründete Verein wurde unter dem Namen &quot;Harheimer Tischtennis-Club&quot; Mitglied des Landessportbundes Hessen. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1964 - Neue Trainingsstätte</h3><p class="text-gray-600"> Mit der Erbauung der Schulturnhalle im Jahre 1964 stand eine für die damaligen Verhältnisse recht moderne Übungsstätte zur Verfügung, die dem HTC für einen Tag in der Woche überlassen wurde. Damit waren viele Probleme gelöst und es gab einen Aufschwung, der sich in einer steigenden Spielerzahl bemerkbar machte. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1974 - Bürgerhaus</h3><p class="text-gray-600"> Mit der Erstellung des Bürgerhauses wurde wiederum neuer Trainingsraum geschaffen, der besonders für den Tischtennissport geeignet ist. Der HTC nahm die Gelegenheit war und hielt ab Mai 1974 seine Übungsabende im großen Saal des Bürgerhauses ab. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1976 - Eintragung ins Vereinsregister</h3><p class="text-gray-600"> Die Eintragung in das Vereinsregister (e. V.) erfolgte im Jahre 1976 und gleichzeitig wurde dem Verein die Gemeinnützigkeit zuerkannt. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1978/79 - Sportlicher Höhepunkt</h3><p class="text-gray-600"> Ein besonderes Geschenk machten die Spieler des HTC im Jubiläumsjahr ihrem Verein: Die 1. Herrenmannschaft wurde Meister der Bezirksklasse Ffm.-Ost und die 2. Herrenmannschaft Meister der Kreisklasse-A Ffm.-Nord. Nachdem auch die Schülermannschaft Meister ihrer Klasse wurde, ist die Saison 78/79 als absolut sportlicher Höhepunkt in der Vereinsgeschichte zu werten. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">Heute</h3><p class="text-gray-600"> Der HTC hat sich auch in Zukunft zur Aufgabe gemacht, allen interessierten Bürgern und Jugendlichen im Rahmen seiner Möglichkeiten das Tischtennisspielen als Leistungssport oder zur Freizeitgestaltung zu ermöglichen. </p></div></div></div></div>',1)])]))}};export{g as default};
import{u as r}from"./BHFrGoXk.js";import{c as n,p as s,o as i}from"#entry";const t={class:"min-h-full py-16 bg-gray-50"},g={__name:"geschichte",setup(a){return r({title:"Geschichte - Harheimer TC"}),(d,e)=>(i(),n("div",t,[...e[0]||(e[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Vereinsgeschichte </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="prose prose-lg max-w-none"><p class="text-xl text-gray-600 mb-8"> Die bewegte Geschichte des Harheimer Tischtennis Clubs seit 1954. </p><div class="space-y-6 mb-8"><p class="text-lg text-gray-700"> Nach dem zweiten Weltkrieg entwickelte sich sprunghaft der Tischtennissport in der Bundesrepublik. Auch in der damaligen Gemeinde Harheim gab es junge Menschen, die an diesem neuen Sport Gefallen fanden, so dass am <strong>10.05.1950</strong> durch deren Initiative eine Tischtennisabteilung innerhalb der Sportgemeinschaft Harheim (SGH) gegründet wurde. </p><p class="text-lg text-gray-700"> Zu Anfang waren es nur wenige TT-Begeisterte und nur durch deren Idealismus, Opfer und Gemeinschaftssinn wurden die Anfangsschwierigkeiten überwunden. Im Laufe der Zeit kamen auch die Kritiker innerhalb der SGH nicht umhin, die damaligen Tischtennisspieler mit ihrer neuen Sportart anzuerkennen. </p></div><div class="space-y-6"><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">10.06.1954 - Gründung des HTC</h3><p class="text-gray-600 mb-3"> Bei der am 20.05.1954 stattgefundenen Sitzung der SGH wurde die Trennung der einzelnen Abteilungen beschlossen. Somit sah sich die TT-Abteilung veranlasst, ihren Sportbetrieb in eigener Regie weiterzuführen. </p><p class="text-gray-600"> Am <strong>10.06.1954</strong> trafen sich 6 Damen und 22 Herren zur Gründungsversammlung in der Gaststätte „Zum Löwen&quot;. Der neu gegründete Verein wurde unter dem Namen &quot;Harheimer Tischtennis-Club&quot; Mitglied des Landessportbundes Hessen. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1964 - Neue Trainingsstätte</h3><p class="text-gray-600"> Mit der Erbauung der Schulturnhalle im Jahre 1964 stand eine für die damaligen Verhältnisse recht moderne Übungsstätte zur Verfügung, die dem HTC für einen Tag in der Woche überlassen wurde. Damit waren viele Probleme gelöst und es gab einen Aufschwung, der sich in einer steigenden Spielerzahl bemerkbar machte. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1974 - Bürgerhaus</h3><p class="text-gray-600"> Mit der Erstellung des Bürgerhauses wurde wiederum neuer Trainingsraum geschaffen, der besonders für den Tischtennissport geeignet ist. Der HTC nahm die Gelegenheit war und hielt ab Mai 1974 seine Übungsabende im großen Saal des Bürgerhauses ab. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1976 - Eintragung ins Vereinsregister</h3><p class="text-gray-600"> Die Eintragung in das Vereinsregister (e. V.) erfolgte im Jahre 1976 und gleichzeitig wurde dem Verein die Gemeinnützigkeit zuerkannt. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">1978/79 - Sportlicher Höhepunkt</h3><p class="text-gray-600"> Ein besonderes Geschenk machten die Spieler des HTC im Jubiläumsjahr ihrem Verein: Die 1. Herrenmannschaft wurde Meister der Bezirksklasse Ffm.-Ost und die 2. Herrenmannschaft Meister der Kreisklasse-A Ffm.-Nord. Nachdem auch die Schülermannschaft Meister ihrer Klasse wurde, ist die Saison 78/79 als absolut sportlicher Höhepunkt in der Vereinsgeschichte zu werten. </p></div><div class="bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"><h3 class="text-xl font-display font-bold text-gray-900 mb-3">Heute</h3><p class="text-gray-600"> Der HTC hat sich auch in Zukunft zur Aufgabe gemacht, allen interessierten Bürgern und Jugendlichen im Rahmen seiner Möglichkeiten das Tischtennisspielen als Leistungssport oder zur Freizeitgestaltung zu ermöglichen. </p></div></div></div></div>',1)])]))}};export{g as default};

View File

@@ -1 +1 @@
import{c as n,a as s,b as a,w as o,_ as r,o as l,d as i}from"#entry";import{u as m}from"./Bhv0LDrk.js";const d={class:"min-h-full py-16 bg-gray-50"},x={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},p={class:"bg-white p-8 rounded-xl shadow-lg"},f={class:"mt-8"},h={__name:"damen",setup(g){return m({title:"Damenmannschaft - Harheimer TC"}),(u,t)=>{const e=r;return l(),n("div",d,[s("div",x,[t[6]||(t[6]=s("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Damenmannschaft ",-1)),t[7]||(t[7]=s("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),s("div",p,[t[3]||(t[3]=s("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"},"1. Damen",-1)),t[4]||(t[4]=s("p",{class:"text-gray-600 mb-4"},"Liga: Bezirksliga",-1)),t[5]||(t[5]=s("p",{class:"text-gray-600 mb-6"},"Mannschaftsführerin: Name folgt",-1)),s("div",f,[t[1]||(t[1]=s("h4",{class:"text-lg font-semibold text-gray-900 mb-4"},"Wir suchen Verstärkung!",-1)),t[2]||(t[2]=s("p",{class:"text-gray-600 mb-4"}," Unsere Damenmannschaft freut sich über neue Spielerinnen. Interessiert? Dann melde dich bei uns! ",-1)),a(e,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...t[0]||(t[0]=[i(" Kontakt aufnehmen ",-1)])]),_:1})])])])])}}};export{h as default};
import{c as n,a as s,b as a,w as o,_ as r,o as l,d as i}from"#entry";import{u as m}from"./BHFrGoXk.js";const d={class:"min-h-full py-16 bg-gray-50"},x={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},p={class:"bg-white p-8 rounded-xl shadow-lg"},f={class:"mt-8"},h={__name:"damen",setup(g){return m({title:"Damenmannschaft - Harheimer TC"}),(u,t)=>{const e=r;return l(),n("div",d,[s("div",x,[t[6]||(t[6]=s("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Damenmannschaft ",-1)),t[7]||(t[7]=s("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),s("div",p,[t[3]||(t[3]=s("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"},"1. Damen",-1)),t[4]||(t[4]=s("p",{class:"text-gray-600 mb-4"},"Liga: Bezirksliga",-1)),t[5]||(t[5]=s("p",{class:"text-gray-600 mb-6"},"Mannschaftsführerin: Name folgt",-1)),s("div",f,[t[1]||(t[1]=s("h4",{class:"text-lg font-semibold text-gray-900 mb-4"},"Wir suchen Verstärkung!",-1)),t[2]||(t[2]=s("p",{class:"text-gray-600 mb-4"}," Unsere Damenmannschaft freut sich über neue Spielerinnen. Interessiert? Dann melde dich bei uns! ",-1)),a(e,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...t[0]||(t[0]=[i(" Kontakt aufnehmen ",-1)])]),_:1})])])])])}}};export{h as default};

View File

@@ -0,0 +1,6 @@
import{e}from"#entry";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const r=e("AlertCircleIcon",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);export{r as A};

View File

@@ -1 +1 @@
import{c as a,o as i,a as e,t as r,b as u,w as c,d as l,_ as d}from"#entry";import{_ as p}from"./DlAUqK2U.js";import{u as f}from"./Bhv0LDrk.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:404},statusMessage:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return f({title:`${n.statusCode} - ${n.statusMessage} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=d;return i(),a("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.statusCode)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[u(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:c(()=>[l(r(t.backHome),1)]),_:1})])])])}}},z=p(y,[["__scopeId","data-v-06403dcb"]]);export{z as default};
import{c as a,o as i,a as e,t as r,b as u,w as c,d as l,_ as d}from"#entry";import{_ as p}from"./DlAUqK2U.js";import{u as f}from"./BHFrGoXk.js";const m={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},g={class:"max-w-520px text-center z-20"},b=["textContent"],h=["textContent"],x={class:"flex items-center justify-center w-full"},y={__name:"error-404",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:404},statusMessage:{type:String,default:"Not Found"},description:{type:String,default:"Sorry, the page you are looking for could not be found."},backHome:{type:String,default:"Go back home"}},setup(t){const n=t;return f({title:`${n.statusCode} - ${n.statusMessage} | ${n.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(k,o)=>{const s=d;return i(),a("div",m,[o[0]||(o[0]=e("div",{class:"fixed left-0 right-0 spotlight z-10"},null,-1)),e("div",g,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:r(t.statusCode)},null,8,b),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:r(t.description)},null,8,h),e("div",x,[u(s,{to:"/",class:"cursor-pointer gradient-border px-4 py-2 sm:px-6 sm:py-3 sm:text-xl text-md"},{default:c(()=>[l(r(t.backHome),1)]),_:1})])])])}}},z=p(y,[["__scopeId","data-v-06403dcb"]]);export{z as default};

View File

@@ -1,4 +1,4 @@
import{e as o,c as s,o as r,a as e,j as p,b as l,w as h,d as u,_ as g,F as x,i as b,k as f,l as y,t as a}from"#entry";import{H as _}from"./CWEkTB1z.js";import{T as w}from"./B4mSF5Ac.js";import{u as k}from"./Bhv0LDrk.js";/**
import{e as o,c as s,o as r,a as e,p,b as l,w as h,d as u,_ as g,F as x,i as b,l as f,q as y,t as a}from"#entry";import{H as _}from"./CWEkTB1z.js";import{T as w}from"./B4mSF5Ac.js";import{u as k}from"./BHFrGoXk.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
import{e as a}from"#entry";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const o=a("Loader2Icon",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{o as L};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{u as e}from"./Bhv0LDrk.js";import{c as r,j as s,o as a}from"#entry";const n={class:"min-h-full py-16 bg-gray-50"},p={__name:"trainer",setup(i){return e({title:"Trainer - Harheimer TC"}),(l,t)=>(a(),r("div",n,[...t[0]||(t[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Unsere Trainer </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><p class="text-xl text-gray-600 mb-12"> Erfahrene und qualifizierte Trainer für alle Leistungsstufen </p><div class="grid md:grid-cols-3 gap-8"><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">C-Trainer</h3><p class="text-gray-600 mb-4">Torsten Schulz</p><p class="text-sm text-gray-500"> Lizenz: C-Trainer<br> Schwerpunkt: Nachwuchsförderung<br> Erwachsenen bei Wunsch zur Verfügung </p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">Kindertrainer</h3><p class="text-gray-600 mb-4">Thomas Steinbrech</p><p class="text-sm text-gray-500"> Lizenz: Kindertrainer<br> Schwerpunkt: Nachwuchsförderung </p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">Assistenztrainerin</h3><p class="text-gray-600 mb-4">Magda Schwallbach</p><p class="text-sm text-gray-500"> Lizenz: Assistenztrainerin<br> Schwerpunkt: Unterstützung &amp; Betreuung </p></div></div></div>',1)])]))}};export{p as default};
import{u as e}from"./BHFrGoXk.js";import{c as r,p as s,o as a}from"#entry";const n={class:"min-h-full py-16 bg-gray-50"},p={__name:"trainer",setup(i){return e({title:"Trainer - Harheimer TC"}),(l,t)=>(a(),r("div",n,[...t[0]||(t[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Unsere Trainer </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><p class="text-xl text-gray-600 mb-12"> Erfahrene und qualifizierte Trainer für alle Leistungsstufen </p><div class="grid md:grid-cols-3 gap-8"><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">C-Trainer</h3><p class="text-gray-600 mb-4">Torsten Schulz</p><p class="text-sm text-gray-500"> Lizenz: C-Trainer<br> Schwerpunkt: Nachwuchsförderung<br> Erwachsenen bei Wunsch zur Verfügung </p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">Kindertrainer</h3><p class="text-gray-600 mb-4">Thomas Steinbrech</p><p class="text-sm text-gray-500"> Lizenz: Kindertrainer<br> Schwerpunkt: Nachwuchsförderung </p></div><div class="bg-white p-8 rounded-xl shadow-lg"><h3 class="text-2xl font-display font-bold text-gray-900 mb-2">Assistenztrainerin</h3><p class="text-gray-600 mb-4">Magda Schwallbach</p><p class="text-sm text-gray-500"> Lizenz: Assistenztrainerin<br> Schwerpunkt: Unterstützung &amp; Betreuung </p></div></div></div>',1)])]))}};export{p as default};

View File

@@ -1,4 +1,4 @@
import{u as $}from"./Bhv0LDrk.js";import{F as b}from"./BteKZQ9T.js";import{e as j,r as _,f as w,g as E,c as a,a as l,t as c,F as k,i as S,b as x,u as g,h as M,o as r,d as L}from"#entry";import{E as z}from"./Cx4UcKGu.js";/**
import{u as $}from"./BHFrGoXk.js";import{F as b}from"./BteKZQ9T.js";import{e as j,r as _,f as w,g as E,c as a,a as l,t as c,F as k,i as S,b as x,u as g,h as M,o as r,d as L}from"#entry";import{E as z}from"./Cx4UcKGu.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.

View File

@@ -1 +1 @@
import{c as d,a as t,b as e,u as r,d as n,w as o,_ as m,o as x}from"#entry";import{u as p}from"./Bhv0LDrk.js";import{M as a,C as l}from"./C5SyyWEb.js";const g={class:"min-h-full py-16 bg-gray-50"},b={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},f={class:"bg-white rounded-xl shadow-lg p-8 mb-12"},y={class:"flex items-start space-x-4 mb-6"},u={href:"https://www.google.com/maps/search/?api=1&query=In+den+Schafgärten+25+60437+Frankfurt",target:"_blank",class:"inline-flex items-center px-4 py-2 bg-primary-600 hover:bg-primary-700 text-white font-medium rounded-lg transition-colors text-sm"},h={class:"grid gap-6 mb-12"},c={class:"bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"},v={class:"flex items-start justify-between"},w={class:"bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"},_={class:"flex items-start justify-between"},k={class:"mt-12 bg-primary-50 p-8 rounded-xl border border-primary-100"},z={class:"flex flex-wrap gap-4"},H={__name:"index",setup(T){return p({title:"Trainingszeiten - Harheimer TC"}),(I,s)=>{const i=m;return x(),d("div",g,[t("div",b,[s[11]||(s[11]=t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Trainingszeiten ",-1)),s[12]||(s[12]=t("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),t("div",f,[t("div",y,[e(r(a),{size:32,class:"text-primary-600 flex-shrink-0"}),t("div",null,[s[1]||(s[1]=t("h2",{class:"text-2xl font-display font-bold text-gray-900 mb-4"},"Trainingsort",-1)),s[2]||(s[2]=t("h3",{class:"text-lg font-semibold text-gray-900 mb-2"}," Sporthalle der Grundschule Harheim ",-1)),s[3]||(s[3]=t("p",{class:"text-gray-700 mb-1"},"In den Schafgärten 25",-1)),s[4]||(s[4]=t("p",{class:"text-gray-700 mb-4"},"60437 Frankfurt/Main",-1)),t("a",u,[e(r(a),{size:16,class:"mr-2"}),s[0]||(s[0]=n(" Anfahrtsplan anzeigen ",-1))])])])]),s[13]||(s[13]=t("h2",{class:"text-2xl font-display font-bold text-gray-900 mb-6"}," Trainingszeiten ",-1)),t("div",h,[t("div",c,[t("div",v,[s[5]||(s[5]=t("div",null,[t("h3",{class:"text-xl font-display font-bold text-gray-900 mb-2"},"Damen und Herren"),t("div",{class:"space-y-2"},[t("p",{class:"text-lg font-semibold text-primary-600"}," Dienstag: 19:30 - 22:30 Uhr "),t("p",{class:"text-lg font-semibold text-primary-600"}," Donnerstag: 19:30 - 22:30 Uhr ")])],-1)),e(r(l),{size:32,class:"text-primary-600"})])]),t("div",w,[t("div",_,[s[6]||(s[6]=t("div",null,[t("h3",{class:"text-xl font-display font-bold text-gray-900 mb-2"},"Schüler/Jugend"),t("p",{class:"text-gray-600 mb-2"},"Ab 6 Jahre"),t("p",{class:"text-lg font-semibold text-primary-600"}," Dienstag: 17:30 - 19:30 Uhr ")],-1)),e(r(l),{size:32,class:"text-primary-600"})])])]),t("div",k,[s[9]||(s[9]=t("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Interessiert? ",-1)),s[10]||(s[10]=t("p",{class:"text-gray-600 mb-6"}," Komm einfach zum Schnuppertraining vorbei oder kontaktiere uns für weitere Informationen! ",-1)),t("div",z,[e(i,{to:"/training/anfaenger",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[7]||(s[7]=[n(" Infos für Anfänger ",-1)])]),_:1}),e(i,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-white hover:bg-gray-50 text-primary-600 border-2 border-primary-600 font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[8]||(s[8]=[n(" Kontakt ",-1)])]),_:1})])])])])}}};export{H as default};
import{c as d,a as t,b as e,u as r,d as n,w as o,_ as m,o as x}from"#entry";import{u as p}from"./BHFrGoXk.js";import{M as a,C as l}from"./C5SyyWEb.js";const g={class:"min-h-full py-16 bg-gray-50"},b={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},f={class:"bg-white rounded-xl shadow-lg p-8 mb-12"},y={class:"flex items-start space-x-4 mb-6"},u={href:"https://www.google.com/maps/search/?api=1&query=In+den+Schafgärten+25+60437+Frankfurt",target:"_blank",class:"inline-flex items-center px-4 py-2 bg-primary-600 hover:bg-primary-700 text-white font-medium rounded-lg transition-colors text-sm"},h={class:"grid gap-6 mb-12"},c={class:"bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"},v={class:"flex items-start justify-between"},w={class:"bg-white p-6 rounded-xl shadow-lg border-l-4 border-primary-600"},_={class:"flex items-start justify-between"},k={class:"mt-12 bg-primary-50 p-8 rounded-xl border border-primary-100"},z={class:"flex flex-wrap gap-4"},H={__name:"index",setup(T){return p({title:"Trainingszeiten - Harheimer TC"}),(I,s)=>{const i=m;return x(),d("div",g,[t("div",b,[s[11]||(s[11]=t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Trainingszeiten ",-1)),s[12]||(s[12]=t("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),t("div",f,[t("div",y,[e(r(a),{size:32,class:"text-primary-600 flex-shrink-0"}),t("div",null,[s[1]||(s[1]=t("h2",{class:"text-2xl font-display font-bold text-gray-900 mb-4"},"Trainingsort",-1)),s[2]||(s[2]=t("h3",{class:"text-lg font-semibold text-gray-900 mb-2"}," Sporthalle der Grundschule Harheim ",-1)),s[3]||(s[3]=t("p",{class:"text-gray-700 mb-1"},"In den Schafgärten 25",-1)),s[4]||(s[4]=t("p",{class:"text-gray-700 mb-4"},"60437 Frankfurt/Main",-1)),t("a",u,[e(r(a),{size:16,class:"mr-2"}),s[0]||(s[0]=n(" Anfahrtsplan anzeigen ",-1))])])])]),s[13]||(s[13]=t("h2",{class:"text-2xl font-display font-bold text-gray-900 mb-6"}," Trainingszeiten ",-1)),t("div",h,[t("div",c,[t("div",v,[s[5]||(s[5]=t("div",null,[t("h3",{class:"text-xl font-display font-bold text-gray-900 mb-2"},"Damen und Herren"),t("div",{class:"space-y-2"},[t("p",{class:"text-lg font-semibold text-primary-600"}," Dienstag: 19:30 - 22:30 Uhr "),t("p",{class:"text-lg font-semibold text-primary-600"}," Donnerstag: 19:30 - 22:30 Uhr ")])],-1)),e(r(l),{size:32,class:"text-primary-600"})])]),t("div",w,[t("div",_,[s[6]||(s[6]=t("div",null,[t("h3",{class:"text-xl font-display font-bold text-gray-900 mb-2"},"Schüler/Jugend"),t("p",{class:"text-gray-600 mb-2"},"Ab 6 Jahre"),t("p",{class:"text-lg font-semibold text-primary-600"}," Dienstag: 17:30 - 19:30 Uhr ")],-1)),e(r(l),{size:32,class:"text-primary-600"})])])]),t("div",k,[s[9]||(s[9]=t("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Interessiert? ",-1)),s[10]||(s[10]=t("p",{class:"text-gray-600 mb-6"}," Komm einfach zum Schnuppertraining vorbei oder kontaktiere uns für weitere Informationen! ",-1)),t("div",z,[e(i,{to:"/training/anfaenger",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[7]||(s[7]=[n(" Infos für Anfänger ",-1)])]),_:1}),e(i,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-white hover:bg-gray-50 text-primary-600 border-2 border-primary-600 font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[8]||(s[8]=[n(" Kontakt ",-1)])]),_:1})])])])])}}};export{H as default};

View File

@@ -0,0 +1,6 @@
import{e as a}from"#entry";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const p=a("NewspaperIcon",[["path",{d:"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2",key:"7pis2x"}],["path",{d:"M18 14h-8",key:"sponae"}],["path",{d:"M15 18h-5",key:"95g1m2"}],["path",{d:"M10 6h8v4h-8V6Z",key:"smlsk5"}]]);export{p as N};

View File

@@ -1,2 +1,2 @@
import{s as M,r as L,g as N,c as l,a as e,t as a,F as z,i as C,h as y,b as x,d as h,u as D,w as _,_ as B,o,n as H}from"#entry";import{u as T}from"./Bhv0LDrk.js";import{B as V}from"./jVj3QaoK.js";const F={class:"min-h-full py-16 bg-gray-50"},I={class:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"},S={key:0,class:"space-y-8"},Z={class:"bg-gradient-to-r from-primary-600 to-primary-700 rounded-xl p-8 text-white"},E={class:"text-4xl font-display font-bold mb-2"},W={class:"text-primary-100 text-xl"},$={class:"bg-white rounded-xl shadow-lg p-6"},Q={class:"grid md:grid-cols-2 gap-6"},R={class:"space-y-4"},j={class:"flex items-center space-x-3"},q={class:"font-semibold text-gray-900"},A={class:"flex items-center space-x-3"},G={class:"font-semibold text-gray-900"},J={class:"space-y-4"},K={class:"flex items-center space-x-3"},O={class:"font-semibold text-gray-900"},P={class:"flex items-center space-x-3"},U={class:"font-semibold text-gray-900"},X={class:"bg-white rounded-xl shadow-lg p-6"},Y={class:"grid sm:grid-cols-2 lg:grid-cols-4 gap-4"},tt={class:"font-semibold text-gray-900"},et={key:0,class:"text-xs text-primary-600 font-medium mt-1"},st={class:"bg-white rounded-xl shadow-lg p-6"},nt={class:"text-center"},it=["href"],rt={class:"bg-white rounded-xl shadow-lg p-6"},at={class:"text-sm text-gray-500 text-center"},lt={class:"text-center"},ot={key:1,class:"text-center py-16"},ft={__name:"[slug]",setup(dt){const v=M(),s=L(null),b=async()=>{try{const n=await fetch("/data/mannschaften.csv");if(!n.ok)return;const d=(await n.text()).split(`
import{x as M,r as L,g as N,c as l,a as e,t as a,F as z,i as C,h as y,b as x,d as h,u as D,w as _,_ as B,o,n as H}from"#entry";import{u as T}from"./BHFrGoXk.js";import{B as V}from"./jVj3QaoK.js";const F={class:"min-h-full py-16 bg-gray-50"},I={class:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"},S={key:0,class:"space-y-8"},Z={class:"bg-gradient-to-r from-primary-600 to-primary-700 rounded-xl p-8 text-white"},E={class:"text-4xl font-display font-bold mb-2"},W={class:"text-primary-100 text-xl"},$={class:"bg-white rounded-xl shadow-lg p-6"},Q={class:"grid md:grid-cols-2 gap-6"},R={class:"space-y-4"},j={class:"flex items-center space-x-3"},q={class:"font-semibold text-gray-900"},A={class:"flex items-center space-x-3"},G={class:"font-semibold text-gray-900"},J={class:"space-y-4"},K={class:"flex items-center space-x-3"},O={class:"font-semibold text-gray-900"},P={class:"flex items-center space-x-3"},U={class:"font-semibold text-gray-900"},X={class:"bg-white rounded-xl shadow-lg p-6"},Y={class:"grid sm:grid-cols-2 lg:grid-cols-4 gap-4"},tt={class:"font-semibold text-gray-900"},et={key:0,class:"text-xs text-primary-600 font-medium mt-1"},st={class:"bg-white rounded-xl shadow-lg p-6"},nt={class:"text-center"},it=["href"],rt={class:"bg-white rounded-xl shadow-lg p-6"},at={class:"text-sm text-gray-500 text-center"},lt={class:"text-center"},ot={key:1,class:"text-center py-16"},ft={__name:"[slug]",setup(dt){const v=M(),s=L(null),b=async()=>{try{const n=await fetch("/data/mannschaften.csv");if(!n.ok)return;const d=(await n.text()).split(`
`).filter(r=>r.trim()!=="");if(d.length<2)return;const m=d.slice(1).map(r=>{const i=[];let u="",f=!1;for(let p=0;p<r.length;p++){const g=r[p];g==='"'?f=!f:g===","&&!f?(i.push(u.trim()),u=""):u+=g}return i.push(u.trim()),i.length<10?null:{mannschaft:i[0].trim(),liga:i[1].trim(),staffelleiter:i[2].trim(),telefon:i[3].trim(),heimspieltag:i[4].trim(),spielsystem:i[5].trim(),mannschaftsfuehrer:i[6].trim(),spieler:i[7].trim(),weitere_informationen_link:i[8].trim(),letzte_aktualisierung:i[9].trim(),slug:i[0].trim().toLowerCase().replace(/\s+/g,"-")}}).filter(r=>r!==null),c=v.params.slug;s.value=m.find(r=>r.slug===c)||null,s.value&&T({title:`${s.value.mannschaft} - Harheimer TC`})}catch(n){console.error("Fehler beim Laden der Mannschaften:",n)}},w=n=>n.spieler?n.spieler.split(";").map(t=>t.trim()).filter(t=>t!==""):[],k=n=>{if(!n)return"";if(/^\d{2}\.\d{2}\.\d{4}$/.test(n))return n;const t=new Date(n);return isNaN(t.getTime())?n:t.toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric"})};return N(()=>{b()}),(n,t)=>{const d=B;return o(),l("div",F,[e("div",I,[s.value?(o(),l("div",S,[e("div",Z,[e("h1",E,a(s.value.mannschaft),1),e("p",W,a(s.value.liga),1)]),e("div",$,[t[8]||(t[8]=e("h2",{class:"text-2xl font-semibold text-gray-900 mb-6"},"Liga-Informationen",-1)),e("div",Q,[e("div",R,[e("div",j,[t[0]||(t[0]=e("div",{class:"w-2 h-2 bg-primary-600 rounded-full"},null,-1)),t[1]||(t[1]=e("span",{class:"text-gray-600"},"Staffelleiter:",-1)),e("span",q,a(s.value.staffelleiter),1)]),e("div",A,[t[2]||(t[2]=e("div",{class:"w-2 h-2 bg-primary-600 rounded-full"},null,-1)),t[3]||(t[3]=e("span",{class:"text-gray-600"},"Telefon:",-1)),e("span",G,a(s.value.telefon),1)])]),e("div",J,[e("div",K,[t[4]||(t[4]=e("div",{class:"w-2 h-2 bg-primary-600 rounded-full"},null,-1)),t[5]||(t[5]=e("span",{class:"text-gray-600"},"Heimspieltag:",-1)),e("span",O,a(s.value.heimspieltag),1)]),e("div",P,[t[6]||(t[6]=e("div",{class:"w-2 h-2 bg-primary-600 rounded-full"},null,-1)),t[7]||(t[7]=e("span",{class:"text-gray-600"},"Spielsystem:",-1)),e("span",U,a(s.value.spielsystem),1)])])])]),e("div",X,[t[9]||(t[9]=e("h2",{class:"text-2xl font-semibold text-gray-900 mb-6"}," Mannschaftsaufstellung Saison 2025/26 (Hinrunde) ",-1)),e("div",Y,[(o(!0),l(z,null,C(w(s.value),(m,c)=>(o(),l("div",{key:c,class:H(["bg-gray-50 rounded-lg p-4 text-center",m===s.value.mannschaftsfuehrer?"ring-2 ring-primary-500 bg-primary-50":""])},[e("div",tt,a(m),1),m===s.value.mannschaftsfuehrer?(o(),l("div",et," Mannschaftsführer ")):y("",!0)],2))),128))])]),e("div",st,[t[11]||(t[11]=e("h2",{class:"text-2xl font-semibold text-gray-900 mb-6"},"Weitere Informationen",-1)),e("div",nt,[s.value.weitere_informationen_link&&s.value.weitere_informationen_link!==""?(o(),l("a",{key:0,href:s.value.weitere_informationen_link,target:"_blank",class:"inline-flex items-center px-8 py-4 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},[x(D(V),{size:24,class:"mr-3"}),t[10]||(t[10]=h(" Weitere Informationen ",-1))],8,it)):y("",!0)])]),e("div",rt,[e("p",at," Zuletzt aktualisiert am: "+a(k(s.value.letzte_aktualisierung)),1)]),e("div",lt,[x(d,{to:"/mannschaften",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:_(()=>[...t[12]||(t[12]=[h(" ← Zurück zur Übersicht ",-1)])]),_:1})])])):(o(),l("div",ot,[t[14]||(t[14]=e("h1",{class:"text-4xl font-display font-bold text-gray-900 mb-4"},"Mannschaft nicht gefunden",-1)),t[15]||(t[15]=e("p",{class:"text-gray-600 mb-8"},"Die angeforderte Mannschaft konnte nicht gefunden werden.",-1)),x(d,{to:"/mannschaften",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:_(()=>[...t[13]||(t[13]=[h(" Zur Mannschaftsübersicht ",-1)])]),_:1})]))])])}}};export{ft as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_ as s}from"./DlAUqK2U.js";import{u as a}from"./Bhv0LDrk.js";import{c as i,o as u,a as e,t as o}from"#entry";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return a({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(u(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},x=s(f,[["__scopeId","data-v-4b6f0a29"]]);export{x as default};
import{_ as s}from"./DlAUqK2U.js";import{u as a}from"./BHFrGoXk.js";import{c as i,o as u,a as e,t as o}from"#entry";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return a({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{innerHTML:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)})).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;const r=function(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }'}]}),(g,n)=>(u(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},x=s(f,[["__scopeId","data-v-4b6f0a29"]]);export{x as default};

View File

@@ -1,4 +1,4 @@
import{e as s,c as i,o as a,a as e,j as p,F as h,i as m,n as r,k as u,l as g,t as l,b as f}from"#entry";import{u as v}from"./Bhv0LDrk.js";/**
import{e as s,c as i,o as a,a as e,p,F as h,i as m,n as r,l as u,q as g,t as l,b as f}from"#entry";import{u as v}from"./BHFrGoXk.js";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
@@ -28,4 +28,4 @@ import{e as s,c as i,o as a,a as e,j as p,F as h,i as m,n as r,k as u,l as g,t a
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const w=s("WifiIcon",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]),M={id:"facilities",class:"py-16 sm:py-20 bg-white"},z={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},j={class:"grid sm:grid-cols-2 lg:grid-cols-3 gap-8 mb-16"},A={class:"p-8"},D={class:"text-2xl font-display font-bold text-gray-900 mb-3"},I={class:"text-gray-600 leading-relaxed"},S={__name:"Facilities",setup(c){const n=[{icon:k,title:"8 Tischtennisplatten",description:"Hochwertige Wettkampftische für optimales Spielvergnügen",color:"from-yellow-400 to-orange-500"},{icon:x,title:"Klimatisierte Halle",description:"Optimale Bedingungen bei jedem Wetter in unserer modernen Halle",color:"from-blue-400 to-blue-600"},{icon:y,title:"Trainingsbereich",description:"Ballmaschinen und Trainingsgeräte für gezieltes Training",color:"from-red-400 to-red-600"},{icon:_,title:"Clubhaus",description:"Gemütliches Clubhaus mit Aufenthaltsraum und Küche",color:"from-green-400 to-green-600"},{icon:w,title:"Kostenloses WLAN",description:"Schnelles Internet auf der gesamten Anlage",color:"from-purple-400 to-purple-600"},{icon:b,title:"Umkleiden & Duschen",description:"Moderne, saubere Umkleideräume mit Duschen",color:"from-cyan-400 to-cyan-600"}];return(d,o)=>(a(),i("section",M,[e("div",z,[o[0]||(o[0]=e("div",{class:"text-center mb-16"},[e("h2",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"}," Unsere Anlagen "),e("div",{class:"w-24 h-1 bg-primary-600 mx-auto mb-6"}),e("p",{class:"text-xl text-gray-600 max-w-3xl mx-auto"}," Moderne Ausstattung und erstklassige Einrichtungen für ein perfektes Tischtenniserlebnis ")],-1)),e("div",j,[(a(),i(h,null,m(n,t=>e("div",{key:t.title,class:"group relative bg-white rounded-2xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden border border-gray-100"},[e("div",{class:r(["absolute top-0 left-0 right-0 h-1 bg-gradient-to-r opacity-0 group-hover:opacity-100 transition-opacity",t.color])},null,2),e("div",A,[e("div",{class:r(["w-16 h-16 bg-gradient-to-br rounded-xl flex items-center justify-center mb-4 group-hover:scale-110 transition-transform",t.color])},[(a(),u(g(t.icon),{size:32,class:"text-white"}))],2),e("h3",D,l(t.title),1),e("p",I,l(t.description),1)])])),64))]),o[1]||(o[1]=p('<div class="grid md:grid-cols-2 gap-6"><div class="relative h-[300px] rounded-2xl overflow-hidden shadow-xl group"><div class="w-full h-full bg-cover bg-center group-hover:scale-110 transition-transform duration-700" style="background-image:url(&#39;https://images.unsplash.com/photo-1534438097545-77fef53fe2e8?q=80&amp;w=2070&#39;);"></div><div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent flex items-end"><p class="text-white font-semibold text-xl p-6">Hochwertige Wettkampftische</p></div></div><div class="relative h-[300px] rounded-2xl overflow-hidden shadow-xl group"><div class="w-full h-full bg-cover bg-center group-hover:scale-110 transition-transform duration-700" style="background-image:url(&#39;https://images.unsplash.com/photo-1611004275469-8583ed5d7b8d?q=80&amp;w=2070&#39;);"></div><div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent flex items-end"><p class="text-white font-semibold text-xl p-6">Moderne Tischtennishalle</p></div></div></div>',1))])]))}},C={class:"min-h-screen"},B={__name:"anlagen",setup(c){return v({title:"Anlagen - Harheimer TC"}),(n,d)=>(a(),i("div",C,[f(S)]))}};export{B as default};
*/const w=s("WifiIcon",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]),M={id:"facilities",class:"py-16 sm:py-20 bg-white"},z={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},j={class:"grid sm:grid-cols-2 lg:grid-cols-3 gap-8 mb-16"},A={class:"p-8"},D={class:"text-2xl font-display font-bold text-gray-900 mb-3"},I={class:"text-gray-600 leading-relaxed"},S={__name:"Facilities",setup(c){const n=[{icon:k,title:"8 Tischtennisplatten",description:"Hochwertige Wettkampftische für optimales Spielvergnügen",color:"from-yellow-400 to-orange-500"},{icon:x,title:"Klimatisierte Halle",description:"Optimale Bedingungen bei jedem Wetter in unserer modernen Halle",color:"from-blue-400 to-blue-600"},{icon:y,title:"Trainingsbereich",description:"Ballmaschinen und Trainingsgeräte für gezieltes Training",color:"from-red-400 to-red-600"},{icon:_,title:"Clubhaus",description:"Gemütliches Clubhaus mit Aufenthaltsraum und Küche",color:"from-green-400 to-green-600"},{icon:w,title:"Kostenloses WLAN",description:"Schnelles Internet auf der gesamten Anlage",color:"from-purple-400 to-purple-600"},{icon:b,title:"Umkleiden & Duschen",description:"Moderne, saubere Umkleideräume mit Duschen",color:"from-cyan-400 to-cyan-600"}];return(d,o)=>(a(),i("section",M,[e("div",z,[o[0]||(o[0]=e("div",{class:"text-center mb-16"},[e("h2",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"}," Unsere Anlagen "),e("div",{class:"w-24 h-1 bg-primary-600 mx-auto mb-6"}),e("p",{class:"text-xl text-gray-600 max-w-3xl mx-auto"}," Moderne Ausstattung und erstklassige Einrichtungen für ein perfektes Tischtenniserlebnis ")],-1)),e("div",j,[(a(),i(h,null,m(n,t=>e("div",{key:t.title,class:"group relative bg-white rounded-2xl shadow-lg hover:shadow-2xl transition-all duration-300 overflow-hidden border border-gray-100"},[e("div",{class:r(["absolute top-0 left-0 right-0 h-1 bg-gradient-to-r opacity-0 group-hover:opacity-100 transition-opacity",t.color])},null,2),e("div",A,[e("div",{class:r(["w-16 h-16 bg-gradient-to-br rounded-xl flex items-center justify-center mb-4 group-hover:scale-110 transition-transform",t.color])},[(a(),u(g(t.icon),{size:32,class:"text-white"}))],2),e("h3",D,l(t.title),1),e("p",I,l(t.description),1)])])),64))]),o[1]||(o[1]=p('<div class="grid md:grid-cols-2 gap-6"><div class="relative h-[300px] rounded-2xl overflow-hidden shadow-xl group"><div class="w-full h-full bg-cover bg-center group-hover:scale-110 transition-transform duration-700" style="background-image:url(&#39;https://images.unsplash.com/photo-1534438097545-77fef53fe2e8?q=80&amp;w=2070&#39;);"></div><div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent flex items-end"><p class="text-white font-semibold text-xl p-6">Hochwertige Wettkampftische</p></div></div><div class="relative h-[300px] rounded-2xl overflow-hidden shadow-xl group"><div class="w-full h-full bg-cover bg-center group-hover:scale-110 transition-transform duration-700" style="background-image:url(&#39;https://images.unsplash.com/photo-1611004275469-8583ed5d7b8d?q=80&amp;w=2070&#39;);"></div><div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent flex items-end"><p class="text-white font-semibold text-xl p-6">Moderne Tischtennishalle</p></div></div></div>',1))])]))}},q={class:"min-h-screen"},B={__name:"anlagen",setup(c){return v({title:"Anlagen - Harheimer TC"}),(n,d)=>(a(),i("div",q,[f(S)]))}};export{B as default};

View File

@@ -1 +1 @@
import{u as e}from"./Bhv0LDrk.js";import{c as r,j as s,o as a}from"#entry";const d={class:"min-h-full py-16 bg-gray-50"},n={__name:"vorstand",setup(l){return e({title:"Vorstand - Harheimer TC"}),(o,t)=>(a(),r("div",d,[...t[0]||(t[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Vorstand </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="prose prose-lg max-w-none"><p class="text-xl text-gray-600 mb-8"> Unser engagiertes Vorstandsteam leitet den Harheimer TC mit Herz und Sachverstand. </p><div class="grid md:grid-cols-2 gap-8 not-prose"><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Vorsitzender</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Roger Dichmann</h4><div class="space-y-1 text-gray-600"><p>Reginastr. 46</p><p>60437 Frankfurt</p><p>Tel. 06101-9953015</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Stellvertreter des Vorsitzenden</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Kratz</h4><div class="space-y-1 text-gray-600"><p>Bürgerstr. 68</p><p>60437 Frankfurt</p><p>Tel. 06101-43221</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Kassenwart</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Olaf Nüßlein</h4><div class="space-y-1 text-gray-600"><p>Am Eschbachtal 52</p><p>60437 Frankfurt</p><p>Tel. 06101-47469</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Schriftführer</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Dichmann</h4><div class="space-y-1 text-gray-600"><p>In der Fuchskaut 4</p><p>60437 Frankfurt</p><p>Tel. 06101-4992227</p></div></div></div></div></div>',1)])]))}};export{n as default};
import{u as e}from"./BHFrGoXk.js";import{c as r,p as s,o as a}from"#entry";const d={class:"min-h-full py-16 bg-gray-50"},n={__name:"vorstand",setup(l){return e({title:"Vorstand - Harheimer TC"}),(o,t)=>(a(),r("div",d,[...t[0]||(t[0]=[s('<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Vorstand </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="prose prose-lg max-w-none"><p class="text-xl text-gray-600 mb-8"> Unser engagiertes Vorstandsteam leitet den Harheimer TC mit Herz und Sachverstand. </p><div class="grid md:grid-cols-2 gap-8 not-prose"><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Vorsitzender</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Roger Dichmann</h4><div class="space-y-1 text-gray-600"><p>Reginastr. 46</p><p>60437 Frankfurt</p><p>Tel. 06101-9953015</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Stellvertreter des Vorsitzenden</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Kratz</h4><div class="space-y-1 text-gray-600"><p>Bürgerstr. 68</p><p>60437 Frankfurt</p><p>Tel. 06101-43221</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Kassenwart</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Olaf Nüßlein</h4><div class="space-y-1 text-gray-600"><p>Am Eschbachtal 52</p><p>60437 Frankfurt</p><p>Tel. 06101-47469</p></div></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><h3 class="text-xl font-display font-bold text-gray-900 mb-2">Schriftführer</h3><h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Dichmann</h4><div class="space-y-1 text-gray-600"><p>In der Fuchskaut 4</p><p>60437 Frankfurt</p><p>Tel. 06101-4992227</p></div></div></div></div></div>',1)])]))}};export{n as default};

View File

@@ -0,0 +1,6 @@
import{u as n}from"./BHFrGoXk.js";import{C as l}from"./YJHbYJtA.js";import{N as d}from"./DAACT36i.js";import{F as a}from"./BteKZQ9T.js";import{U as m}from"./DkeYb0_S.js";import{e as x,r as g,g as p,c as y,a as e,t as f,b as r,u as i,o as b}from"#entry";/**
* @license lucide-vue-next v0.344.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const u=x("ImageIcon",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]),c={class:"min-h-full py-16 bg-gray-50"},v={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},h={class:"bg-white rounded-xl shadow-lg p-8 mb-8"},w={class:"text-2xl font-display font-bold text-gray-900 mb-4"},_={class:"grid md:grid-cols-2 lg:grid-cols-3 gap-6"},k={class:"bg-white p-6 rounded-xl shadow-lg border border-gray-100"},z={class:"flex items-center mb-4"},I={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},M={class:"bg-white p-6 rounded-xl shadow-lg border border-gray-100"},S={class:"flex items-center mb-4"},C={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},N={class:"bg-white p-6 rounded-xl shadow-lg border border-gray-100"},j={class:"flex items-center mb-4"},B={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},L={class:"bg-white p-6 rounded-xl shadow-lg border border-gray-100"},T={class:"flex items-center mb-4"},F={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},H={class:"bg-white p-6 rounded-xl shadow-lg border border-gray-100"},U={class:"flex items-center mb-4"},V={class:"w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"},J={__name:"index",setup(W){const o=g(null);return p(async()=>{try{const s=await $fetch("/api/auth/status");s.isLoggedIn&&(o.value=s.user)}catch(s){console.error("Fehler beim Laden der Benutzerdaten:",s)}}),n({title:"CMS - Harheimer TC"}),(s,t)=>(b(),y("div",c,[e("div",v,[t[16]||(t[16]=e("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Content Management System ",-1)),t[17]||(t[17]=e("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),e("div",h,[e("h2",w," Willkommen im CMS, "+f(o.value?.name)+"! ",1),t[0]||(t[0]=e("p",{class:"text-gray-600"}," Hier können Sie Inhalte der Website verwalten. ",-1))]),e("div",_,[e("div",k,[e("div",z,[e("div",I,[r(i(l),{size:24,class:"text-primary-600"})]),t[1]||(t[1]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Termine verwalten",-1))]),t[2]||(t[2]=e("p",{class:"text-gray-600 text-sm mb-4"}," Termine hinzufügen, bearbeiten und löschen ",-1)),t[3]||(t[3]=e("button",{class:"text-sm text-primary-600 hover:text-primary-700 font-medium"}," Öffnen → ",-1))]),e("div",M,[e("div",S,[e("div",C,[r(i(d),{size:24,class:"text-primary-600"})]),t[4]||(t[4]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Interne News",-1))]),t[5]||(t[5]=e("p",{class:"text-gray-600 text-sm mb-4"}," News für Mitglieder erstellen und verwalten ",-1)),t[6]||(t[6]=e("button",{class:"text-sm text-primary-600 hover:text-primary-700 font-medium"}," Öffnen → ",-1))]),e("div",N,[e("div",j,[e("div",B,[r(i(a),{size:24,class:"text-primary-600"})]),t[7]||(t[7]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Spielpläne",-1))]),t[8]||(t[8]=e("p",{class:"text-gray-600 text-sm mb-4"}," Spielpläne hochladen und verwalten ",-1)),t[9]||(t[9]=e("button",{class:"text-sm text-primary-600 hover:text-primary-700 font-medium"}," Öffnen → ",-1))]),e("div",L,[e("div",T,[e("div",F,[r(i(m),{size:24,class:"text-primary-600"})]),t[10]||(t[10]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Mitglieder",-1))]),t[11]||(t[11]=e("p",{class:"text-gray-600 text-sm mb-4"}," Mitgliederdaten verwalten ",-1)),t[12]||(t[12]=e("button",{class:"text-sm text-primary-600 hover:text-primary-700 font-medium"}," Öffnen → ",-1))]),e("div",H,[e("div",U,[e("div",V,[r(i(u),{size:24,class:"text-primary-600"})]),t[13]||(t[13]=e("h3",{class:"text-lg font-semibold text-gray-900"},"Galerie",-1))]),t[14]||(t[14]=e("p",{class:"text-gray-600 text-sm mb-4"}," Bilder hochladen und verwalten ",-1)),t[15]||(t[15]=e("button",{class:"text-sm text-primary-600 hover:text-primary-700 font-medium"}," Öffnen → ",-1))])])])]))}};export{J as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{r as d,g as f,m as _,c as a,h as u,o as n,a as e,F as b,i as y,t as m,p as h,b as p,u as w,X as k}from"#entry";import{u as C}from"./Bhv0LDrk.js";const L={key:0,id:"gallery",class:"py-16 sm:py-20 bg-gradient-to-b from-white to-gray-50"},$={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},j={class:"grid sm:grid-cols-4 lg:grid-cols-6 xl:grid-cols-8 gap-2"},E=["onClick"],B=["src","alt"],G={class:"absolute inset-0 bg-gradient-to-t from-black/70 via-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end"},V={class:"text-white font-semibold text-xs p-1 truncate"},z={class:"relative w-full h-full flex items-center justify-center"},F=["src","alt"],N={class:"absolute bottom-4 left-4 right-4 text-center"},H={class:"text-white font-semibold text-lg bg-black/50 rounded-lg px-4 py-2"},I={__name:"Gallery",setup(g){const s=d([]),t=d(null),x=async()=>{try{const o=await $fetch("/api/galerie");s.value=o||[]}catch(o){console.error("Fehler beim Laden der Galerie-Bilder:",o),s.value=[]}},v=o=>{t.value=o,document.body.style.overflow="hidden"},i=()=>{t.value=null,document.body.style.overflow="auto"},c=o=>{o.key==="Escape"&&t.value&&i()};return f(()=>{x(),document.addEventListener("keydown",c)}),_(()=>{document.removeEventListener("keydown",c),document.body.style.overflow="auto"}),(o,r)=>s.value.length>0?(n(),a("section",L,[e("div",$,[r[1]||(r[1]=e("div",{class:"text-center mb-16"},[e("h2",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"}," Galerie "),e("div",{class:"w-24 h-1 bg-primary-600 mx-auto mb-6"}),e("p",{class:"text-xl text-gray-600 max-w-3xl mx-auto"}," Eindrücke von unserem Verein ")],-1)),e("div",j,[(n(!0),a(b,null,y(s.value,l=>(n(),a("div",{key:l.filename,class:"group relative w-20 h-20 rounded-md overflow-hidden shadow-sm hover:shadow-lg transition-all duration-300 cursor-pointer",onClick:D=>v(l)},[e("img",{src:`/galerie/${l.filename}`,alt:l.title,class:"w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"},null,8,B),e("div",G,[e("p",V,m(l.title),1)])],8,E))),128))]),t.value?(n(),a("div",{key:0,class:"fixed inset-0 z-50 bg-black/90 flex items-center justify-center p-4",onClick:i},[e("div",z,[e("button",{onClick:h(i,["stop"]),class:"absolute top-4 right-4 z-10 w-10 h-10 bg-white/20 hover:bg-white/30 rounded-full flex items-center justify-center text-white transition-colors"},[p(w(k),{size:24})]),e("img",{src:`/galerie/${t.value.filename}`,alt:t.value.title,class:"max-w-[80vw] max-h-[80vh] object-contain rounded-lg",onClick:r[0]||(r[0]=h(()=>{},["stop"]))},null,8,F),e("div",N,[e("p",H,m(t.value.title),1)])])])):u("",!0)])])):u("",!0)}},M={class:"min-h-screen"},T={__name:"galerie",setup(g){return C({title:"Galerie - Harheimer TC"}),(s,t)=>(n(),a("div",M,[p(I)]))}};export{T as default};
import{r as d,g as f,s as _,c as a,h as u,o as n,a as e,F as b,i as y,t as m,j as h,b as g,u as w,X as k}from"#entry";import{u as C}from"./BHFrGoXk.js";const j={key:0,id:"gallery",class:"py-16 sm:py-20 bg-gradient-to-b from-white to-gray-50"},L={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},$={class:"grid sm:grid-cols-4 lg:grid-cols-6 xl:grid-cols-8 gap-2"},E=["onClick"],B=["src","alt"],G={class:"absolute inset-0 bg-gradient-to-t from-black/70 via-black/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-end"},V={class:"text-white font-semibold text-xs p-1 truncate"},z={class:"relative w-full h-full flex items-center justify-center"},F=["src","alt"],N={class:"absolute bottom-4 left-4 right-4 text-center"},H={class:"text-white font-semibold text-lg bg-black/50 rounded-lg px-4 py-2"},I={__name:"Gallery",setup(p){const s=d([]),t=d(null),x=async()=>{try{const o=await $fetch("/api/galerie");s.value=o||[]}catch(o){console.error("Fehler beim Laden der Galerie-Bilder:",o),s.value=[]}},v=o=>{t.value=o,document.body.style.overflow="hidden"},i=()=>{t.value=null,document.body.style.overflow="auto"},c=o=>{o.key==="Escape"&&t.value&&i()};return f(()=>{x(),document.addEventListener("keydown",c)}),_(()=>{document.removeEventListener("keydown",c),document.body.style.overflow="auto"}),(o,r)=>s.value.length>0?(n(),a("section",j,[e("div",L,[r[1]||(r[1]=e("div",{class:"text-center mb-16"},[e("h2",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"}," Galerie "),e("div",{class:"w-24 h-1 bg-primary-600 mx-auto mb-6"}),e("p",{class:"text-xl text-gray-600 max-w-3xl mx-auto"}," Eindrücke von unserem Verein ")],-1)),e("div",$,[(n(!0),a(b,null,y(s.value,l=>(n(),a("div",{key:l.filename,class:"group relative w-20 h-20 rounded-md overflow-hidden shadow-sm hover:shadow-lg transition-all duration-300 cursor-pointer",onClick:D=>v(l)},[e("img",{src:`/galerie/${l.filename}`,alt:l.title,class:"w-full h-full object-cover group-hover:scale-110 transition-transform duration-700"},null,8,B),e("div",G,[e("p",V,m(l.title),1)])],8,E))),128))]),t.value?(n(),a("div",{key:0,class:"fixed inset-0 z-50 bg-black/90 flex items-center justify-center p-4",onClick:i},[e("div",z,[e("button",{onClick:h(i,["stop"]),class:"absolute top-4 right-4 z-10 w-10 h-10 bg-white/20 hover:bg-white/30 rounded-full flex items-center justify-center text-white transition-colors"},[g(w(k),{size:24})]),e("img",{src:`/galerie/${t.value.filename}`,alt:t.value.title,class:"max-w-[80vw] max-h-[80vh] object-contain rounded-lg",onClick:r[0]||(r[0]=h(()=>{},["stop"]))},null,8,F),e("div",N,[e("p",H,m(t.value.title),1)])])])):u("",!0)])])):u("",!0)}},M={class:"min-h-screen"},T={__name:"galerie",setup(p){return C({title:"Galerie - Harheimer TC"}),(s,t)=>(n(),a("div",M,[g(I)]))}};export{T as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"id":"3f41ef7c-4e7d-47ac-be92-3158208aa3f3","timestamp":1761033899613}
{"id":"c7d727aa-6261-4dc2-a9f3-dbb4e2f26b06","timestamp":1761039042710}

View File

@@ -1 +0,0 @@
{"id":"3f41ef7c-4e7d-47ac-be92-3158208aa3f3","timestamp":1761033899613,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

View File

@@ -0,0 +1 @@
{"id":"c7d727aa-6261-4dc2-a9f3-dbb4e2f26b06","timestamp":1761039042710,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{c as a,a as t,b as e,u as r,j as l,w as o,_ as m,o as d,d as x}from"#entry";import{u as p}from"./Bhv0LDrk.js";import{C as n}from"./DaSgy0Cl.js";const g={class:"min-h-full py-16 bg-gray-50"},f={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},y={class:"prose prose-lg max-w-none"},u={class:"bg-white p-8 rounded-xl shadow-lg not-prose mb-8"},b={class:"space-y-3"},c={class:"flex items-start"},h={class:"flex items-start"},_={class:"flex items-start"},k={class:"flex items-start"},v={class:"flex items-start"},w={class:"bg-primary-50 p-8 rounded-xl border border-primary-100 not-prose"},C={__name:"anfaenger",setup(z){return p({title:"Für Anfänger - Harheimer TC"}),(D,s)=>{const i=m;return d(),a("div",g,[t("div",f,[s[9]||(s[9]=t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Tischtennis für Anfänger ",-1)),s[10]||(s[10]=t("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),t("div",y,[s[8]||(s[8]=t("p",{class:"text-xl text-gray-600 mb-8"}," Du möchtest mit Tischtennis anfangen? Perfekt! Bei uns bist du richtig. ",-1)),t("div",u,[s[5]||(s[5]=t("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Was du wissen solltest ",-1)),t("ul",b,[t("li",c,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[0]||(s[0]=t("span",{class:"text-gray-700"},"Keine Vorkenntnisse nötig",-1))]),t("li",h,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[1]||(s[1]=t("span",{class:"text-gray-700"},"Schläger und Material werden gestellt",-1))]),t("li",_,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[2]||(s[2]=t("span",{class:"text-gray-700"},"Sportkleidung und Hallenschuhe mitbringen",-1))]),t("li",k,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[3]||(s[3]=t("span",{class:"text-gray-700"},"3x kostenlos Probetraining",-1))]),t("li",v,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[4]||(s[4]=t("span",{class:"text-gray-700"},"Einstieg jederzeit möglich",-1))])])]),t("div",w,[s[7]||(s[7]=l('<h3 class="text-2xl font-display font-bold text-gray-900 mb-4"> Anfängergruppen </h3><div class="space-y-4 mb-6"><div><h4 class="font-semibold text-gray-900 mb-1">Schüler/Jugend (ab 6 Jahre)</h4><p class="text-gray-600">Dienstag, 17:30 - 19:30 Uhr</p></div><div><h4 class="font-semibold text-gray-900 mb-1">Damen und Herren</h4><p class="text-gray-600">Dienstag &amp; Donnerstag, 19:30 - 22:30 Uhr</p></div></div>',2)),e(i,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[6]||(s[6]=[x(" Zum Probetraining anmelden ",-1)])]),_:1})])])])])}}};export{C as default};
import{c as a,a as t,b as e,u as r,p as l,w as o,_ as m,o as d,d as x}from"#entry";import{u as p}from"./BHFrGoXk.js";import{C as n}from"./DaSgy0Cl.js";const g={class:"min-h-full py-16 bg-gray-50"},f={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"},y={class:"prose prose-lg max-w-none"},u={class:"bg-white p-8 rounded-xl shadow-lg not-prose mb-8"},b={class:"space-y-3"},c={class:"flex items-start"},h={class:"flex items-start"},_={class:"flex items-start"},k={class:"flex items-start"},v={class:"flex items-start"},w={class:"bg-primary-50 p-8 rounded-xl border border-primary-100 not-prose"},C={__name:"anfaenger",setup(z){return p({title:"Für Anfänger - Harheimer TC"}),(D,s)=>{const i=m;return d(),a("div",g,[t("div",f,[s[9]||(s[9]=t("h1",{class:"text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"}," Tischtennis für Anfänger ",-1)),s[10]||(s[10]=t("div",{class:"w-24 h-1 bg-primary-600 mb-8"},null,-1)),t("div",y,[s[8]||(s[8]=t("p",{class:"text-xl text-gray-600 mb-8"}," Du möchtest mit Tischtennis anfangen? Perfekt! Bei uns bist du richtig. ",-1)),t("div",u,[s[5]||(s[5]=t("h3",{class:"text-2xl font-display font-bold text-gray-900 mb-4"}," Was du wissen solltest ",-1)),t("ul",b,[t("li",c,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[0]||(s[0]=t("span",{class:"text-gray-700"},"Keine Vorkenntnisse nötig",-1))]),t("li",h,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[1]||(s[1]=t("span",{class:"text-gray-700"},"Schläger und Material werden gestellt",-1))]),t("li",_,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[2]||(s[2]=t("span",{class:"text-gray-700"},"Sportkleidung und Hallenschuhe mitbringen",-1))]),t("li",k,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[3]||(s[3]=t("span",{class:"text-gray-700"},"3x kostenlos Probetraining",-1))]),t("li",v,[e(r(n),{size:24,class:"text-primary-600 mr-3 flex-shrink-0 mt-0.5"}),s[4]||(s[4]=t("span",{class:"text-gray-700"},"Einstieg jederzeit möglich",-1))])])]),t("div",w,[s[7]||(s[7]=l('<h3 class="text-2xl font-display font-bold text-gray-900 mb-4"> Anfängergruppen </h3><div class="space-y-4 mb-6"><div><h4 class="font-semibold text-gray-900 mb-1">Schüler/Jugend (ab 6 Jahre)</h4><p class="text-gray-600">Dienstag, 17:30 - 19:30 Uhr</p></div><div><h4 class="font-semibold text-gray-900 mb-1">Damen und Herren</h4><p class="text-gray-600">Dienstag &amp; Donnerstag, 19:30 - 22:30 Uhr</p></div></div>',2)),e(i,{to:"/kontakt",class:"inline-flex items-center px-6 py-3 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors"},{default:o(()=>[...s[6]||(s[6]=[x(" Zum Probetraining anmelden ",-1)])]),_:1})])])])])}}};export{C as default};

View File

@@ -0,0 +1 @@
import{r as o,c as d,a as e,j as b,h as u,k as y,v as h,n as _,b as m,d as c,u as p,t as g,l as w,w as k,_ as z,o as i}from"#entry";import{u as M}from"./BHFrGoXk.js";import{A as E}from"./C8kQt0fa.js";import{C}from"./DaSgy0Cl.js";import{L as A}from"./CUq_0rkE.js";const L={class:"min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50"},P={class:"max-w-md w-full space-y-8"},S={class:"bg-white rounded-xl shadow-lg p-8"},B={key:0,class:"bg-red-50 border border-red-200 rounded-lg p-4"},N={class:"text-sm text-red-800 flex items-center"},V={key:1,class:"bg-green-50 border border-green-200 rounded-lg p-4"},I={class:"text-sm text-green-800 flex items-center"},T=["disabled"],j={class:"text-center"},O={__name:"passwort-vergessen",setup(D){const a=o(""),t=o(!1),r=o(""),l=o(""),x=async()=>{t.value=!0,r.value="",l.value="";try{(await $fetch("/api/auth/reset-password",{method:"POST",body:{email:a.value}})).success&&(l.value="Eine E-Mail mit weiteren Anweisungen wurde an Ihre E-Mail-Adresse gesendet.",a.value="")}catch(n){r.value=n.data?.message||"Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut."}finally{t.value=!1}};return M({title:"Passwort vergessen - Harheimer TC"}),(n,s)=>{const f=z;return i(),d("div",L,[e("div",P,[s[3]||(s[3]=e("div",{class:"text-center"},[e("h2",{class:"text-3xl font-display font-bold text-gray-900"}," Passwort zurücksetzen "),e("p",{class:"mt-2 text-sm text-gray-600"}," Geben Sie Ihre E-Mail-Adresse ein, um Ihr Passwort zurückzusetzen ")],-1)),e("div",S,[e("form",{onSubmit:b(x,["prevent"]),class:"space-y-6"},[e("div",null,[s[1]||(s[1]=e("label",{for:"email",class:"block text-sm font-medium text-gray-700 mb-2"}," E-Mail-Adresse ",-1)),y(e("input",{id:"email","onUpdate:modelValue":s[0]||(s[0]=v=>a.value=v),type:"email",required:"",autocomplete:"email",class:_(["w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all",{"border-red-500":r.value}]),placeholder:"ihre-email@example.com"},null,2),[[h,a.value]])]),r.value?(i(),d("div",B,[e("p",N,[m(p(E),{size:18,class:"mr-2"}),c(" "+g(r.value),1)])])):u("",!0),l.value?(i(),d("div",V,[e("p",I,[m(p(C),{size:18,class:"mr-2"}),c(" "+g(l.value),1)])])):u("",!0),e("button",{type:"submit",disabled:t.value,class:"w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center"},[t.value?(i(),w(p(A),{key:0,size:20,class:"mr-2 animate-spin"})):u("",!0),e("span",null,g(t.value?"Wird gesendet...":"Passwort zurücksetzen"),1)],8,T),e("div",j,[m(f,{to:"/login",class:"text-sm text-primary-600 hover:text-primary-700 font-medium"},{default:k(()=>[...s[2]||(s[2]=[c(" Zurück zum Login ",-1)])]),_:1})])],32)]),s[4]||(s[4]=e("div",{class:"bg-primary-50 border border-primary-100 rounded-lg p-4"},[e("p",{class:"text-sm text-primary-800 text-center"}," Sie erhalten eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts. ")],-1))])])}}};export{O as default};

View File

@@ -0,0 +1,104 @@
import bcrypt from 'bcryptjs';
import jwt from 'jsonwebtoken';
import { promises } from 'fs';
import path from 'path';
const JWT_SECRET = process.env.JWT_SECRET || "harheimertc-secret-key-change-in-production";
const getDataPath = (filename) => {
const cwd = process.cwd();
if (cwd.endsWith(".output")) {
return path.join(cwd, "../server/data", filename);
}
return path.join(cwd, "server/data", filename);
};
const USERS_FILE = getDataPath("users.json");
const SESSIONS_FILE = getDataPath("sessions.json");
async function readUsers() {
try {
const data = await promises.readFile(USERS_FILE, "utf-8");
return JSON.parse(data);
} catch (error) {
console.error("Fehler beim Lesen der Benutzerdaten:", error);
return [];
}
}
async function writeUsers(users) {
try {
await promises.writeFile(USERS_FILE, JSON.stringify(users, null, 2), "utf-8");
return true;
} catch (error) {
console.error("Fehler beim Schreiben der Benutzerdaten:", error);
return false;
}
}
async function readSessions() {
try {
const data = await promises.readFile(SESSIONS_FILE, "utf-8");
return JSON.parse(data);
} catch (error) {
console.error("Fehler beim Lesen der Sessions:", error);
return [];
}
}
async function writeSessions(sessions) {
try {
await promises.writeFile(SESSIONS_FILE, JSON.stringify(sessions, null, 2), "utf-8");
return true;
} catch (error) {
console.error("Fehler beim Schreiben der Sessions:", error);
return false;
}
}
async function hashPassword(password) {
const salt = await bcrypt.genSalt(10);
return await bcrypt.hash(password, salt);
}
async function verifyPassword(password, hash) {
return await bcrypt.compare(password, hash);
}
function generateToken(user) {
return jwt.sign(
{
id: user.id,
email: user.email,
role: user.role
},
JWT_SECRET,
{ expiresIn: "7d" }
);
}
function verifyToken(token) {
try {
return jwt.verify(token, JWT_SECRET);
} catch (error) {
return null;
}
}
async function getUserFromToken(token) {
const decoded = verifyToken(token);
if (!decoded) return null;
const users = await readUsers();
return users.find((u) => u.id === decoded.id);
}
async function createSession(userId, token) {
const sessions = await readSessions();
const session = {
id: Date.now().toString(),
userId,
token,
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString()
// 7 days
};
sessions.push(session);
await writeSessions(sessions);
return session;
}
async function deleteSession(token) {
const sessions = await readSessions();
const filtered = sessions.filter((s) => s.token !== token);
await writeSessions(filtered);
}
export { getUserFromToken as a, createSession as c, deleteSession as d, generateToken as g, hashPassword as h, readUsers as r, verifyPassword as v, writeUsers as w };
//# sourceMappingURL=auth.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"auth.mjs","sources":["../../../../server/utils/auth.js"],"sourcesContent":null,"names":["fs"],"mappings":";;;;;AAMA,MAAM,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,6CAAA;AAG7C,MAAM,WAAA,GAAc,CAAC,QAAA,KAAa;AAChC,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AAGxB,EAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,gBAAA,EAAkB,QAAQ,CAAA;AAAA,EAClD;AAGA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,aAAA,EAAe,QAAQ,CAAA;AAC/C,CAAA;AAEA,MAAM,UAAA,GAAa,YAAY,YAAY,CAAA;AAC3C,MAAM,aAAA,GAAgB,YAAY,eAAe,CAAA;AAGjD,eAAsB,SAAA,GAAY;AAChC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAMA,QAAA,CAAG,QAAA,CAAS,YAAY,OAAO,CAAA;AAClD,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAC3D,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAGA,eAAsB,WAAW,KAAA,EAAO;AACtC,EAAA,IAAI;AACF,IAAA,MAAMA,QAAA,CAAG,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AACtE,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,KAAK,CAAA;AAC/D,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,eAAsB,YAAA,GAAe;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAMA,QAAA,CAAG,QAAA,CAAS,eAAe,OAAO,CAAA;AACrD,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAGA,eAAsB,cAAc,QAAA,EAAU;AAC5C,EAAA,IAAI;AACF,IAAA,MAAMA,QAAA,CAAG,UAAU,aAAA,EAAe,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAC5E,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,KAAK,CAAA;AAC1D,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGA,eAAsB,aAAa,QAAA,EAAU;AAC3C,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AACpC,EAAA,OAAO,MAAM,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AACzC;AAGA,eAAsB,cAAA,CAAe,UAAU,IAAA,EAAM;AACnD,EAAA,OAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AAC5C;AAGO,SAAS,cAAc,IAAA,EAAM;AAClC,EAAA,OAAO,GAAA,CAAI,IAAA;AAAA,IACT;AAAA,MACE,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK;AAAA,KACb;AAAA,IACA,UAAA;AAAA,IACA,EAAE,WAAW,IAAA;AAAK,GACpB;AACF;AAGO,SAAS,YAAY,KAAA,EAAO;AACjC,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AAAA,EACrC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGA,eAAsB,iBAAiB,KAAA,EAAO;AAC5C,EAAA,MAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AACjC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,EAAU;AAC9B,EAAA,OAAO,MAAM,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,QAAQ,EAAE,CAAA;AAC5C;AAGA,eAAsB,aAAA,CAAc,QAAQ,KAAA,EAAO;AACjD,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,EAAa;AACpC,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,EAAA,EAAI,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAAA,IACxB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,SAAA,EAAW,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,GAAI,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAI,CAAA,CAAE,WAAA;AAAY;AAAA,GACxE;AACA,EAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,EAAA,MAAM,cAAc,QAAQ,CAAA;AAC5B,EAAA,OAAO,OAAA;AACT;AAGA,eAAsB,cAAc,KAAA,EAAO;AACzC,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,EAAa;AACpC,EAAA,MAAM,WAAW,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU,KAAK,CAAA;AACvD,EAAA,MAAM,cAAc,QAAQ,CAAA;AAC9B;;;;"}

View File

@@ -0,0 +1,456 @@
import { z as executeAsync, D as hash } from '../nitro/nitro.mjs';
import { d as defineNuxtRouteMiddleware, n as navigateTo, f as fetchDefaults, a as useNuxtApp, b as asyncDataDefaults, c as createError } from './server.mjs';
import { computed, toValue, reactive, watch, getCurrentInstance, onServerPrefetch, ref, shallowRef, toRef, nextTick, unref, defineComponent, createElementBlock, provide, cloneVNode, h } from 'vue';
import { isPlainObject } from '@vue/shared';
import { debounce } from 'perfect-debounce';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'vue/server-renderer';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
import 'lucide-vue-next';
function useRequestEvent(nuxtApp) {
var _a;
nuxtApp || (nuxtApp = useNuxtApp());
return (_a = nuxtApp.ssrContext) == null ? void 0 : _a.event;
}
function useRequestFetch() {
var _a;
return ((_a = useRequestEvent()) == null ? void 0 : _a.$fetch) || globalThis.$fetch;
}
defineComponent({
name: "ServerPlaceholder",
render() {
return createElementBlock("div");
}
});
const clientOnlySymbol = Symbol.for("nuxt:client-only");
defineComponent({
name: "ClientOnly",
inheritAttrs: false,
props: ["fallback", "placeholder", "placeholderTag", "fallbackTag"],
...false,
setup(props, { slots, attrs }) {
const mounted = shallowRef(false);
const vm = getCurrentInstance();
if (vm) {
vm._nuxtClientOnly = true;
}
provide(clientOnlySymbol, true);
return () => {
var _a;
if (mounted.value) {
const vnodes = (_a = slots.default) == null ? void 0 : _a.call(slots);
if (vnodes && vnodes.length === 1) {
return [cloneVNode(vnodes[0], attrs)];
}
return vnodes;
}
const slot = slots.fallback || slots.placeholder;
if (slot) {
return h(slot);
}
const fallbackStr = props.fallback || props.placeholder || "";
const fallbackTag = props.fallbackTag || props.placeholderTag || "span";
return createElementBlock(fallbackTag, attrs, fallbackStr);
};
}
});
const isDefer = (dedupe) => dedupe === "defer" || dedupe === false;
function useAsyncData(...args) {
var _a, _b, _c, _d, _e, _f, _g;
const autoKey = typeof args[args.length - 1] === "string" ? args.pop() : void 0;
if (_isAutoKeyNeeded(args[0], args[1])) {
args.unshift(autoKey);
}
let [_key, _handler, options = {}] = args;
const key = computed(() => toValue(_key));
if (typeof key.value !== "string") {
throw new TypeError("[nuxt] [useAsyncData] key must be a string.");
}
if (typeof _handler !== "function") {
throw new TypeError("[nuxt] [useAsyncData] handler must be a function.");
}
const nuxtApp = useNuxtApp();
(_a = options.server) != null ? _a : options.server = true;
(_b = options.default) != null ? _b : options.default = getDefault;
(_c = options.getCachedData) != null ? _c : options.getCachedData = getDefaultCachedData;
(_d = options.lazy) != null ? _d : options.lazy = false;
(_e = options.immediate) != null ? _e : options.immediate = true;
(_f = options.deep) != null ? _f : options.deep = asyncDataDefaults.deep;
(_g = options.dedupe) != null ? _g : options.dedupe = "cancel";
options._functionName || "useAsyncData";
nuxtApp._asyncData[key.value];
function createInitialFetch() {
var _a2;
const initialFetchOptions = { cause: "initial", dedupe: options.dedupe };
if (!((_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2._init)) {
initialFetchOptions.cachedData = options.getCachedData(key.value, nuxtApp, { cause: "initial" });
nuxtApp._asyncData[key.value] = createAsyncData(nuxtApp, key.value, _handler, options, initialFetchOptions.cachedData);
}
return () => nuxtApp._asyncData[key.value].execute(initialFetchOptions);
}
const initialFetch = createInitialFetch();
const asyncData = nuxtApp._asyncData[key.value];
asyncData._deps++;
const fetchOnServer = options.server !== false && nuxtApp.payload.serverRendered;
if (fetchOnServer && options.immediate) {
const promise = initialFetch();
if (getCurrentInstance()) {
onServerPrefetch(() => promise);
} else {
nuxtApp.hook("app:created", async () => {
await promise;
});
}
}
const asyncReturn = {
data: writableComputedRef(() => {
var _a2;
return (_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2.data;
}),
pending: writableComputedRef(() => {
var _a2;
return (_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2.pending;
}),
status: writableComputedRef(() => {
var _a2;
return (_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2.status;
}),
error: writableComputedRef(() => {
var _a2;
return (_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2.error;
}),
refresh: (...args2) => {
var _a2;
if (!((_a2 = nuxtApp._asyncData[key.value]) == null ? void 0 : _a2._init)) {
const initialFetch2 = createInitialFetch();
return initialFetch2();
}
return nuxtApp._asyncData[key.value].execute(...args2);
},
execute: (...args2) => asyncReturn.refresh(...args2),
clear: () => clearNuxtDataByKey(nuxtApp, key.value)
};
const asyncDataPromise = Promise.resolve(nuxtApp._asyncDataPromises[key.value]).then(() => asyncReturn);
Object.assign(asyncDataPromise, asyncReturn);
return asyncDataPromise;
}
function writableComputedRef(getter) {
return computed({
get() {
var _a;
return (_a = getter()) == null ? void 0 : _a.value;
},
set(value) {
const ref2 = getter();
if (ref2) {
ref2.value = value;
}
}
});
}
function _isAutoKeyNeeded(keyOrFetcher, fetcher) {
if (typeof keyOrFetcher === "string") {
return false;
}
if (typeof keyOrFetcher === "object" && keyOrFetcher !== null) {
return false;
}
if (typeof keyOrFetcher === "function" && typeof fetcher === "function") {
return false;
}
return true;
}
function clearNuxtDataByKey(nuxtApp, key) {
if (key in nuxtApp.payload.data) {
nuxtApp.payload.data[key] = void 0;
}
if (key in nuxtApp.payload._errors) {
nuxtApp.payload._errors[key] = asyncDataDefaults.errorValue;
}
if (nuxtApp._asyncData[key]) {
nuxtApp._asyncData[key].data.value = void 0;
nuxtApp._asyncData[key].error.value = asyncDataDefaults.errorValue;
{
nuxtApp._asyncData[key].pending.value = false;
}
nuxtApp._asyncData[key].status.value = "idle";
}
if (key in nuxtApp._asyncDataPromises) {
if (nuxtApp._asyncDataPromises[key]) {
nuxtApp._asyncDataPromises[key].cancelled = true;
}
nuxtApp._asyncDataPromises[key] = void 0;
}
}
function pick(obj, keys) {
const newObj = {};
for (const key of keys) {
newObj[key] = obj[key];
}
return newObj;
}
function createAsyncData(nuxtApp, key, _handler, options, initialCachedData) {
var _a, _b;
(_b = (_a = nuxtApp.payload._errors)[key]) != null ? _b : _a[key] = asyncDataDefaults.errorValue;
const hasCustomGetCachedData = options.getCachedData !== getDefaultCachedData;
const handler = _handler ;
const _ref = options.deep ? ref : shallowRef;
const hasCachedData = initialCachedData != null;
const unsubRefreshAsyncData = nuxtApp.hook("app:data:refresh", async (keys) => {
if (!keys || keys.includes(key)) {
await asyncData.execute({ cause: "refresh:hook" });
}
});
const asyncData = {
data: _ref(hasCachedData ? initialCachedData : options.default()),
pending: shallowRef(!hasCachedData),
error: toRef(nuxtApp.payload._errors, key),
status: shallowRef("idle"),
execute: (...args) => {
var _a2, _b2;
const [_opts, newValue = void 0] = args;
const opts = _opts && newValue === void 0 && typeof _opts === "object" ? _opts : {};
if (nuxtApp._asyncDataPromises[key]) {
if (isDefer((_a2 = opts.dedupe) != null ? _a2 : options.dedupe)) {
return nuxtApp._asyncDataPromises[key];
}
nuxtApp._asyncDataPromises[key].cancelled = true;
}
if (opts.cause === "initial" || nuxtApp.isHydrating) {
const cachedData = "cachedData" in opts ? opts.cachedData : options.getCachedData(key, nuxtApp, { cause: (_b2 = opts.cause) != null ? _b2 : "refresh:manual" });
if (cachedData != null) {
nuxtApp.payload.data[key] = asyncData.data.value = cachedData;
asyncData.error.value = asyncDataDefaults.errorValue;
asyncData.status.value = "success";
return Promise.resolve(cachedData);
}
}
{
asyncData.pending.value = true;
}
asyncData.status.value = "pending";
const promise = new Promise(
(resolve, reject) => {
try {
resolve(handler(nuxtApp));
} catch (err) {
reject(err);
}
}
).then(async (_result) => {
if (promise.cancelled) {
return nuxtApp._asyncDataPromises[key];
}
let result = _result;
if (options.transform) {
result = await options.transform(_result);
}
if (options.pick) {
result = pick(result, options.pick);
}
nuxtApp.payload.data[key] = result;
asyncData.data.value = result;
asyncData.error.value = asyncDataDefaults.errorValue;
asyncData.status.value = "success";
}).catch((error) => {
if (promise.cancelled) {
return nuxtApp._asyncDataPromises[key];
}
asyncData.error.value = createError(error);
asyncData.data.value = unref(options.default());
asyncData.status.value = "error";
}).finally(() => {
if (promise.cancelled) {
return;
}
{
asyncData.pending.value = false;
}
delete nuxtApp._asyncDataPromises[key];
});
nuxtApp._asyncDataPromises[key] = promise;
return nuxtApp._asyncDataPromises[key];
},
_execute: debounce((...args) => asyncData.execute(...args), 0, { leading: true }),
_default: options.default,
_deps: 0,
_init: true,
_hash: void 0,
_off: () => {
var _a2;
unsubRefreshAsyncData();
if ((_a2 = nuxtApp._asyncData[key]) == null ? void 0 : _a2._init) {
nuxtApp._asyncData[key]._init = false;
}
if (!hasCustomGetCachedData) {
nextTick(() => {
var _a3;
if (!((_a3 = nuxtApp._asyncData[key]) == null ? void 0 : _a3._init)) {
clearNuxtDataByKey(nuxtApp, key);
asyncData.execute = () => Promise.resolve();
asyncData.data.value = asyncDataDefaults.value;
}
});
}
}
};
return asyncData;
}
const getDefault = () => asyncDataDefaults.value;
const getDefaultCachedData = (key, nuxtApp, ctx) => {
if (nuxtApp.isHydrating) {
return nuxtApp.payload.data[key];
}
if (ctx.cause !== "refresh:manual" && ctx.cause !== "refresh:hook") {
return nuxtApp.static.data[key];
}
};
function useFetch(request, arg1, arg2) {
const [opts = {}, autoKey] = [{}, arg1];
const _request = computed(() => toValue(request));
const key = computed(() => toValue(opts.key) || "$f" + hash([autoKey, typeof _request.value === "string" ? _request.value : "", ...generateOptionSegments(opts)]));
if (!opts.baseURL && typeof _request.value === "string" && (_request.value[0] === "/" && _request.value[1] === "/")) {
throw new Error('[nuxt] [useFetch] the request URL must not start with "//".');
}
const {
server,
lazy,
default: defaultFn,
transform,
pick: pick2,
watch: watchSources,
immediate,
getCachedData,
deep,
dedupe,
...fetchOptions
} = opts;
const _fetchOptions = reactive({
...fetchDefaults,
...fetchOptions,
cache: typeof opts.cache === "boolean" ? void 0 : opts.cache
});
const _asyncDataOptions = {
server,
lazy,
default: defaultFn,
transform,
pick: pick2,
immediate,
getCachedData,
deep,
dedupe,
watch: watchSources === false ? [] : [...watchSources || [], _fetchOptions]
};
if (!immediate) {
let setImmediate = function() {
_asyncDataOptions.immediate = true;
};
watch(key, setImmediate, { flush: "sync", once: true });
watch([...watchSources || [], _fetchOptions], setImmediate, { flush: "sync", once: true });
}
let controller;
const asyncData = useAsyncData(watchSources === false ? key.value : key, () => {
var _a;
(_a = controller == null ? void 0 : controller.abort) == null ? void 0 : _a.call(controller, new DOMException("Request aborted as another request to the same endpoint was initiated.", "AbortError"));
controller = typeof AbortController !== "undefined" ? new AbortController() : {};
const timeoutLength = toValue(opts.timeout);
let timeoutId;
if (timeoutLength) {
timeoutId = setTimeout(() => controller.abort(new DOMException("Request aborted due to timeout.", "AbortError")), timeoutLength);
controller.signal.onabort = () => clearTimeout(timeoutId);
}
let _$fetch = opts.$fetch || globalThis.$fetch;
if (!opts.$fetch) {
const isLocalFetch = typeof _request.value === "string" && _request.value[0] === "/" && (!toValue(opts.baseURL) || toValue(opts.baseURL)[0] === "/");
if (isLocalFetch) {
_$fetch = useRequestFetch();
}
}
return _$fetch(_request.value, { signal: controller.signal, ..._fetchOptions }).finally(() => {
clearTimeout(timeoutId);
});
}, _asyncDataOptions);
return asyncData;
}
function generateOptionSegments(opts) {
var _a;
const segments = [
((_a = toValue(opts.method)) == null ? void 0 : _a.toUpperCase()) || "GET",
toValue(opts.baseURL)
];
for (const _obj of [opts.params || opts.query]) {
const obj = toValue(_obj);
if (!obj) {
continue;
}
const unwrapped = {};
for (const [key, value] of Object.entries(obj)) {
unwrapped[toValue(key)] = toValue(value);
}
segments.push(unwrapped);
}
if (opts.body) {
const value = toValue(opts.body);
if (!value) {
segments.push(hash(value));
} else if (value instanceof ArrayBuffer) {
segments.push(hash(Object.fromEntries([...new Uint8Array(value).entries()].map(([k, v]) => [k, v.toString()]))));
} else if (value instanceof FormData) {
const obj = {};
for (const entry of value.entries()) {
const [key, val] = entry;
obj[key] = val instanceof File ? val.name : val;
}
segments.push(hash(obj));
} else if (isPlainObject(value)) {
segments.push(hash(reactive(value)));
} else {
try {
segments.push(hash(value));
} catch {
console.warn("[useFetch] Failed to hash body", value);
}
}
}
return segments;
}
const auth = defineNuxtRouteMiddleware(async (to, from) => {
let __temp, __restore;
const protectedRoutes = ["/mitgliederbereich", "/cms"];
const requiresAuth = protectedRoutes.some((route) => to.path.startsWith(route));
if (!requiresAuth) {
return;
}
try {
const { data: auth2 } = ([__temp, __restore] = executeAsync(() => useFetch("/api/auth/status", "$iafshigZRx")), __temp = await __temp, __restore(), __temp);
if (!auth2.value || !auth2.value.isLoggedIn) {
return navigateTo("/login?redirect=" + to.path);
}
if (to.path.startsWith("/cms")) {
const isAdmin = auth2.value.role === "admin" || auth2.value.role === "vorstand";
if (!isAdmin) {
return navigateTo("/mitgliederbereich");
}
}
} catch (error) {
return navigateTo("/login?redirect=" + to.path);
}
});
export { auth as default };
//# sourceMappingURL=auth-D7NaNMED.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"auth-D7NaNMED.mjs","sources":["../../../../node_modules/nuxt/dist/app/composables/ssr.js","../../../../node_modules/nuxt/dist/app/components/server-placeholder.js","../../../../node_modules/nuxt/dist/app/components/client-only.js","../../../../node_modules/nuxt/dist/app/composables/asyncData.js","../../../../node_modules/nuxt/dist/app/composables/fetch.js","../../../../middleware/auth.js"],"sourcesContent":null,"names":["_a","_b","pick","auth","__executeAsync"],"mappings":"","x_google_ignoreList":[0,1,2,3,4]}

View File

@@ -10,12 +10,12 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js"
]
},
"_Bhv0LDrk.js": {
"_BHFrGoXk.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "Bhv0LDrk.js",
"file": "BHFrGoXk.js",
"name": "v3",
"imports": [
"node_modules/nuxt/dist/app/entry.js"
@@ -43,6 +43,28 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js"
]
},
"_C8kQt0fa.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "C8kQt0fa.js",
"name": "alert-circle",
"imports": [
"node_modules/nuxt/dist/app/entry.js"
]
},
"_CUq_0rkE.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "CUq_0rkE.js",
"name": "loader-2",
"imports": [
"node_modules/nuxt/dist/app/entry.js"
]
},
"_CWEkTB1z.js": {
"resourceType": "script",
"module": true,
@@ -98,6 +120,17 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js"
]
},
"_DAACT36i.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "DAACT36i.js",
"name": "newspaper",
"imports": [
"node_modules/nuxt/dist/app/entry.js"
]
},
"_DaSgy0Cl.js": {
"resourceType": "script",
"module": true,
@@ -168,19 +201,32 @@ const client_manifest = {
"file": "Harheimer TC.CKfYAfp1.svg",
"src": "assets/images/logos/Harheimer TC.svg"
},
"middleware/auth.js": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "gLPgOmla.js",
"name": "auth",
"src": "middleware/auth.js",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js"
]
},
"node_modules/nuxt/dist/app/components/error-404.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "CuqbzRJp.js",
"file": "CG6EwBRh.js",
"name": "error-404",
"src": "node_modules/nuxt/dist/app/components/error-404.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_DlAUqK2U.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
],
"css": []
},
@@ -195,13 +241,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "DvQPLLks.js",
"file": "DdaR8fUb.js",
"name": "error-500",
"src": "node_modules/nuxt/dist/app/components/error-500.vue",
"isDynamicEntry": true,
"imports": [
"_DlAUqK2U.js",
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js"
],
"css": []
@@ -217,11 +263,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "Dzvh14Kz.js",
"file": "CYBxhx9-.js",
"name": "entry",
"src": "node_modules/nuxt/dist/app/entry.js",
"isEntry": true,
"dynamicImports": [
"middleware/auth.js",
"node_modules/nuxt/dist/app/components/error-404.vue",
"node_modules/nuxt/dist/app/components/error-500.vue"
],
@@ -241,13 +288,31 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "DJ7dbBSo.js",
"file": "DjgE_sEr.js",
"name": "anlagen",
"src": "pages/anlagen.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/cms/index.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "DrcpzAie.js",
"name": "index",
"src": "pages/cms/index.vue",
"isDynamicEntry": true,
"imports": [
"_BHFrGoXk.js",
"_YJHbYJtA.js",
"_DAACT36i.js",
"_BteKZQ9T.js",
"_DkeYb0_S.js",
"node_modules/nuxt/dist/app/entry.js"
]
},
"pages/galerie.vue": {
@@ -255,13 +320,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BNyGYpIS.js",
"file": "HjuZPL1x.js",
"name": "galerie",
"src": "pages/galerie.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/geschichte.vue": {
@@ -269,12 +334,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "B-8zBTYH.js",
"file": "Bt7nK3rf.js",
"name": "geschichte",
"src": "pages/geschichte.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js"
]
},
@@ -283,13 +348,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "CH8qO4fu.js",
"file": "C_7cz6DH.js",
"name": "impressum",
"src": "pages/impressum.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_BteKZQ9T.js",
"_Czdc6-TI.js"
]
@@ -323,14 +388,32 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "CXsdaXH6.js",
"file": "WIFjVsoU.js",
"name": "kontakt",
"src": "pages/kontakt.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_C5SyyWEb.js",
"_Bhv0LDrk.js"
"_C8kQt0fa.js",
"_BHFrGoXk.js"
]
},
"pages/login.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "0HxIkpDh.js",
"name": "login",
"src": "pages/login.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_BHFrGoXk.js",
"_C8kQt0fa.js",
"_DaSgy0Cl.js",
"_CUq_0rkE.js"
]
},
"pages/mannschaften/[slug].vue": {
@@ -338,13 +421,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "B6WBbdVo.js",
"file": "DCNxe3RA.js",
"name": "_slug_",
"src": "pages/mannschaften/[slug].vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_jVj3QaoK.js"
]
},
@@ -353,13 +436,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "D3zFABjp.js",
"file": "BvMz9Jgl.js",
"name": "damen",
"src": "pages/mannschaften/damen.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/mannschaften/herren.vue": {
@@ -367,12 +450,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "OxTlf1ZK.js",
"file": "9Bmm8Ml1.js",
"name": "herren",
"src": "pages/mannschaften/herren.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js"
]
},
@@ -381,7 +464,7 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "Br56r5HY.js",
"file": "Cc_YSIsc.js",
"name": "index",
"src": "pages/mannschaften/index.vue",
"isDynamicEntry": true,
@@ -389,7 +472,7 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js",
"_jVj3QaoK.js",
"_DkeYb0_S.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/mannschaften/jugend.vue": {
@@ -397,13 +480,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "91SGRVOW.js",
"file": "B9EeawL0.js",
"name": "jugend",
"src": "pages/mannschaften/jugend.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/mannschaften/spielplaene.vue": {
@@ -411,23 +494,39 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BhSG1dHk.js",
"file": "Cu9pESPT.js",
"name": "spielplaene",
"src": "pages/mannschaften/spielplaene.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_BteKZQ9T.js",
"node_modules/nuxt/dist/app/entry.js",
"_Cx4UcKGu.js"
]
},
"pages/mitgliederbereich/index.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "BS-ozMaL.js",
"name": "index",
"src": "pages/mitgliederbereich/index.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_BHFrGoXk.js",
"_DkeYb0_S.js",
"_DAACT36i.js"
]
},
"pages/mitgliedschaft.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "DT67Eyw3.js",
"file": "DdCvOctW.js",
"name": "mitgliedschaft",
"src": "pages/mitgliedschaft.vue",
"isDynamicEntry": true,
@@ -438,7 +537,41 @@ const client_manifest = {
"_CWEkTB1z.js",
"_BteKZQ9T.js",
"_Czdc6-TI.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/passwort-vergessen.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "wEYEdgGa.js",
"name": "passwort-vergessen",
"src": "pages/passwort-vergessen.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_BHFrGoXk.js",
"_C8kQt0fa.js",
"_DaSgy0Cl.js",
"_CUq_0rkE.js"
]
},
"pages/registrieren.vue": {
"resourceType": "script",
"module": true,
"prefetch": true,
"preload": true,
"file": "CPBCerx_.js",
"name": "registrieren",
"src": "pages/registrieren.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_BHFrGoXk.js",
"_C8kQt0fa.js",
"_DaSgy0Cl.js",
"_CUq_0rkE.js"
]
},
"pages/satzung.vue": {
@@ -446,12 +579,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "C9_Ca2Kh.js",
"file": "MfuAw3Pu.js",
"name": "satzung",
"src": "pages/satzung.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_BteKZQ9T.js",
"node_modules/nuxt/dist/app/entry.js"
]
@@ -461,12 +594,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BMsfuDsV.js",
"file": "7Il07067.js",
"name": "spielsysteme",
"src": "pages/spielsysteme.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_DkeYb0_S.js",
"_YJHbYJtA.js",
"node_modules/nuxt/dist/app/entry.js",
@@ -480,12 +613,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "CxnG1kov.js",
"file": "B-j_qHre.js",
"name": "termine",
"src": "pages/termine.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_YJHbYJtA.js",
"node_modules/nuxt/dist/app/entry.js"
]
@@ -495,13 +628,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BGqINamU.js",
"file": "p9tSJNbO.js",
"name": "anfaenger",
"src": "pages/training/anfaenger.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_DaSgy0Cl.js"
]
},
@@ -510,13 +643,13 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BWBYU0do.js",
"file": "CxCUaO3C.js",
"name": "index",
"src": "pages/training/index.vue",
"isDynamicEntry": true,
"imports": [
"node_modules/nuxt/dist/app/entry.js",
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_C5SyyWEb.js"
]
},
@@ -525,12 +658,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "NR0kh36x.js",
"file": "CnDB0aJH.js",
"name": "trainer",
"src": "pages/training/trainer.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js"
]
},
@@ -539,12 +672,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "b9abQFlW.js",
"file": "CYU0Dj4j.js",
"name": "tt-regeln",
"src": "pages/tt-regeln.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js",
"_BteKZQ9T.js",
"_B4mSF5Ac.js",
@@ -558,7 +691,7 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "CemKpROJ.js",
"file": "CIqfbIjz.js",
"name": "ueber-uns",
"src": "pages/ueber-uns.vue",
"isDynamicEntry": true,
@@ -566,7 +699,7 @@ const client_manifest = {
"node_modules/nuxt/dist/app/entry.js",
"_CWEkTB1z.js",
"_B4mSF5Ac.js",
"_Bhv0LDrk.js"
"_BHFrGoXk.js"
]
},
"pages/vereinsmeisterschaften.vue": {
@@ -574,12 +707,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "BQH-LsLF.js",
"file": "BVSdBhsj.js",
"name": "vereinsmeisterschaften",
"src": "pages/vereinsmeisterschaften.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"_CrCcIvVp.js",
"node_modules/nuxt/dist/app/entry.js"
]
@@ -589,12 +722,12 @@ const client_manifest = {
"module": true,
"prefetch": true,
"preload": true,
"file": "CnKUmKR9.js",
"file": "DosETvDb.js",
"name": "vorstand",
"src": "pages/vorstand.vue",
"isDynamicEntry": true,
"imports": [
"_Bhv0LDrk.js",
"_BHFrGoXk.js",
"node_modules/nuxt/dist/app/entry.js"
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":3,"file":"entry-styles.C14gkgmD.mjs","sources":["../../../../.nuxt/dist/server/_nuxt/entry-styles.C14gkgmD.mjs"],"sourcesContent":null,"names":["style_0","style_1"],"mappings":";;;;AAEA,6BAAe;AACf,EAAEA,QAAO;AACT,EAAEC;AACF;;;;"}

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
{"version":3,"file":"entry-styles.CTgtYOBO.mjs","sources":["../../../../.nuxt/dist/server/_nuxt/entry-styles.CTgtYOBO.mjs"],"sourcesContent":null,"names":["style_0","style_1"],"mappings":";;;;AAEA,6BAAe;AACf,EAAEA,QAAO;AACT,EAAEC;AACF;;;;"}

View File

@@ -0,0 +1,148 @@
import { _ as __nuxt_component_0 } from './server.mjs';
import { ref, computed, mergeProps, withCtx, unref, createVNode, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrInterpolate, ssrRenderComponent } from 'vue/server-renderer';
import { Users, Newspaper, UserCog } from 'lucide-vue-next';
import { u as useHead } from './v3-BQ4jllfP.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
const _sfc_main = {
__name: "index",
__ssrInlineRender: true,
setup(__props) {
const user = ref(null);
const roleLabel = computed(() => {
var _a;
const labels = {
admin: "Administrator",
vorstand: "Vorstand",
mitglied: "Mitglied"
};
return labels[(_a = user.value) == null ? void 0 : _a.role] || "Mitglied";
});
const lastLoginFormatted = computed(() => {
var _a;
if (!((_a = user.value) == null ? void 0 : _a.lastLogin)) return "Erste Anmeldung";
return new Date(user.value.lastLogin).toLocaleString("de-DE");
});
useHead({
title: "Mitgliederbereich - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
var _a;
const _component_NuxtLink = __nuxt_component_0;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full py-16 bg-gray-50" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Mitgliederbereich </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="bg-white rounded-xl shadow-lg p-8 mb-8"><h2 class="text-2xl font-display font-bold text-gray-900 mb-4"> Willkommen, ${ssrInterpolate((_a = user.value) == null ? void 0 : _a.name)}! </h2><p class="text-gray-600 mb-4"> Sie sind als <span class="font-semibold text-primary-600">${ssrInterpolate(roleLabel.value)}</span> angemeldet. </p><p class="text-sm text-gray-500"> Letzter Login: ${ssrInterpolate(lastLoginFormatted.value)}</p></div><div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/mitglieder",
class: "bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="flex items-center mb-4"${_scopeId}><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"${_scopeId}>`);
_push2(ssrRenderComponent(unref(Users), {
size: 24,
class: "text-primary-600"
}, null, _parent2, _scopeId));
_push2(`</div><h3 class="text-lg font-semibold text-gray-900"${_scopeId}>Mitgliederliste</h3></div><p class="text-gray-600 text-sm"${_scopeId}> Kontaktdaten aller Vereinsmitglieder </p>`);
} else {
return [
createVNode("div", { class: "flex items-center mb-4" }, [
createVNode("div", { class: "w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4" }, [
createVNode(unref(Users), {
size: 24,
class: "text-primary-600"
})
]),
createVNode("h3", { class: "text-lg font-semibold text-gray-900" }, "Mitgliederliste")
]),
createVNode("p", { class: "text-gray-600 text-sm" }, " Kontaktdaten aller Vereinsmitglieder ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/news",
class: "bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="flex items-center mb-4"${_scopeId}><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"${_scopeId}>`);
_push2(ssrRenderComponent(unref(Newspaper), {
size: 24,
class: "text-primary-600"
}, null, _parent2, _scopeId));
_push2(`</div><h3 class="text-lg font-semibold text-gray-900"${_scopeId}>Interne News</h3></div><p class="text-gray-600 text-sm"${_scopeId}> Neuigkeiten nur f\xFCr Mitglieder </p>`);
} else {
return [
createVNode("div", { class: "flex items-center mb-4" }, [
createVNode("div", { class: "w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4" }, [
createVNode(unref(Newspaper), {
size: 24,
class: "text-primary-600"
})
]),
createVNode("h3", { class: "text-lg font-semibold text-gray-900" }, "Interne News")
]),
createVNode("p", { class: "text-gray-600 text-sm" }, " Neuigkeiten nur f\xFCr Mitglieder ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich/profil",
class: "bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="flex items-center mb-4"${_scopeId}><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4"${_scopeId}>`);
_push2(ssrRenderComponent(unref(UserCog), {
size: 24,
class: "text-primary-600"
}, null, _parent2, _scopeId));
_push2(`</div><h3 class="text-lg font-semibold text-gray-900"${_scopeId}>Mein Profil</h3></div><p class="text-gray-600 text-sm"${_scopeId}> Profil bearbeiten und Passwort \xE4ndern </p>`);
} else {
return [
createVNode("div", { class: "flex items-center mb-4" }, [
createVNode("div", { class: "w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4" }, [
createVNode(unref(UserCog), {
size: 24,
class: "text-primary-600"
})
]),
createVNode("h3", { class: "text-lg font-semibold text-gray-900" }, "Mein Profil")
]),
createVNode("p", { class: "text-gray-600 text-sm" }, " Profil bearbeiten und Passwort \xE4ndern ")
];
}
}),
_: 1
}, _parent));
_push(`</div></div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/mitgliederbereich/index.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=index-CtmAVvb3.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index-CtmAVvb3.mjs","sources":["../../../../pages/mitgliederbereich/index.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_ssrInterpolate","_push","_parent","_createVNode","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2EA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAI,CAAA;AAErB,IAAA,MAAM,SAAA,GAAY,SAAS,MAAM;;AAC/B,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,KAAA,EAAO,eAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU;AAAA,OACd;AACE,MAAA,OAAO,MAAA,CAAA,CAAO,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,IAAI,CAAA,IAAK,UAAA;AAAA,IACrC,CAAC,CAAA;AAED,IAAA,MAAM,kBAAA,GAAqB,SAAS,MAAM;;AACxC,MAAA,IAAI,EAAA,CAAC,EAAA,GAAA,IAAA,CAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAY,YAAW,OAAO,iBAAA;AACnC,MAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,MAAM,SAAS,CAAA,CAAE,eAAe,OAAO,CAAA;AAAA,IAC9D,CAAC,CAAA;AAiBD,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;;;;AA3GMA,MAAAA,KAAAA,CAAAA,CAAAA,IAAAA,EAAAA,cAAAA,CAAAC,UAAAA,CAAA,EAAA,KAAA,EAAM,6BAAA,EAA6B,EAAA,MAAA,CAAA,CAAA,CAAA,wUAAA,EASjBC,cAAAA,CAAAA,CAAA,EAAA,GAAA,IAAA,CAAA,KAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAM,IAAI,CAAA,CAAA,gGAAA,EAAA,cAAA,CAGoC,SAAA,CAAA,KAAS,CAAA,CAAA,yEAAA,EAAA,cAAA,CAGpD,kBAAA,CAAA,KAAkB,CAAA,CAAA,gEAAA,CAAA,CAAA;;QAOpC,EAAA,EAAG,+BAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAaW,CAAA,EAAAC,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;cAPG,IAAA,EAAM,EAAA;AAAA,cAAI,KAAA,EAAM;AAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA,CAAA;;;;cAF5BC,WAAAA,CAKM,KAAA,EAAA,EALD,KAAA,EAAM,0BAAwB,EAAA;AAAA,gBACjCA,WAAAA,CAEM,KAAA,EAAA,EAFD,KAAA,EAAM,6EAA2E,EAAA;AAAA,kBACpFA,WAAAA,CAA6CC,KAAAA,CAAA,KAAA,CAAA,EAAA;AAAA,oBAArC,IAAA,EAAM,EAAA;AAAA,oBAAI,KAAA,EAAM;AAAA,mBAAA;AAAA;gBAE1BD,YAAoE,IAAA,EAAA,EAAhE,KAAA,EAAM,qCAAA,IAAsC,iBAAe;AAAA,eAAA,CAAA;AAAA,cAEjEA,YAEI,GAAA,EAAA,EAFD,KAAA,EAAM,uBAAA,IAAwB,wCAEjC;AAAA,aAAA;AAAA;;;;;QAIA,EAAA,EAAG,yBAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAaW,CAAA,EAAAF,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;cAPO,IAAA,EAAM,EAAA;AAAA,cAAI,KAAA,EAAM;AAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA,CAAA;;;;cAFhCC,WAAAA,CAKM,KAAA,EAAA,EALD,KAAA,EAAM,0BAAwB,EAAA;AAAA,gBACjCA,WAAAA,CAEM,KAAA,EAAA,EAFD,KAAA,EAAM,6EAA2E,EAAA;AAAA,kBACpFA,WAAAA,CAAiDC,KAAAA,CAAA,SAAA,CAAA,EAAA;AAAA,oBAArC,IAAA,EAAM,EAAA;AAAA,oBAAI,KAAA,EAAM;AAAA,mBAAA;AAAA;gBAE9BD,YAAiE,IAAA,EAAA,EAA7D,KAAA,EAAM,qCAAA,IAAsC,cAAY;AAAA,eAAA,CAAA;AAAA,cAE9DA,YAEI,GAAA,EAAA,EAFD,KAAA,EAAM,uBAAA,IAAwB,qCAEjC;AAAA,aAAA;AAAA;;;;;QAIA,EAAA,EAAG,2BAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAaW,CAAA,EAAAF,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;cAPK,IAAA,EAAM,EAAA;AAAA,cAAI,KAAA,EAAM;AAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA,CAAA;;;;cAF9BC,WAAAA,CAKM,KAAA,EAAA,EALD,KAAA,EAAM,0BAAwB,EAAA;AAAA,gBACjCA,WAAAA,CAEM,KAAA,EAAA,EAFD,KAAA,EAAM,6EAA2E,EAAA;AAAA,kBACpFA,WAAAA,CAA+CC,KAAAA,CAAA,OAAA,CAAA,EAAA;AAAA,oBAArC,IAAA,EAAM,EAAA;AAAA,oBAAI,KAAA,EAAM;AAAA,mBAAA;AAAA;gBAE5BD,YAAgE,IAAA,EAAA,EAA5D,KAAA,EAAM,qCAAA,IAAsC,aAAW;AAAA,eAAA,CAAA;AAAA,cAE7DA,YAEI,GAAA,EAAA,EAFD,KAAA,EAAM,uBAAA,IAAwB,4CAEjC;AAAA,aAAA;AAAA;;;;;;;;;;;;;;;;;"}

View File

@@ -0,0 +1,70 @@
import { ref, mergeProps, unref, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrInterpolate, ssrRenderComponent } from 'vue/server-renderer';
import { Calendar, Newspaper, FileText, Users, Image } from 'lucide-vue-next';
import { u as useHead } from './v3-BQ4jllfP.mjs';
import './server.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
const _sfc_main = {
__name: "index",
__ssrInlineRender: true,
setup(__props) {
const user = ref(null);
useHead({
title: "CMS - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
var _a;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full py-16 bg-gray-50" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6"> Content Management System </h1><div class="w-24 h-1 bg-primary-600 mb-8"></div><div class="bg-white rounded-xl shadow-lg p-8 mb-8"><h2 class="text-2xl font-display font-bold text-gray-900 mb-4"> Willkommen im CMS, ${ssrInterpolate((_a = user.value) == null ? void 0 : _a.name)}! </h2><p class="text-gray-600"> Hier k\xF6nnen Sie Inhalte der Website verwalten. </p></div><div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6"><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex items-center mb-4"><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">`);
_push(ssrRenderComponent(unref(Calendar), {
size: 24,
class: "text-primary-600"
}, null, _parent));
_push(`</div><h3 class="text-lg font-semibold text-gray-900">Termine verwalten</h3></div><p class="text-gray-600 text-sm mb-4"> Termine hinzuf\xFCgen, bearbeiten und l\xF6schen </p><button class="text-sm text-primary-600 hover:text-primary-700 font-medium"> \xD6ffnen \u2192 </button></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex items-center mb-4"><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">`);
_push(ssrRenderComponent(unref(Newspaper), {
size: 24,
class: "text-primary-600"
}, null, _parent));
_push(`</div><h3 class="text-lg font-semibold text-gray-900">Interne News</h3></div><p class="text-gray-600 text-sm mb-4"> News f\xFCr Mitglieder erstellen und verwalten </p><button class="text-sm text-primary-600 hover:text-primary-700 font-medium"> \xD6ffnen \u2192 </button></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex items-center mb-4"><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">`);
_push(ssrRenderComponent(unref(FileText), {
size: 24,
class: "text-primary-600"
}, null, _parent));
_push(`</div><h3 class="text-lg font-semibold text-gray-900">Spielpl\xE4ne</h3></div><p class="text-gray-600 text-sm mb-4"> Spielpl\xE4ne hochladen und verwalten </p><button class="text-sm text-primary-600 hover:text-primary-700 font-medium"> \xD6ffnen \u2192 </button></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex items-center mb-4"><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">`);
_push(ssrRenderComponent(unref(Users), {
size: 24,
class: "text-primary-600"
}, null, _parent));
_push(`</div><h3 class="text-lg font-semibold text-gray-900">Mitglieder</h3></div><p class="text-gray-600 text-sm mb-4"> Mitgliederdaten verwalten </p><button class="text-sm text-primary-600 hover:text-primary-700 font-medium"> \xD6ffnen \u2192 </button></div><div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"><div class="flex items-center mb-4"><div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">`);
_push(ssrRenderComponent(unref(Image), {
size: 24,
class: "text-primary-600"
}, null, _parent));
_push(`</div><h3 class="text-lg font-semibold text-gray-900">Galerie</h3></div><p class="text-gray-600 text-sm mb-4"> Bilder hochladen und verwalten </p><button class="text-sm text-primary-600 hover:text-primary-700 font-medium"> \xD6ffnen \u2192 </button></div></div></div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/cms/index.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=index-Deu10thO.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index-Deu10thO.mjs","sources":["../../../../pages/cms/index.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_ssrInterpolate"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAsGA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAI,CAAA;AAiBrB,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;;;mBAxHMA,cAAAA,CAAAC,UAAAA,CAAA,EAAA,KAAA,EAAM,+BAA6B,EAAA,MAAA,CAAA,CAAA,0VASVC,cAAAA,CAAAA,CAAA,EAAA,GAAA,IAAA,CAAA,UAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAM,IAAI,CAAA,CAAA,oVAAA,CAAA,CAAA;;QAYjB,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;QAef,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;QAejB,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;QAenB,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;QAehB,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;;;;;;;;;;;;"}

View File

@@ -0,0 +1,102 @@
import { _ as __nuxt_component_0 } from './server.mjs';
import { ref, mergeProps, unref, withCtx, createTextVNode, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderAttr, ssrRenderClass, ssrRenderComponent, ssrInterpolate, ssrIncludeBooleanAttr } from 'vue/server-renderer';
import { AlertCircle, Check, Loader2, Lock } from 'lucide-vue-next';
import { u as useHead } from './v3-BQ4jllfP.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
const _sfc_main = {
__name: "login",
__ssrInlineRender: true,
setup(__props) {
const formData = ref({
email: "",
password: ""
});
const isLoading = ref(false);
const errorMessage = ref("");
const successMessage = ref("");
useHead({
title: "Login - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtLink = __nuxt_component_0;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50" }, _attrs))}><div class="max-w-md w-full space-y-8"><div class="text-center"><h2 class="text-3xl font-display font-bold text-gray-900"> Mitglieder-Login </h2><p class="mt-2 text-sm text-gray-600"> Melden Sie sich an, um auf den Mitgliederbereich zuzugreifen </p></div><div class="bg-white rounded-xl shadow-lg p-8"><form class="space-y-6"><div><label for="email" class="block text-sm font-medium text-gray-700 mb-2"> E-Mail-Adresse </label><input id="email"${ssrRenderAttr("value", formData.value.email)} type="email" required autocomplete="email" class="${ssrRenderClass([{ "border-red-500": errorMessage.value }, "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all"])}" placeholder="ihre-email@example.com"></div><div><label for="password" class="block text-sm font-medium text-gray-700 mb-2"> Passwort </label><input id="password"${ssrRenderAttr("value", formData.value.password)} type="password" required autocomplete="current-password" class="${ssrRenderClass([{ "border-red-500": errorMessage.value }, "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all"])}" placeholder="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"></div>`);
if (errorMessage.value) {
_push(`<div class="bg-red-50 border border-red-200 rounded-lg p-4"><p class="text-sm text-red-800 flex items-center">`);
_push(ssrRenderComponent(unref(AlertCircle), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(errorMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
if (successMessage.value) {
_push(`<div class="bg-green-50 border border-green-200 rounded-lg p-4"><p class="text-sm text-green-800 flex items-center">`);
_push(ssrRenderComponent(unref(Check), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(successMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
_push(`<button type="submit"${ssrIncludeBooleanAttr(isLoading.value) ? " disabled" : ""} class="w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center">`);
if (isLoading.value) {
_push(ssrRenderComponent(unref(Loader2), {
size: 20,
class: "mr-2 animate-spin"
}, null, _parent));
} else {
_push(`<!---->`);
}
_push(`<span>${ssrInterpolate(isLoading.value ? "Anmeldung l\xE4uft..." : "Anmelden")}</span></button><div class="text-center">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/passwort-vergessen",
class: "text-sm text-primary-600 hover:text-primary-700 font-medium"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Passwort vergessen? `);
} else {
return [
createTextVNode(" Passwort vergessen? ")
];
}
}),
_: 1
}, _parent));
_push(`</div></form></div><div class="bg-primary-50 border border-primary-100 rounded-lg p-4"><p class="text-sm text-primary-800 text-center">`);
_push(ssrRenderComponent(unref(Lock), {
size: 16,
class: "inline mr-1"
}, null, _parent));
_push(` Nur f\xFCr Vereinsmitglieder. Kein Zugang? Kontaktieren Sie den Vorstand. </p></div></div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/login.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=login-CSQ2h4vV.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"login-CSQ2h4vV.mjs","sources":["../../../../pages/login.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_ssrRenderAttr","_push","_parent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqGA,IAAA,MAAM,WAAW,GAAA,CAAI;AAAA,MACnB,KAAA,EAAO,EAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,IAAI,KAAK,CAAA;AAC3B,IAAA,MAAM,YAAA,GAAe,IAAI,EAAE,CAAA;AAC3B,IAAA,MAAM,cAAA,GAAiB,IAAI,EAAE,CAAA;AAuC7B,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;;;AApJMA,MAAAA,KAAAA,CAAAA,CAAAA,IAAAA,EAAAA,eAAAC,UAAAA,CAAA,EAAA,OAAM,mFAAA,EAAmF,EAAA,MAAA,CAAA,CAAA,gcAoBzEC,aAAAA,CAAA,OAAA,EAAA,SAAA,KAAA,CAAS,KAAK,CAAA,CAAA,mDAAA,EAAA,cAAA,CAAA,CAAA,EAAA,gBAAA,EAKK,YAAA,CAAA,OAAY,EAAA,gIAAA,CAAA,CAAA,CAAA,mKAAA,EAY/BA,cAAA,OAAA,EAAA,QAAA,CAAA,MAAS,QAAQ,CAAA,oEAAA,cAAA,CAAA,CAAA,EAAA,gBAAA,EAKE,YAAA,CAAA,OAAY,EAAA,gIAAA,CAAA,CAAA,CAAA,uEAAA,CAAA,CAAA;AAMjC,MAAA,IAAA,aAAA,KAAA,EAAY;;;UAEL,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCAC3B,YAAA,CAAA,KAAY,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAKR,MAAA,IAAA,eAAA,KAAA,EAAc;;;UAEb,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCACrB,cAAA,CAAA,KAAc,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAOR,MAAA,KAAA,CAAA,wBAAA,qBAAA,CAAA,SAAA,CAAA,KAAS,CAAA,GAAA,WAAA,GAAA,EAAA,CAAA,0KAAA,CAAA,CAAA;AAGL,MAAA,IAAA,UAAA,KAAA,EAAS;;UAAG,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA;;;AAClC,MAAA,KAAA,CAAA,SAAA,cAAA,CAAA,SAAA,CAAA,QAAS,uBAAA,GAAA,UAAA,CAAA,CAAA,yCAAA,CAAA,CAAA;;QAMhB,EAAA,EAAG,qBAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAKW,CAAA,EAAAC,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;;8BAFV,uBAED;AAAA,aAAA;AAAA;;;;;;QAQK,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;;;;;;;;;;;;"}

View File

@@ -0,0 +1,94 @@
import { _ as __nuxt_component_0 } from './server.mjs';
import { ref, mergeProps, unref, withCtx, createTextVNode, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderAttr, ssrRenderClass, ssrRenderComponent, ssrInterpolate, ssrIncludeBooleanAttr } from 'vue/server-renderer';
import { AlertCircle, Check, Loader2 } from 'lucide-vue-next';
import { u as useHead } from './v3-BQ4jllfP.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
const _sfc_main = {
__name: "passwort-vergessen",
__ssrInlineRender: true,
setup(__props) {
const email = ref("");
const isLoading = ref(false);
const errorMessage = ref("");
const successMessage = ref("");
useHead({
title: "Passwort vergessen - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtLink = __nuxt_component_0;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50" }, _attrs))}><div class="max-w-md w-full space-y-8"><div class="text-center"><h2 class="text-3xl font-display font-bold text-gray-900"> Passwort zur\xFCcksetzen </h2><p class="mt-2 text-sm text-gray-600"> Geben Sie Ihre E-Mail-Adresse ein, um Ihr Passwort zur\xFCckzusetzen </p></div><div class="bg-white rounded-xl shadow-lg p-8"><form class="space-y-6"><div><label for="email" class="block text-sm font-medium text-gray-700 mb-2"> E-Mail-Adresse </label><input id="email"${ssrRenderAttr("value", email.value)} type="email" required autocomplete="email" class="${ssrRenderClass([{ "border-red-500": errorMessage.value }, "w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all"])}" placeholder="ihre-email@example.com"></div>`);
if (errorMessage.value) {
_push(`<div class="bg-red-50 border border-red-200 rounded-lg p-4"><p class="text-sm text-red-800 flex items-center">`);
_push(ssrRenderComponent(unref(AlertCircle), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(errorMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
if (successMessage.value) {
_push(`<div class="bg-green-50 border border-green-200 rounded-lg p-4"><p class="text-sm text-green-800 flex items-center">`);
_push(ssrRenderComponent(unref(Check), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(successMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
_push(`<button type="submit"${ssrIncludeBooleanAttr(isLoading.value) ? " disabled" : ""} class="w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center">`);
if (isLoading.value) {
_push(ssrRenderComponent(unref(Loader2), {
size: 20,
class: "mr-2 animate-spin"
}, null, _parent));
} else {
_push(`<!---->`);
}
_push(`<span>${ssrInterpolate(isLoading.value ? "Wird gesendet..." : "Passwort zur\xFCcksetzen")}</span></button><div class="text-center">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/login",
class: "text-sm text-primary-600 hover:text-primary-700 font-medium"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Zur\xFCck zum Login `);
} else {
return [
createTextVNode(" Zur\xFCck zum Login ")
];
}
}),
_: 1
}, _parent));
_push(`</div></form></div><div class="bg-primary-50 border border-primary-100 rounded-lg p-4"><p class="text-sm text-primary-800 text-center"> Sie erhalten eine E-Mail mit einem Link zum Zur\xFCcksetzen Ihres Passworts. </p></div></div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/passwort-vergessen.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=passwort-vergessen-CU7x98cF.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"passwort-vergessen-CU7x98cF.mjs","sources":["../../../../pages/passwort-vergessen.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_push","_parent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,IAAA,MAAM,KAAA,GAAQ,IAAI,EAAE,CAAA;AACpB,IAAA,MAAM,SAAA,GAAY,IAAI,KAAK,CAAA;AAC3B,IAAA,MAAM,YAAA,GAAe,IAAI,EAAE,CAAA;AAC3B,IAAA,MAAM,cAAA,GAAiB,IAAI,EAAE,CAAA;AAwB7B,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;;;AA/GMA,MAAAA,KAAAA,CAAAA,CAAAA,IAAAA,EAAAA,cAAAA,CAAAC,UAAAA,CAAA,EAAA,KAAA,EAAM,mFAAA,EAAmF,EAAA,MAAA,CAAA,CAAA,CAAA,6cAAA,EAAA,aAAA,CAAA,OAAA,EAoBzE,KAAA,CAAA,KAAK,CAAA,CAAA,mDAAA,EAAA,cAAA,CAAA,CAAA,EAAA,gBAAA,EAKc,YAAA,CAAA,KAAA,EAAY,EAAA,gIAAA,CAAA,CAAA,CAAA,6CAAA,CAAA,CAAA;AAMjC,MAAA,IAAA,aAAA,KAAA,EAAY;;;UAEL,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCAC3B,YAAA,CAAA,KAAY,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAKR,MAAA,IAAA,eAAA,KAAA,EAAc;;;UAEb,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCACrB,cAAA,CAAA,KAAc,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAOR,MAAA,KAAA,CAAA,wBAAA,qBAAA,CAAA,SAAA,CAAA,KAAS,CAAA,GAAA,WAAA,GAAA,EAAA,CAAA,0KAAA,CAAA,CAAA;AAGL,MAAA,IAAA,UAAA,KAAA,EAAS;;UAAG,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA;;;AAClC,MAAA,KAAA,CAAA,SAAA,cAAA,CAAA,SAAA,CAAA,QAAS,kBAAA,GAAA,0BAAA,CAAA,CAAA,yCAAA,CAAA,CAAA;;QAMhB,EAAA,EAAG,QAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAKW,CAAA,EAAAC,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;;8BAFV,uBAED;AAAA,aAAA;AAAA;;;;;;;;;;;;;;;;;"}

View File

@@ -0,0 +1,105 @@
import { _ as __nuxt_component_0 } from './server.mjs';
import { ref, mergeProps, unref, withCtx, createTextVNode, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderAttr, ssrRenderComponent, ssrInterpolate, ssrIncludeBooleanAttr } from 'vue/server-renderer';
import { AlertCircle, Check, Loader2, Info } from 'lucide-vue-next';
import { u as useHead } from './v3-BQ4jllfP.mjs';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/utils';
import 'unhead/plugins';
import 'vue-router';
const _sfc_main = {
__name: "registrieren",
__ssrInlineRender: true,
setup(__props) {
const formData = ref({
name: "",
email: "",
phone: "",
password: "",
confirmPassword: ""
});
const isLoading = ref(false);
const errorMessage = ref("");
const successMessage = ref("");
useHead({
title: "Registrierung - Harheimer TC"
});
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtLink = __nuxt_component_0;
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full flex items-center justify-center py-16 px-4 sm:px-6 lg:px-8 bg-gray-50" }, _attrs))}><div class="max-w-md w-full space-y-8"><div class="text-center"><h2 class="text-3xl font-display font-bold text-gray-900"> Registrierung </h2><p class="mt-2 text-sm text-gray-600"> Beantragen Sie Zugang zum Mitgliederbereich </p></div><div class="bg-white rounded-xl shadow-lg p-8"><form class="space-y-6"><div><label for="name" class="block text-sm font-medium text-gray-700 mb-2"> Vollst\xE4ndiger Name </label><input id="name"${ssrRenderAttr("value", formData.value.name)} type="text" required autocomplete="name" class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all" placeholder="Max Mustermann"></div><div><label for="email" class="block text-sm font-medium text-gray-700 mb-2"> E-Mail-Adresse </label><input id="email"${ssrRenderAttr("value", formData.value.email)} type="email" required autocomplete="email" class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all" placeholder="ihre-email@example.com"></div><div><label for="phone" class="block text-sm font-medium text-gray-700 mb-2"> Telefonnummer (optional) </label><input id="phone"${ssrRenderAttr("value", formData.value.phone)} type="tel" autocomplete="tel" class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all" placeholder="069-12345678"></div><div><label for="password" class="block text-sm font-medium text-gray-700 mb-2"> Passwort </label><input id="password"${ssrRenderAttr("value", formData.value.password)} type="password" required autocomplete="new-password" class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all" placeholder="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"><p class="mt-1 text-xs text-gray-500"> Mindestens 8 Zeichen </p></div><div><label for="confirmPassword" class="block text-sm font-medium text-gray-700 mb-2"> Passwort best\xE4tigen </label><input id="confirmPassword"${ssrRenderAttr("value", formData.value.confirmPassword)} type="password" required autocomplete="new-password" class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-600 focus:border-transparent transition-all" placeholder="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"></div>`);
if (errorMessage.value) {
_push(`<div class="bg-red-50 border border-red-200 rounded-lg p-4"><p class="text-sm text-red-800 flex items-center">`);
_push(ssrRenderComponent(unref(AlertCircle), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(errorMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
if (successMessage.value) {
_push(`<div class="bg-green-50 border border-green-200 rounded-lg p-4"><p class="text-sm text-green-800 flex items-center">`);
_push(ssrRenderComponent(unref(Check), {
size: 18,
class: "mr-2"
}, null, _parent));
_push(` ${ssrInterpolate(successMessage.value)}</p></div>`);
} else {
_push(`<!---->`);
}
_push(`<button type="submit"${ssrIncludeBooleanAttr(isLoading.value) ? " disabled" : ""} class="w-full px-6 py-3 bg-primary-600 hover:bg-primary-700 disabled:bg-gray-400 text-white font-semibold rounded-lg transition-colors flex items-center justify-center">`);
if (isLoading.value) {
_push(ssrRenderComponent(unref(Loader2), {
size: 20,
class: "mr-2 animate-spin"
}, null, _parent));
} else {
_push(`<!---->`);
}
_push(`<span>${ssrInterpolate(isLoading.value ? "Wird gesendet..." : "Registrierung beantragen")}</span></button><div class="text-center">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/login",
class: "text-sm text-primary-600 hover:text-primary-700 font-medium"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Bereits registriert? Zum Login `);
} else {
return [
createTextVNode(" Bereits registriert? Zum Login ")
];
}
}),
_: 1
}, _parent));
_push(`</div></form></div><div class="bg-yellow-50 border border-yellow-200 rounded-lg p-4"><p class="text-sm text-yellow-800">`);
_push(ssrRenderComponent(unref(Info), {
size: 16,
class: "inline mr-1"
}, null, _parent));
_push(`<strong>Hinweis:</strong> Ihre Registrierung muss vom Vorstand freigegeben werden. Sie erhalten eine E-Mail, sobald Ihr Zugang aktiviert wurde. </p></div></div></div>`);
};
}
};
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/registrieren.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
export { _sfc_main as default };
//# sourceMappingURL=registrieren-CelrCDCD.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"registrieren-CelrCDCD.mjs","sources":["../../../../pages/registrieren.vue"],"sourcesContent":null,"names":["_ssrRenderAttrs","_mergeProps","_ssrRenderAttr","_push","_parent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAsJA,IAAA,MAAM,WAAW,GAAA,CAAI;AAAA,MACnB,IAAA,EAAM,EAAA;AAAA,MACN,KAAA,EAAO,EAAA;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,QAAA,EAAU,EAAA;AAAA,MACV,eAAA,EAAiB;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,IAAI,KAAK,CAAA;AAC3B,IAAA,MAAM,YAAA,GAAe,IAAI,EAAE,CAAA;AAC3B,IAAA,MAAM,cAAA,GAAiB,IAAI,EAAE,CAAA;AAsD7B,IAAA,OAAA,CAAQ;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;;;AAvNMA,MAAAA,KAAAA,CAAAA,CAAAA,IAAAA,EAAAA,eAAAC,UAAAA,CAAA,EAAA,OAAM,mFAAA,EAAmF,EAAA,MAAA,CAAA,CAAA,ibAoBzEC,aAAAA,CAAA,OAAA,EAAA,SAAA,KAAA,CAAS,IAAI,CAAA,CAAA,0UAAA,EAgBbA,aAAAA,CAAA,SAAA,QAAA,CAAA,KAAA,CAAS,KAAK,CAAA,CAAA,8VAAA,EAgBdA,cAAA,OAAA,EAAA,QAAA,CAAA,MAAS,KAAK,iUAedA,aAAAA,CAAA,OAAA,EAAA,SAAA,KAAA,CAAS,QAAQ,CAAA,CAAA,odAAA,EAmBjBA,aAAAA,CAAA,SAAA,QAAA,CAAA,KAAA,CAAS,eAAe,CAAA,CAAA,kQAAA,CAAA,CAAA;AAU1B,MAAA,IAAA,aAAA,KAAA,EAAY;;;UAEL,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCAC3B,YAAA,CAAA,KAAY,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAKR,MAAA,IAAA,eAAA,KAAA,EAAc;;;UAEb,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;iCACrB,cAAA,CAAA,KAAc,CAAA,CAAA,UAAA,CAAA,CAAA;AAAA,MAAA,CAAA,MAAA;;;AAOR,MAAA,KAAA,CAAA,wBAAA,qBAAA,CAAA,SAAA,CAAA,KAAS,CAAA,GAAA,WAAA,GAAA,EAAA,CAAA,0KAAA,CAAA,CAAA;AAGL,MAAA,IAAA,UAAA,KAAA,EAAS;;UAAG,IAAA,EAAM,EAAA;AAAA,UAAI,KAAA,EAAM;AAAA,SAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA;;;AAClC,MAAA,KAAA,CAAA,SAAA,cAAA,CAAA,SAAA,CAAA,QAAS,kBAAA,GAAA,0BAAA,CAAA,CAAA,yCAAA,CAAA,CAAA;;QAMhB,EAAA,EAAG,QAAA;AAAA,QACH,KAAA,EAAM;AAAA,OAAA,EAAA;AAAA,yBAFR,CAKW,CAAA,EAAAC,MAAAA,EAAAC,UAAA,QAAA,KAAA;;;;;8BAFV,kCAED;AAAA,aAAA;AAAA;;;;;;QAQK,IAAA,EAAM,EAAA;AAAA,QAAI,KAAA,EAAM;AAAA,OAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;;;;;;;;;;;;"}

View File

@@ -1,9 +1,9 @@
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { defineComponent, shallowRef, h, resolveComponent, hasInjectionContext, getCurrentInstance, inject, computed, ref, Suspense, Fragment, createApp, provide, shallowReactive, toRef, onErrorCaptured, onServerPrefetch, unref, createVNode, resolveDynamicComponent, reactive, effectScope, isReadonly, isRef, isShallow, isReactive, toRaw, defineAsyncComponent, mergeProps, getCurrentScope, withCtx, createTextVNode, toDisplayString, useSSRContext } from 'vue';
import { p as parseQuery, l as hasProtocol, i as joinURL, m as getContext, w as withQuery, n as withTrailingSlash, o as withoutTrailingSlash, q as isScriptProtocol, s as sanitizeStatusCode, $ as $fetch, t as createHooks, v as executeAsync, c as createError$1, x as toRouteMatcher, y as createRouter$1, z as defu } from '../nitro/nitro.mjs';
import { p as parseQuery, c as createError$1, n as hasProtocol, o as isScriptProtocol, l as joinURL, w as withQuery, q as sanitizeStatusCode, t as getContext, v as withTrailingSlash, x as withoutTrailingSlash, $ as $fetch, y as createHooks, z as executeAsync, A as toRouteMatcher, B as createRouter$1, C as defu } from '../nitro/nitro.mjs';
import { b as baseURL } from '../routes/renderer.mjs';
import { RouterView, createMemoryHistory, createRouter, START_LOCATION, useRoute as useRoute$1 } from 'vue-router';
import { ssrRenderSuspense, ssrRenderComponent, ssrRenderVNode, ssrRenderAttrs, ssrRenderAttr, ssrRenderStyle, ssrRenderClass, ssrRenderList, ssrInterpolate } from 'vue/server-renderer';
import { X, Menu, ChevronDown } from 'lucide-vue-next';
import { X, Menu, ChevronDown, User, ChevronUp } from 'lucide-vue-next';
import 'node:http';
import 'node:https';
import 'node:events';
@@ -27,6 +27,8 @@ if (!("global" in globalThis)) {
globalThis.global = globalThis;
}
const nuxtLinkDefaults = { "componentName": "NuxtLink" };
const asyncDataDefaults = { "value": null, "errorValue": null, "deep": true };
const fetchDefaults = {};
const appId = "nuxt-app";
function getNuxtAppCtx(id = appId) {
return getContext(id, {
@@ -383,12 +385,21 @@ async function getRouteRules(arg) {
return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
}
}
const __nuxt_page_meta = {
layout: "default"
};
const _routes = [
{
name: "index",
path: "/",
component: () => import('./index-DLu_rC7p.mjs')
},
{
name: "login",
path: "/login",
meta: __nuxt_page_meta || {},
component: () => import('./login-CSQ2h4vV.mjs')
},
{
name: "anlagen",
path: "/anlagen",
@@ -419,6 +430,12 @@ const _routes = [
path: "/vorstand",
component: () => import('./vorstand-ul_2Xlsj.mjs')
},
{
name: "cms",
path: "/cms",
meta: { "middleware": "auth" },
component: () => import('./index-Deu10thO.mjs')
},
{
name: "impressum",
path: "/impressum",
@@ -439,6 +456,11 @@ const _routes = [
path: "/geschichte",
component: () => import('./geschichte-Buv1aL5j.mjs')
},
{
name: "registrieren",
path: "/registrieren",
component: () => import('./registrieren-CelrCDCD.mjs')
},
{
name: "spielsysteme",
path: "/spielsysteme",
@@ -469,6 +491,11 @@ const _routes = [
path: "/mannschaften",
component: () => import('./index-BLCJ44Pz.mjs')
},
{
name: "passwort-vergessen",
path: "/passwort-vergessen",
component: () => import('./passwort-vergessen-CU7x98cF.mjs')
},
{
name: "training-anfaenger",
path: "/training/anfaenger",
@@ -494,6 +521,12 @@ const _routes = [
path: "/vereinsmeisterschaften",
component: () => import('./vereinsmeisterschaften-COrSkCMk.mjs')
},
{
name: "mitgliederbereich",
path: "/mitgliederbereich",
meta: { "middleware": "auth" },
component: () => import('./index-CtmAVvb3.mjs')
},
{
name: "mannschaften-spielplaene",
path: "/mannschaften/spielplaene",
@@ -614,7 +647,9 @@ const globalMiddleware = [
validate,
manifest_45route_45rule
];
const namedMiddleware = {};
const namedMiddleware = {
auth: () => import('./auth-D7NaNMED.mjs')
};
const plugin = /* @__PURE__ */ defineNuxtPlugin({
name: "nuxt:router",
enforce: "pre",
@@ -1949,9 +1984,15 @@ const _sfc_main$3 = {
__ssrInlineRender: true,
setup(__props) {
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
const isMemberMenuOpen = ref(false);
const isLoggedIn = ref(false);
const userRole = ref(null);
const isAdmin = computed(() => {
return userRole.value === "admin" || userRole.value === "vorstand";
});
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtLink = __nuxt_component_0;
_push(`<footer${ssrRenderAttrs(mergeProps({ class: "fixed bottom-0 left-0 right-0 z-40 bg-gray-900 border-t border-gray-800 shadow-2xl" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"><div class="flex flex-col sm:flex-row justify-between items-center space-y-2 sm:space-y-0"><p class="text-sm text-gray-400"> © ${ssrInterpolate(unref(currentYear))} Harheimer TC </p><div class="flex items-center space-x-6 text-sm">`);
_push(`<footer${ssrRenderAttrs(mergeProps({ class: "fixed bottom-0 left-0 right-0 z-40 bg-gray-900 border-t border-gray-800 shadow-2xl" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"><div class="flex flex-col sm:flex-row justify-between items-center space-y-2 sm:space-y-0"><p class="text-sm text-gray-400"> © ${ssrInterpolate(unref(currentYear))} Harheimer TC </p><div class="flex items-center space-x-6 text-sm relative">`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/impressum",
class: "text-gray-400 hover:text-primary-400 transition-colors"
@@ -1982,7 +2023,112 @@ const _sfc_main$3 = {
}),
_: 1
}, _parent));
_push(`</div></div></div></footer>`);
_push(`<div class="relative"><button class="flex items-center space-x-1 text-gray-400 hover:text-primary-400 transition-colors">`);
_push(ssrRenderComponent(unref(User), { size: 16 }, null, _parent));
_push(`<span>Mitglieder</span>`);
_push(ssrRenderComponent(unref(ChevronUp), {
size: 14,
class: ["transition-transform", isMemberMenuOpen.value ? "rotate-0" : "rotate-180"]
}, null, _parent));
_push(`</button>`);
if (isMemberMenuOpen.value) {
_push(`<div class="absolute bottom-full right-0 mb-2 w-48 bg-gray-800 border border-gray-700 rounded-lg shadow-xl overflow-hidden">`);
if (isLoggedIn.value) {
_push(`<!--[-->`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/mitgliederbereich",
onClick: ($event) => isMemberMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Mitgliederbereich `);
} else {
return [
createTextVNode(" Mitgliederbereich ")
];
}
}),
_: 1
}, _parent));
if (isAdmin.value) {
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/cms",
onClick: ($event) => isMemberMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` CMS `);
} else {
return [
createTextVNode(" CMS ")
];
}
}),
_: 1
}, _parent));
} else {
_push(`<!---->`);
}
_push(`<button class="w-full text-left px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"> Abmelden </button><!--]-->`);
} else {
_push(`<!--[-->`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/login",
onClick: ($event) => isMemberMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Anmelden `);
} else {
return [
createTextVNode(" Anmelden ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/registrieren",
onClick: ($event) => isMemberMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Registrieren `);
} else {
return [
createTextVNode(" Registrieren ")
];
}
}),
_: 1
}, _parent));
_push(ssrRenderComponent(_component_NuxtLink, {
to: "/passwort-vergessen",
onClick: ($event) => isMemberMenuOpen.value = false,
class: "block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` Passwort vergessen `);
} else {
return [
createTextVNode(" Passwort vergessen ")
];
}
}),
_: 1
}, _parent));
_push(`<!--]-->`);
}
_push(`</div>`);
} else {
_push(`<!---->`);
}
_push(`</div></div></div></div></footer>`);
};
}
};
@@ -2117,5 +2263,5 @@ let entry;
}
const entry$1 = (ssrContext) => entry(ssrContext);
export { __nuxt_component_0 as _, entry$1 as default, tryUseNuxtApp as t, useRoute as u };
export { __nuxt_component_0 as _, useNuxtApp as a, asyncDataDefaults as b, createError as c, defineNuxtRouteMiddleware as d, entry$1 as default, fetchDefaults as f, navigateTo as n, tryUseNuxtApp as t, useRoute as u };
//# sourceMappingURL=server.mjs.map

View File

@@ -1 +1 @@
{"version":3,"file":"server.mjs","sources":["../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Ffetch.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fglobal-polyfills.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fnuxt.config.mjs","../../../../node_modules/nuxt/dist/app/nuxt.js","../../../../node_modules/nuxt/dist/app/components/injections.js","../../../../node_modules/nuxt/dist/app/utils.js","../../../../node_modules/nuxt/dist/app/composables/router.js","../../../../node_modules/nuxt/dist/app/composables/error.js","../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js","../../../../node_modules/nuxt/dist/pages/runtime/utils.js","../../../../node_modules/nuxt/dist/app/composables/manifest.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Froutes.mjs","../../../../node_modules/nuxt/dist/app/components/utils.js","../../../../node_modules/nuxt/dist/pages/runtime/router.options.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Frouter.options.mjs","../../../../node_modules/nuxt/dist/pages/runtime/validate.js","../../../../node_modules/nuxt/dist/app/middleware/manifest-route-rule.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fmiddleware.mjs","../../../../node_modules/nuxt/dist/pages/runtime/plugins/router.js","../../../../node_modules/nuxt/dist/app/composables/payload.js","../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fcomponents.plugin.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fplugins.server.mjs","../../../../node_modules/nuxt/dist/app/components/route-provider.js","../../../../node_modules/nuxt/dist/pages/runtime/page.js","../../../../node_modules/nuxt/dist/app/components/nuxt-link.js","../../../../assets/images/logos/Harheimer TC.svg","../../../../components/Navigation.vue","../../../../components/Footer.vue","../../../../app.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-error-page.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-root.vue","../../../../node_modules/nuxt/dist/app/entry.js"],"sourcesContent":null,"names":["plugin","provide","plugins","createH3Error","createRadixRouter","__executeAsync","createRouter","entry","router_GNCWhvtYfLTYRZZ135CdFAEjxdMexN0ixiUYCAN_tpw","useRoute","_ssrRenderAttrs","_mergeProps","_push","_parent","_ssrRenderAttr","_imports_0","_createVNode","_ssrRenderClass","_unref","_ssrRenderList","_ssrInterpolate","_createTextVNode","_toDisplayString","_ssrRenderComponent","ErrorComponent","RootComponent"],"mappings":"","x_google_ignoreList":[3,4,5,6,7,8,9,10,12,13,15,16,18,19,20,23,24,25,30,31,32]}
{"version":3,"file":"server.mjs","sources":["../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Ffetch.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fglobal-polyfills.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fnuxt.config.mjs","../../../../node_modules/nuxt/dist/app/nuxt.js","../../../../node_modules/nuxt/dist/app/components/injections.js","../../../../node_modules/nuxt/dist/app/utils.js","../../../../node_modules/nuxt/dist/app/composables/router.js","../../../../node_modules/nuxt/dist/app/composables/error.js","../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js","../../../../node_modules/nuxt/dist/pages/runtime/utils.js","../../../../node_modules/nuxt/dist/app/composables/manifest.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Froutes.mjs","../../../../node_modules/nuxt/dist/app/components/utils.js","../../../../node_modules/nuxt/dist/pages/runtime/router.options.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Frouter.options.mjs","../../../../node_modules/nuxt/dist/pages/runtime/validate.js","../../../../node_modules/nuxt/dist/app/middleware/manifest-route-rule.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fmiddleware.mjs","../../../../node_modules/nuxt/dist/pages/runtime/plugins/router.js","../../../../node_modules/nuxt/dist/app/composables/payload.js","../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fcomponents.plugin.mjs","../../../../virtual:nuxt:%2Fmnt%2Fshare%2Ftorsten%2FPrograms%2Fharheimertc%2F.nuxt%2Fplugins.server.mjs","../../../../node_modules/nuxt/dist/app/components/route-provider.js","../../../../node_modules/nuxt/dist/pages/runtime/page.js","../../../../node_modules/nuxt/dist/app/components/nuxt-link.js","../../../../assets/images/logos/Harheimer TC.svg","../../../../components/Navigation.vue","../../../../components/Footer.vue","../../../../app.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-error-page.vue","../../../../node_modules/nuxt/dist/app/components/nuxt-root.vue","../../../../node_modules/nuxt/dist/app/entry.js"],"sourcesContent":null,"names":["plugin","provide","plugins","createH3Error","createRadixRouter","login1RYyYL8mxx17qR_nmdKvywxx7lKOLXMFu8pTLfvTLYwMeta","__executeAsync","createRouter","entry","router_GNCWhvtYfLTYRZZ135CdFAEjxdMexN0ixiUYCAN_tpw","useRoute","_ssrRenderAttrs","_mergeProps","_push","_parent","_ssrRenderAttr","_imports_0","_createVNode","_ssrRenderClass","_unref","_ssrRenderList","_ssrInterpolate","_createTextVNode","_toDisplayString","_ssrRenderComponent","ErrorComponent","RootComponent"],"mappings":"","x_google_ignoreList":[3,4,5,6,7,8,9,10,12,13,15,16,18,19,20,23,24,25,30,31,32]}

View File

@@ -1,12 +1,12 @@
const interopDefault = r => r.default || r || [];
const styles = {
"node_modules/nuxt/dist/app/entry.js": () => import('./entry-styles.CTgtYOBO.mjs').then(interopDefault),
"node_modules/nuxt/dist/app/entry.js": () => import('./entry-styles.C14gkgmD.mjs').then(interopDefault),
"node_modules/nuxt/dist/app/components/error-404.vue": () => import('./error-404-styles.B6OdZZsV.mjs').then(interopDefault),
"node_modules/nuxt/dist/app/components/error-500.vue": () => import('./error-500-styles.CKJvUd8J.mjs').then(interopDefault),
"components/Hero.vue": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault),
"components/Hero.vue?vue&type=style&index=0&scoped=33d25311&lang.css": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault),
"node_modules/nuxt/dist/app/components/error-404.vue?vue&type=style&index=0&scoped=06403dcb&lang.css": () => import('./error-404-styles.B6OdZZsV.mjs').then(interopDefault),
"node_modules/nuxt/dist/app/components/error-500.vue?vue&type=style&index=0&scoped=4b6f0a29&lang.css": () => import('./error-500-styles.CKJvUd8J.mjs').then(interopDefault)
"node_modules/nuxt/dist/app/components/error-500.vue?vue&type=style&index=0&scoped=4b6f0a29&lang.css": () => import('./error-500-styles.CKJvUd8J.mjs').then(interopDefault),
"components/Hero.vue": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault),
"components/Hero.vue?vue&type=style&index=0&scoped=33d25311&lang.css": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault)
};
export { styles as default };

View File

@@ -1 +1 @@
{"version":3,"file":"styles.mjs","sources":["../../../../.nuxt/dist/server/styles.mjs"],"sourcesContent":null,"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI;AAC9C,eAAe;AACf,EAAE,qCAAqC,EAAE,MAAM,OAAO,6BAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/G,EAAE,qDAAqD,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnI,EAAE,qDAAqD,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnI,EAAE,qBAAqB,EAAE,MAAM,OAAO,4BAAkC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9F,EAAE,qEAAqE,EAAE,MAAM,OAAO,4BAAkC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9I,EAAE,qGAAqG,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnL,EAAE,qGAAqG,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc;AAClL;;;;"}
{"version":3,"file":"styles.mjs","sources":["../../../../.nuxt/dist/server/styles.mjs"],"sourcesContent":null,"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI;AAC9C,eAAe;AACf,EAAE,qCAAqC,EAAE,MAAM,OAAO,6BAAmC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/G,EAAE,qDAAqD,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnI,EAAE,qDAAqD,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnI,EAAE,qGAAqG,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnL,EAAE,qGAAqG,EAAE,MAAM,OAAO,iCAAuC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACnL,EAAE,qBAAqB,EAAE,MAAM,OAAO,4BAAkC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9F,EAAE,qEAAqE,EAAE,MAAM,OAAO,4BAAkC,CAAC,CAAC,IAAI,CAAC,cAAc;AAC7I;;;;"}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.03887fc3.mjs","../../../../node_modules/ofetch/dist/node.mjs","../../../../node_modules/nitropack/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/nuxt/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/nuxt/node_modules/unstorage/dist/index.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/scule/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/nuxt/dist/core/runtime/nitro/utils/error.js","../../../../node_modules/nuxt/dist/core/runtime/nitro/handlers/error.js","../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"sourcesContent":null,"names":["getQuery","createRouter","f","h","i","l","createError","mergeHeaders","s","nodeFetch","Headers","Headers$1","AbortController$1","normalizeBaseKey","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","_inlineAppConfig","createRadixRouter","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/cookie-es/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.03887fc3.mjs","../../../../node_modules/ofetch/dist/node.mjs","../../../../node_modules/nitropack/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/nuxt/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/nuxt/node_modules/unstorage/dist/index.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/nuxt/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/ohash/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/scule/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/nuxt/dist/core/runtime/nitro/utils/error.js","../../../../node_modules/nuxt/dist/core/runtime/nitro/handlers/error.js","../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"sourcesContent":null,"names":["decode","getQuery","serialize","createRouter","f","h","c","i","l","createError","parse$1","mergeHeaders","s","nodeFetch","Headers","Headers$1","AbortController$1","normalizeBaseKey","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}

View File

@@ -0,0 +1,69 @@
import { d as defineEventHandler, r as readBody, c as createError, s as setCookie } from '../../../nitro/nitro.mjs';
import { r as readUsers, v as verifyPassword, g as generateToken, c as createSession, w as writeUsers } from '../../../_/auth.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const login_post = defineEventHandler(async (event) => {
try {
const body = await readBody(event);
const { email, password } = body;
if (!email || !password) {
throw createError({
statusCode: 400,
message: "E-Mail und Passwort sind erforderlich"
});
}
const users = await readUsers();
const user = users.find((u) => u.email.toLowerCase() === email.toLowerCase());
if (!user) {
throw createError({
statusCode: 401,
message: "Ung\xFCltige Anmeldedaten"
});
}
const isValid = await verifyPassword(password, user.password);
if (!isValid) {
throw createError({
statusCode: 401,
message: "Ung\xFCltige Anmeldedaten"
});
}
const token = generateToken(user);
await createSession(user.id, token);
user.lastLogin = (/* @__PURE__ */ new Date()).toISOString();
const updatedUsers = users.map((u) => u.id === user.id ? user : u);
await writeUsers(updatedUsers);
setCookie(event, "auth_token", token, {
httpOnly: true,
secure: true,
sameSite: "lax",
maxAge: 60 * 60 * 24 * 7
// 7 days
});
return {
success: true,
user: {
id: user.id,
email: user.email,
name: user.name,
role: user.role
}
};
} catch (error) {
console.error("Login-Fehler:", error);
throw error;
}
});
export { login_post as default };
//# sourceMappingURL=login.post.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"login.post.mjs","sources":["../../../../../../server/api/auth/login.post.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,MAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,WAAA,EAAA,KAAA,KAAA,CAAA,WAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,OAAA,GAAA,MAAA,cAAA,CAAA,QAAA,EAAA,KAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,cAAA,IAAA,CAAA;AAGA,IAAA,MAAA,aAAA,CAAA,IAAA,CAAA,EAAA,EAAA,KAAA,CAAA;AAGA,IAAA,IAAA,CAAA,SAAA,GAAA,iBAAA,IAAA,IAAA,EAAA,EAAA,WAAA,EAAA;AACA,IAAA,MAAA,YAAA,GAAA,MAAA,GAAA,CAAA,CAAA,CAAA,KAAA,EAAA,EAAA,KAAA,IAAA,CAAA,EAAA,GAAA,IAAA,GAAA,CAAA,CAAA;AACA,IAAA,MAAA,WAAA,YAAA,CAAA;AAGA,IAAA,SAAA,CAAA,KAAA,EAAA,cAAA,KAAA,EAAA;AAAA,MACA,QAAA,EAAA,IAAA;AAAA,MACA,MAAA,EAAA,IAAA;AAAA,MACA,QAAA,EAAA,KAAA;AAAA,MACA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA;AAAA;AAAA,KACA,CAAA;AAGA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,IAAA,EAAA;AAAA,QACA,IAAA,IAAA,CAAA,EAAA;AAAA,QACA,OAAA,IAAA,CAAA,KAAA;AAAA,QACA,MAAA,IAAA,CAAA,IAAA;AAAA,QACA,MAAA,IAAA,CAAA;AAAA;AACA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,iBAAA,KAAA,CAAA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -0,0 +1,37 @@
import { d as defineEventHandler, g as getCookie, a as deleteCookie, c as createError } from '../../../nitro/nitro.mjs';
import { d as deleteSession } from '../../../_/auth.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const logout_post = defineEventHandler(async (event) => {
try {
const token = getCookie(event, "auth_token");
if (token) {
await deleteSession(token);
}
deleteCookie(event, "auth_token");
return {
success: true,
message: "Erfolgreich abgemeldet"
};
} catch (error) {
console.error("Logout-Fehler:", error);
throw createError({
statusCode: 500,
message: "Abmeldung fehlgeschlagen"
});
}
});
export { logout_post as default };
//# sourceMappingURL=logout.post.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"logout.post.mjs","sources":["../../../../../../server/api/auth/logout.post.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,CAAA,KAAA,EAAA,YAAA,CAAA;AAEA,IAAA,IAAA,KAAA,EAAA;AACA,MAAA,MAAA,cAAA,KAAA,CAAA;AAAA,IACA;AAGA,IAAA,YAAA,CAAA,OAAA,YAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,kBAAA,KAAA,CAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -0,0 +1,82 @@
import { d as defineEventHandler, r as readBody, c as createError } from '../../../nitro/nitro.mjs';
import { r as readUsers, h as hashPassword, w as writeUsers } from '../../../_/auth.mjs';
import nodemailer from 'nodemailer';
import require$$1 from 'crypto';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const resetPassword_post = defineEventHandler(async (event) => {
try {
const body = await readBody(event);
const { email } = body;
if (!email) {
throw createError({
statusCode: 400,
message: "E-Mail-Adresse ist erforderlich"
});
}
const users = await readUsers();
const user = users.find((u) => u.email.toLowerCase() === email.toLowerCase());
if (!user) {
return {
success: true,
message: "Falls ein Konto mit dieser E-Mail existiert, wurde eine E-Mail gesendet."
};
}
const tempPassword = require$$1.randomBytes(8).toString("hex");
const hashedPassword = await hashPassword(tempPassword);
user.password = hashedPassword;
user.passwordResetRequired = true;
const updatedUsers = users.map((u) => u.id === user.id ? user : u);
await writeUsers(updatedUsers);
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST || "smtp.gmail.com",
port: process.env.SMTP_PORT || 587,
secure: false,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS
}
});
const mailOptions = {
from: process.env.SMTP_FROM || "noreply@harheimertc.de",
to: user.email,
subject: "Passwort zur\xFCcksetzen - Harheimer TC",
html: `
<h2>Passwort zur\xFCcksetzen</h2>
<p>Hallo ${user.name},</p>
<p>Sie haben eine Anfrage zum Zur\xFCcksetzen Ihres Passworts gestellt.</p>
<p>Ihr tempor\xE4res Passwort lautet: <strong>${tempPassword}</strong></p>
<p>Bitte melden Sie sich damit an und \xE4ndern Sie Ihr Passwort im Mitgliederbereich.</p>
<br>
<p>Falls Sie diese Anfrage nicht gestellt haben, ignorieren Sie diese E-Mail.</p>
<br>
<p>Mit sportlichen Gr\xFC\xDFen,<br>Ihr Harheimer TC</p>
`
};
await transporter.sendMail(mailOptions);
return {
success: true,
message: "Falls ein Konto mit dieser E-Mail existiert, wurde eine E-Mail gesendet."
};
} catch (error) {
console.error("Password-Reset-Fehler:", error);
return {
success: true,
message: "Falls ein Konto mit dieser E-Mail existiert, wurde eine E-Mail gesendet."
};
}
});
export { resetPassword_post as default };
//# sourceMappingURL=reset-password.post.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"reset-password.post.mjs","sources":["../../../../../../server/api/auth/reset-password.post.js"],"sourcesContent":null,"names":["crypto"],"mappings":";;;;;;;;;;;;;;;;;AAIA,2BAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,OAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,MAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,WAAA,EAAA,KAAA,KAAA,CAAA,WAAA,EAAA,CAAA;AAGA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,OAAA;AAAA,QACA,OAAA,EAAA,IAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA;AAAA,IACA;AAGA,IAAA,MAAA,eAAAA,UAAA,CAAA,WAAA,CAAA,CAAA,CAAA,CAAA,SAAA,KAAA,CAAA;AACA,IAAA,MAAA,cAAA,GAAA,MAAA,YAAA,CAAA,YAAA,CAAA;AAGA,IAAA,IAAA,CAAA,QAAA,GAAA,cAAA;AACA,IAAA,IAAA,CAAA,qBAAA,GAAA,IAAA;AACA,IAAA,MAAA,YAAA,GAAA,MAAA,GAAA,CAAA,CAAA,CAAA,KAAA,EAAA,EAAA,KAAA,IAAA,CAAA,EAAA,GAAA,IAAA,GAAA,CAAA,CAAA;AACA,IAAA,MAAA,WAAA,YAAA,CAAA;AAGA,IAAA,MAAA,WAAA,GAAA,WAAA,eAAA,CAAA;AAAA,MACA,IAAA,EAAA,OAAA,CAAA,GAAA,CAAA,SAAA,IAAA,gBAAA;AAAA,MACA,IAAA,EAAA,OAAA,CAAA,GAAA,CAAA,SAAA,IAAA,GAAA;AAAA,MACA,MAAA,EAAA,KAAA;AAAA,MACA,IAAA,EAAA;AAAA,QACA,IAAA,EAAA,QAAA,GAAA,CAAA,SAAA;AAAA,QACA,IAAA,EAAA,QAAA,GAAA,CAAA;AAAA;AACA,KACA,CAAA;AAEA,IAAA,MAAA,WAAA,GAAA;AAAA,MACA,IAAA,EAAA,OAAA,CAAA,GAAA,CAAA,SAAA,IAAA,wBAAA;AAAA,MACA,IAAA,IAAA,CAAA,KAAA;AAAA,MACA,OAAA,EAAA,yCAAA;AAAA,MACA,IAAA,EAAA;AAAA;AAAA,iBAAA,EAEA,KAAA,IAAA,CAAA;AAAA;AAAA,sDAAA,EAEA,YAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,KAOA;AAEA,IAAA,MAAA,WAAA,CAAA,SAAA,WAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,0BAAA,KAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -0,0 +1,56 @@
import { d as defineEventHandler, g as getCookie, a as deleteCookie } from '../../../nitro/nitro.mjs';
import { a as getUserFromToken } from '../../../_/auth.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'bcryptjs';
import 'jsonwebtoken';
import 'fs';
import 'path';
const status_get = defineEventHandler(async (event) => {
try {
const token = getCookie(event, "auth_token");
if (!token) {
return {
isLoggedIn: false,
user: null,
role: null
};
}
const user = await getUserFromToken(token);
if (!user) {
deleteCookie(event, "auth_token");
return {
isLoggedIn: false,
user: null,
role: null
};
}
return {
isLoggedIn: true,
user: {
id: user.id,
email: user.email,
name: user.name,
role: user.role
},
role: user.role
};
} catch (error) {
console.error("Auth-Status-Fehler:", error);
return {
isLoggedIn: false,
user: null,
role: null
};
}
});
export { status_get as default };
//# sourceMappingURL=status.get.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"status.get.mjs","sources":["../../../../../../server/api/auth/status.get.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,CAAA,KAAA,EAAA,YAAA,CAAA;AAEA,IAAA,IAAA,CAAA,KAAA,EAAA;AACA,MAAA,OAAA;AAAA,QACA,UAAA,EAAA,KAAA;AAAA,QACA,IAAA,EAAA,IAAA;AAAA,QACA,IAAA,EAAA;AAAA,OACA;AAAA,IACA;AAEA,IAAA,MAAA,IAAA,GAAA,MAAA,gBAAA,CAAA,KAAA,CAAA;AAEA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,YAAA,CAAA,OAAA,YAAA,CAAA;AACA,MAAA,OAAA;AAAA,QACA,UAAA,EAAA,KAAA;AAAA,QACA,IAAA,EAAA,IAAA;AAAA,QACA,IAAA,EAAA;AAAA,OACA;AAAA,IACA;AAEA,IAAA,OAAA;AAAA,MACA,UAAA,EAAA,IAAA;AAAA,MACA,IAAA,EAAA;AAAA,QACA,IAAA,IAAA,CAAA,EAAA;AAAA,QACA,OAAA,IAAA,CAAA,KAAA;AAAA,QACA,MAAA,IAAA,CAAA,IAAA;AAAA,QACA,MAAA,IAAA,CAAA;AAAA,OACA;AAAA,MACA,MAAA,IAAA,CAAA;AAAA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,uBAAA,KAAA,CAAA;AACA,IAAA,OAAA;AAAA,MACA,UAAA,EAAA,KAAA;AAAA,MACA,IAAA,EAAA,IAAA;AAAA,MACA,IAAA,EAAA;AAAA,KACA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}

View File

@@ -1,5 +1,5 @@
import { createRenderer, getRequestDependencies, getPreloadLinks, getPrefetchLinks } from 'vue-bundle-renderer/runtime';
import { j as joinRelativeURL, u as useRuntimeConfig, g as getResponseStatusText, a as getResponseStatus, b as defineRenderHandler, e as getQuery, c as createError, f as getRouteRules, h as relative, i as joinURL, k as useNitroApp } from '../nitro/nitro.mjs';
import { j as joinRelativeURL, u as useRuntimeConfig, b as getResponseStatusText, e as getResponseStatus, f as defineRenderHandler, h as getQuery, c as createError, i as getRouteRules, k as relative, l as joinURL, m as useNitroApp } from '../nitro/nitro.mjs';
import { renderToString } from 'vue/server-renderer';
import { createHead as createHead$1, propsToString, renderSSRHead } from 'unhead/server';
import { stringify, uneval } from 'devalue';
@@ -267,7 +267,7 @@ async function renderInlineStyles(usedModules) {
const renderSSRHeadOptions = {"omitLineBreaks":false};
const entryFileName = "Dzvh14Kz.js";
const entryFileName = "CYBxhx9-.js";
globalThis.__buildAssetsURL = buildAssetsURL;
globalThis.__publicAssetsURL = publicAssetsURL;

View File

@@ -1,6 +1,6 @@
import process from 'node:process';globalThis._importMeta_={url:import.meta.url,env:process.env};import 'node:http';
import 'node:https';
export { A as default } from './chunks/nitro/nitro.mjs';
export { E as default } from './chunks/nitro/nitro.mjs';
import 'node:events';
import 'node:buffer';
import 'node:fs';

View File

@@ -14,12 +14,29 @@
"@vue/runtime-dom": "3.5.22",
"@vue/server-renderer": "3.5.22",
"@vue/shared": "3.5.22",
"bcryptjs": "2.4.3",
"buffer-equal-constant-time": "1.0.1",
"devalue": "5.4.1",
"ecdsa-sig-formatter": "1.0.11",
"entities": "4.5.0",
"estree-walker": "2.0.2",
"hookable": "5.5.3",
"jsonwebtoken": "9.0.2",
"jwa": "1.4.2",
"jws": "3.2.2",
"lodash.includes": "4.3.0",
"lodash.isboolean": "3.0.3",
"lodash.isinteger": "4.0.4",
"lodash.isnumber": "3.0.3",
"lodash.isplainobject": "4.0.6",
"lodash.isstring": "4.0.1",
"lodash.once": "4.1.1",
"lucide-vue-next": "0.344.0",
"ms": "2.1.3",
"nodemailer": "7.0.9",
"perfect-debounce": "2.0.0",
"safe-buffer": "5.2.1",
"semver": "7.7.3",
"source-map-js": "1.2.1",
"ufo": "1.6.1",
"unhead": "2.0.19",