325 lines
17 KiB
JavaScript
325 lines
17 KiB
JavaScript
import { mergeProps, withCtx, unref, createTextVNode, createVNode, ref, computed, useSSRContext } from 'vue';
|
|
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderStyle, ssrRenderList, ssrInterpolate, ssrRenderClass } from 'vue/server-renderer';
|
|
import { _ as _export_sfc } from './_plugin-vue_export-helper-1tPrXgE0.mjs';
|
|
import { _ as __nuxt_component_0$1 } from './server.mjs';
|
|
import { ArrowRight, UserPlus, Mail, Calendar } from 'lucide-vue-next';
|
|
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 'pinia';
|
|
import 'vue-router';
|
|
|
|
const _sfc_main$5 = {};
|
|
function _sfc_ssrRender(_ctx, _push, _parent, _attrs) {
|
|
_push(`<section${ssrRenderAttrs(mergeProps({
|
|
id: "home",
|
|
class: "relative min-h-full flex items-center justify-center overflow-hidden bg-gradient-to-br from-gray-50 to-gray-100"
|
|
}, _attrs))} data-v-779d39d7><div class="absolute inset-0 z-0" data-v-779d39d7><div class="absolute top-0 right-0 w-96 h-96 bg-primary-200/30 rounded-full blur-3xl" data-v-779d39d7></div><div class="absolute bottom-0 left-0 w-96 h-96 bg-gray-300/30 rounded-full blur-3xl" data-v-779d39d7></div><div class="absolute inset-0 opacity-10" style="${ssrRenderStyle({ "background-image": "url('/images/club_about_us.png')", "background-size": "cover", "background-position": "center" })}" data-v-779d39d7></div></div><div class="relative z-20 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-8" data-v-779d39d7><div class="text-center" data-v-779d39d7><h1 class="text-5xl sm:text-6xl lg:text-7xl font-display font-bold text-gray-900 mb-6 leading-tight animate-fade-in" data-v-779d39d7> Willkommen beim<br data-v-779d39d7><span class="text-primary-600" data-v-779d39d7>Harheimer TC</span></h1><p class="text-xl sm:text-2xl text-gray-700 mb-8 max-w-3xl mx-auto animate-fade-in-delay-1" data-v-779d39d7> Tradition trifft Moderne - Ihr Tischtennisverein in Frankfurt-Harheim seit über 45 Jahren </p></div></div></section>`);
|
|
}
|
|
const _sfc_setup$5 = _sfc_main$5.setup;
|
|
_sfc_main$5.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/Hero.vue");
|
|
return _sfc_setup$5 ? _sfc_setup$5(props, ctx) : void 0;
|
|
};
|
|
const Hero = /* @__PURE__ */ Object.assign(_export_sfc(_sfc_main$5, [["ssrRender", _sfc_ssrRender], ["__scopeId", "data-v-779d39d7"]]), { __name: "Hero" });
|
|
const _sfc_main$4 = {
|
|
__name: "TermineVorschau",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
const termine = ref([]);
|
|
const naechsteTermine = computed(() => {
|
|
const heute = /* @__PURE__ */ new Date();
|
|
console.log("Heute ist:", heute.toISOString().split("T")[0]);
|
|
const kommende = termine.value.filter((t) => {
|
|
const terminDatum = new Date(t.datum);
|
|
const istKommend = terminDatum >= heute;
|
|
console.log(`Termin ${t.titel} (${t.datum}): ${istKommend ? "KOMMEND" : "VERSTRICHEN"}`);
|
|
return istKommend;
|
|
}).sort((a, b) => new Date(a.datum) - new Date(b.datum));
|
|
console.log("Kommende Termine:", kommende);
|
|
return kommende;
|
|
});
|
|
const formatDay = (dateString) => {
|
|
const date = new Date(dateString);
|
|
return date.getDate();
|
|
};
|
|
const formatMonth = (dateString) => {
|
|
const date = new Date(dateString);
|
|
const monate = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"];
|
|
return monate[date.getMonth()];
|
|
};
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
const _component_NuxtLink = __nuxt_component_0$1;
|
|
_push(`<div${ssrRenderAttrs(_attrs)}><div class="text-center mb-6"><h2 class="text-2xl font-display font-bold text-gray-900 mb-2"> Kommende Termine </h2><div class="w-16 h-0.5 bg-primary-600 mx-auto"></div></div>`);
|
|
if (naechsteTermine.value.length > 0) {
|
|
_push(`<div class="space-y-2 mb-6"><!--[-->`);
|
|
ssrRenderList(naechsteTermine.value, (termin, index) => {
|
|
_push(`<div class="bg-gray-50 rounded-lg p-3 hover:bg-gray-100 transition-colors"><div class="flex items-center justify-between"><div class="flex items-center space-x-3"><div class="w-10 h-10 bg-primary-600 rounded-lg flex flex-col items-center justify-center text-white text-xs font-bold"><span>${ssrInterpolate(formatDay(termin.datum))}</span><span>${ssrInterpolate(formatMonth(termin.datum))}</span></div><div><h3 class="font-semibold text-gray-900">${ssrInterpolate(termin.titel)}</h3><p class="text-sm text-gray-600">${ssrInterpolate(termin.beschreibung)}</p></div></div><span class="${ssrRenderClass([
|
|
"px-2 py-1 text-xs font-medium rounded-full",
|
|
termin.kategorie === "Turnier" ? "bg-yellow-100 text-yellow-800" : "bg-blue-100 text-blue-800"
|
|
])}">${ssrInterpolate(termin.kategorie)}</span></div></div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
} else {
|
|
_push(`<div class="text-center py-8 bg-gray-50 rounded-lg">`);
|
|
_push(ssrRenderComponent(unref(Calendar), {
|
|
size: 32,
|
|
class: "text-gray-400 mx-auto mb-2"
|
|
}, null, _parent));
|
|
_push(`<p class="text-gray-600 text-sm">Keine kommenden Termine</p></div>`);
|
|
}
|
|
if (naechsteTermine.value.length > 0) {
|
|
_push(`<div class="text-center">`);
|
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
|
to: "/termine",
|
|
class: "inline-flex items-center px-4 py-2 bg-primary-600 hover:bg-primary-700 text-white text-sm font-medium rounded-lg transition-colors"
|
|
}, {
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(` Alle Termine anzeigen `);
|
|
_push2(ssrRenderComponent(unref(ArrowRight), {
|
|
size: 16,
|
|
class: "ml-1"
|
|
}, null, _parent2, _scopeId));
|
|
} else {
|
|
return [
|
|
createTextVNode(" Alle Termine anzeigen "),
|
|
createVNode(unref(ArrowRight), {
|
|
size: 16,
|
|
class: "ml-1"
|
|
})
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$4 = _sfc_main$4.setup;
|
|
_sfc_main$4.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/TermineVorschau.vue");
|
|
return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
|
|
};
|
|
const _sfc_main$3 = {
|
|
__name: "HomeTermine",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
const _component_NuxtLink = __nuxt_component_0$1;
|
|
_push(`<section${ssrRenderAttrs(mergeProps({ class: "py-16 sm:py-20 bg-gray-50" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="text-center mb-12"><h2 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4"> Kommende Termine </h2><div class="w-24 h-1 bg-primary-600 mx-auto mb-6"></div></div><div class="max-w-4xl mx-auto">`);
|
|
_push(ssrRenderComponent(_sfc_main$4, null, null, _parent));
|
|
_push(`</div><div class="text-center mt-8">`);
|
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
|
to: "/termine",
|
|
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: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(` Alle Termine anzeigen `);
|
|
_push2(ssrRenderComponent(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
}, null, _parent2, _scopeId));
|
|
} else {
|
|
return [
|
|
createTextVNode(" Alle Termine anzeigen "),
|
|
createVNode(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
})
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(`</div></div></section>`);
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$3 = _sfc_main$3.setup;
|
|
_sfc_main$3.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/HomeTermine.vue");
|
|
return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
|
|
};
|
|
const _sfc_main$2 = {
|
|
__name: "PublicNews",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
const news = ref([]);
|
|
const formatDate = (dateString) => {
|
|
if (!dateString) return "";
|
|
const date = new Date(dateString);
|
|
return date.toLocaleDateString("de-DE", {
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric"
|
|
});
|
|
};
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
if (news.value.length > 0) {
|
|
_push(`<section${ssrRenderAttrs(mergeProps({ class: "py-16 sm:py-20 bg-white" }, _attrs))} data-v-f894f108><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8" data-v-f894f108><div class="text-center mb-16" data-v-f894f108><h2 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-4" data-v-f894f108> Aktuelles </h2><div class="w-24 h-1 bg-primary-600 mx-auto mb-6" data-v-f894f108></div><p class="text-xl text-gray-600 max-w-3xl mx-auto" data-v-f894f108> Die neuesten Nachrichten aus unserem Verein </p></div><div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8" data-v-f894f108><!--[-->`);
|
|
ssrRenderList(news.value, (item) => {
|
|
_push(`<article class="bg-gray-50 rounded-xl p-6 border border-gray-200 hover:shadow-lg transition-shadow" data-v-f894f108><div class="flex items-center text-sm text-gray-500 mb-3" data-v-f894f108>`);
|
|
_push(ssrRenderComponent(unref(Calendar), {
|
|
size: 16,
|
|
class: "mr-2"
|
|
}, null, _parent));
|
|
_push(` ${ssrInterpolate(formatDate(item.created))}</div><h3 class="text-xl font-display font-bold text-gray-900 mb-3" data-v-f894f108>${ssrInterpolate(item.title)}</h3><p class="text-gray-700 line-clamp-3" data-v-f894f108>${ssrInterpolate(item.content)}</p></article>`);
|
|
});
|
|
_push(`<!--]--></div></div></section>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$2 = _sfc_main$2.setup;
|
|
_sfc_main$2.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/PublicNews.vue");
|
|
return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
|
|
};
|
|
const PublicNews = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-f894f108"]]);
|
|
const _sfc_main$1 = {
|
|
__name: "HomeActions",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
const _component_NuxtLink = __nuxt_component_0$1;
|
|
_push(`<section${ssrRenderAttrs(mergeProps({ class: "py-16 sm:py-20 bg-gradient-to-b from-white to-gray-50" }, _attrs))}><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="grid md:grid-cols-2 gap-8 max-w-4xl mx-auto">`);
|
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
|
to: "/mitgliedschaft",
|
|
class: "group bg-white rounded-2xl p-8 shadow-lg hover:shadow-xl transition-all border-2 border-transparent hover:border-primary-600"
|
|
}, {
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(`<div class="flex items-center mb-4"${_scopeId}><div class="w-16 h-16 bg-primary-100 rounded-xl flex items-center justify-center group-hover:bg-primary-600 transition-colors"${_scopeId}>`);
|
|
_push2(ssrRenderComponent(unref(UserPlus), {
|
|
size: 32,
|
|
class: "text-primary-600 group-hover:text-white transition-colors"
|
|
}, null, _parent2, _scopeId));
|
|
_push2(`</div><h3 class="ml-4 text-2xl font-display font-bold text-gray-900"${_scopeId}> Mitglied werden </h3></div><p class="text-gray-600 mb-4"${_scopeId}> Werden Sie Teil unserer Tischtennisfamilie und profitieren Sie von regelmäßigem Training, Wettkämpfen und einer tollen Gemeinschaft. </p><div class="flex items-center text-primary-600 font-semibold group-hover:translate-x-2 transition-transform"${_scopeId}> Mehr erfahren `);
|
|
_push2(ssrRenderComponent(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
}, null, _parent2, _scopeId));
|
|
_push2(`</div>`);
|
|
} else {
|
|
return [
|
|
createVNode("div", { class: "flex items-center mb-4" }, [
|
|
createVNode("div", { class: "w-16 h-16 bg-primary-100 rounded-xl flex items-center justify-center group-hover:bg-primary-600 transition-colors" }, [
|
|
createVNode(unref(UserPlus), {
|
|
size: 32,
|
|
class: "text-primary-600 group-hover:text-white transition-colors"
|
|
})
|
|
]),
|
|
createVNode("h3", { class: "ml-4 text-2xl font-display font-bold text-gray-900" }, " Mitglied werden ")
|
|
]),
|
|
createVNode("p", { class: "text-gray-600 mb-4" }, " Werden Sie Teil unserer Tischtennisfamilie und profitieren Sie von regelmäßigem Training, Wettkämpfen und einer tollen Gemeinschaft. "),
|
|
createVNode("div", { class: "flex items-center text-primary-600 font-semibold group-hover:translate-x-2 transition-transform" }, [
|
|
createTextVNode(" Mehr erfahren "),
|
|
createVNode(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
})
|
|
])
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(ssrRenderComponent(_component_NuxtLink, {
|
|
to: "/kontakt",
|
|
class: "group bg-white rounded-2xl p-8 shadow-lg hover:shadow-xl transition-all border-2 border-transparent hover:border-primary-600"
|
|
}, {
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(`<div class="flex items-center mb-4"${_scopeId}><div class="w-16 h-16 bg-primary-100 rounded-xl flex items-center justify-center group-hover:bg-primary-600 transition-colors"${_scopeId}>`);
|
|
_push2(ssrRenderComponent(unref(Mail), {
|
|
size: 32,
|
|
class: "text-primary-600 group-hover:text-white transition-colors"
|
|
}, null, _parent2, _scopeId));
|
|
_push2(`</div><h3 class="ml-4 text-2xl font-display font-bold text-gray-900"${_scopeId}> Kontakt aufnehmen </h3></div><p class="text-gray-600 mb-4"${_scopeId}> Haben Sie Fragen oder möchten ein kostenloses Probetraining vereinbaren? Wir freuen uns auf Ihre Nachricht! </p><div class="flex items-center text-primary-600 font-semibold group-hover:translate-x-2 transition-transform"${_scopeId}> Jetzt kontaktieren `);
|
|
_push2(ssrRenderComponent(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
}, null, _parent2, _scopeId));
|
|
_push2(`</div>`);
|
|
} else {
|
|
return [
|
|
createVNode("div", { class: "flex items-center mb-4" }, [
|
|
createVNode("div", { class: "w-16 h-16 bg-primary-100 rounded-xl flex items-center justify-center group-hover:bg-primary-600 transition-colors" }, [
|
|
createVNode(unref(Mail), {
|
|
size: 32,
|
|
class: "text-primary-600 group-hover:text-white transition-colors"
|
|
})
|
|
]),
|
|
createVNode("h3", { class: "ml-4 text-2xl font-display font-bold text-gray-900" }, " Kontakt aufnehmen ")
|
|
]),
|
|
createVNode("p", { class: "text-gray-600 mb-4" }, " Haben Sie Fragen oder möchten ein kostenloses Probetraining vereinbaren? Wir freuen uns auf Ihre Nachricht! "),
|
|
createVNode("div", { class: "flex items-center text-primary-600 font-semibold group-hover:translate-x-2 transition-transform" }, [
|
|
createTextVNode(" Jetzt kontaktieren "),
|
|
createVNode(unref(ArrowRight), {
|
|
size: 20,
|
|
class: "ml-2"
|
|
})
|
|
])
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(`</div></div></section>`);
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$1 = _sfc_main$1.setup;
|
|
_sfc_main$1.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/HomeActions.vue");
|
|
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
|
};
|
|
const _sfc_main = {
|
|
__name: "index",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
_push(`<div${ssrRenderAttrs(mergeProps({ class: "min-h-full" }, _attrs))}>`);
|
|
_push(ssrRenderComponent(Hero, null, null, _parent));
|
|
_push(ssrRenderComponent(_sfc_main$3, null, null, _parent));
|
|
_push(ssrRenderComponent(PublicNews, null, null, _parent));
|
|
_push(ssrRenderComponent(_sfc_main$1, null, null, _parent));
|
|
_push(`</div>`);
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup = _sfc_main.setup;
|
|
_sfc_main.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/index.vue");
|
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
|
};
|
|
|
|
export { _sfc_main as default };
|
|
//# sourceMappingURL=index-DkhqlVRY.mjs.map
|