feat(ui): finalize E-TIB modernization with footer redesign, video optimization, and TS fixes

Former-commit-id: 67ac02c8404cc66893fdf97308574701cca6000c
This commit is contained in:
2026-05-07 10:43:20 +02:00
parent f2fdea96ec
commit 5439df72ea
3712 changed files with 932332 additions and 1867 deletions

155
.next/types/routes.d.ts vendored Normal file
View File

@@ -0,0 +1,155 @@
// This file is generated automatically by Next.js
// Do not edit this file manually
type AppRoutes = "/[locale]" | "/[locale]/[slug]" | "/[locale]/blog" | "/[locale]/blog/[slug]" | "/[locale]/contact" | "/[locale]/team" | "/[locale]/test" | "/test"
type AppRouteHandlerRoutes = "/api/feedback" | "/api/save-session" | "/api/whoami" | "/health" | "/stats/api/send"
type PageRoutes = never
type LayoutRoutes = "/[locale]"
type RedirectRoutes = "/blog" | "/contact" | "/de/produkte/stromkabel/niederspannungskabel/naycwy-2" | "/de/produkte/stromkabel/niederspannungskabel/ny2y-2" | "/de/produkte/stromkabel/solarkabel/h1z2z2-k" | "/posts/100-renewable-energy-only-with-the-right-cable-infrastructure.html" | "/posts/billion-euro-package-for-infrastructure-the-cable-boom-is-coming.html" | "/posts/cable-abbreviations-decoded-the-key-to-choosing-the-right-cable.html" | "/posts/cable-drum-quality-the-foundation-of-cable-reliability.html" | "/posts/cable-drum-safety-ensuring-smooth-operations-and-accident-free-environments.html" | "/posts/climate-neutral-by-2050-what-we-need-to-do-to-achieve-this-goal.html" | "/posts/cost-comparison-copper-vs-aluminum-cables-in-wind-farms-which-is-worthwhile-in-the-long-term.html" | "/posts/etib-in-the-directory-of-wind-energy-2025.html" | "/posts/expanding-the-grid-by-2025-building-the-foundation-for-a-successful-energy-transition.html" | "/posts/eye-opening-realities-of-green-energy-transformation.html" | "/posts/focus-on-wind-farm-construction-three-typical-cable-challenges.html" | "/posts/from-smart-to-sustainable-this-is-what-the-energy-industry-will-look-like-in-the-near-future.html" | "/posts/green-energy-starts-underground-and-with-a-plan.html" | "/posts/how-the-cable-industry-is-driving-sustainability-and-renewable-energies-forward.html" | "/posts/how-the-right-cables-quietly-power-the-green-energy-revolution.html" | "/posts/how-to-choose-the-right-cable-for-your-next-project.html" | "/posts/is-wind-energy-really-enough-a-deeper-dive-behind-the-headlines.html" | "/posts/na2xsf2y-three-conductor-medium-voltage-cable-available.html" | "/posts/recycling-of-cable-drums-sustainability-in-wind-power-projects.html" | "/posts/securing-the-future-with-h1z2z2-k-our-solar-cable-for-intersolar-2025.html" | "/posts/the-art-of-cable-logistics-moving-the-backbone-of-modern-energy-networks.html" | "/posts/the-best-underground-cables-for-wind-power-and-solar-order-from-us-now.html" | "/posts/the-perfect-cable-inquiry-how-to-save-yourself-unnecessary-queries.html" | "/posts/this-what-you-need-to-know-about-renewable-energies-in-2025.html" | "/posts/welcome-to-the-future-of-etib-our-new-website-is-live.html" | "/posts/what-makes-a-first-class-cable-find-out-here.html" | "/posts/which-cables-for-wind-power-differences-from-low-to-extra-high-voltage-explained-2.html" | "/posts/why-the-n2xsf2y-is-the-ideal-cable-for-your-energy-project.html" | "/posts/why-wind-farm-grid-connection-cables-must-withstand-extreme-loads.html" | "/products" | "/products/power-cables/high-voltage-cables/n2xsfl2y" | "/products/power-cables/high-voltage-cables/na2xsfl2y-3" | "/products/power-cables/low-voltage-cables/n2x2y" | "/products/power-cables/low-voltage-cables/n2xy" | "/products/power-cables/low-voltage-cables/na2x2y" | "/products/power-cables/low-voltage-cables/na2xy" | "/products/power-cables/low-voltage-cables/nay2y" | "/products/power-cables/low-voltage-cables/naycwy" | "/products/power-cables/low-voltage-cables/nayy" | "/products/power-cables/low-voltage-cables/ny2y" | "/products/power-cables/low-voltage-cables/nycwy" | "/products/power-cables/low-voltage-cables/nyy" | "/products/power-cables/medium-voltage-cables/n2xs2y" | "/products/power-cables/medium-voltage-cables/n2xsf2y" | "/products/power-cables/medium-voltage-cables/n2xsfl2y-3" | "/products/power-cables/medium-voltage-cables/na2xs2y" | "/products/power-cables/medium-voltage-cables/na2xsf2y" | "/products/power-cables/medium-voltage-cables/na2xsfl2y" | "/products/power-cables/medium-voltage-cables/na2xsy" | "/products/solar-cables/h1z2z2-k" | "/team" | "/vcf/klaus-mintel" | "/vcf/michael-bodemer"
type RewriteRoutes = "/[locale]/brochures/[[...path]]" | "/[locale]/datasheets/[[...path]]" | "/brochures/[[...path]]" | "/datasheets/[[...path]]" | "/de/kontakt" | "/de/produkte" | "/de/produkte/[[...path]]" | "/en/agbs" | "/en/datenschutz" | "/en/impressum" | "/en/kontakt" | "/en/produkte" | "/en/produkte/[[...path]]"
type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes | AppRouteHandlerRoutes
interface ParamMap {
"/[locale]": { "locale": string; }
"/[locale]/[slug]": { "locale": string; "slug": string; }
"/[locale]/blog": { "locale": string; }
"/[locale]/blog/[slug]": { "locale": string; "slug": string; }
"/[locale]/brochures/[[...path]]": { "locale": string; "path"?: string[]; }
"/[locale]/contact": { "locale": string; }
"/[locale]/datasheets/[[...path]]": { "locale": string; "path"?: string[]; }
"/[locale]/team": { "locale": string; }
"/[locale]/test": { "locale": string; }
"/api/feedback": {}
"/api/save-session": {}
"/api/whoami": {}
"/blog": {}
"/brochures/[[...path]]": { "path"?: string[]; }
"/contact": {}
"/datasheets/[[...path]]": { "path"?: string[]; }
"/de/kontakt": {}
"/de/produkte": {}
"/de/produkte/[[...path]]": { "path"?: string[]; }
"/de/produkte/stromkabel/niederspannungskabel/naycwy-2": {}
"/de/produkte/stromkabel/niederspannungskabel/ny2y-2": {}
"/de/produkte/stromkabel/solarkabel/h1z2z2-k": {}
"/en/agbs": {}
"/en/datenschutz": {}
"/en/impressum": {}
"/en/kontakt": {}
"/en/produkte": {}
"/en/produkte/[[...path]]": { "path"?: string[]; }
"/health": {}
"/posts/100-renewable-energy-only-with-the-right-cable-infrastructure.html": {}
"/posts/billion-euro-package-for-infrastructure-the-cable-boom-is-coming.html": {}
"/posts/cable-abbreviations-decoded-the-key-to-choosing-the-right-cable.html": {}
"/posts/cable-drum-quality-the-foundation-of-cable-reliability.html": {}
"/posts/cable-drum-safety-ensuring-smooth-operations-and-accident-free-environments.html": {}
"/posts/climate-neutral-by-2050-what-we-need-to-do-to-achieve-this-goal.html": {}
"/posts/cost-comparison-copper-vs-aluminum-cables-in-wind-farms-which-is-worthwhile-in-the-long-term.html": {}
"/posts/etib-in-the-directory-of-wind-energy-2025.html": {}
"/posts/expanding-the-grid-by-2025-building-the-foundation-for-a-successful-energy-transition.html": {}
"/posts/eye-opening-realities-of-green-energy-transformation.html": {}
"/posts/focus-on-wind-farm-construction-three-typical-cable-challenges.html": {}
"/posts/from-smart-to-sustainable-this-is-what-the-energy-industry-will-look-like-in-the-near-future.html": {}
"/posts/green-energy-starts-underground-and-with-a-plan.html": {}
"/posts/how-the-cable-industry-is-driving-sustainability-and-renewable-energies-forward.html": {}
"/posts/how-the-right-cables-quietly-power-the-green-energy-revolution.html": {}
"/posts/how-to-choose-the-right-cable-for-your-next-project.html": {}
"/posts/is-wind-energy-really-enough-a-deeper-dive-behind-the-headlines.html": {}
"/posts/na2xsf2y-three-conductor-medium-voltage-cable-available.html": {}
"/posts/recycling-of-cable-drums-sustainability-in-wind-power-projects.html": {}
"/posts/securing-the-future-with-h1z2z2-k-our-solar-cable-for-intersolar-2025.html": {}
"/posts/the-art-of-cable-logistics-moving-the-backbone-of-modern-energy-networks.html": {}
"/posts/the-best-underground-cables-for-wind-power-and-solar-order-from-us-now.html": {}
"/posts/the-perfect-cable-inquiry-how-to-save-yourself-unnecessary-queries.html": {}
"/posts/this-what-you-need-to-know-about-renewable-energies-in-2025.html": {}
"/posts/welcome-to-the-future-of-etib-our-new-website-is-live.html": {}
"/posts/what-makes-a-first-class-cable-find-out-here.html": {}
"/posts/which-cables-for-wind-power-differences-from-low-to-extra-high-voltage-explained-2.html": {}
"/posts/why-the-n2xsf2y-is-the-ideal-cable-for-your-energy-project.html": {}
"/posts/why-wind-farm-grid-connection-cables-must-withstand-extreme-loads.html": {}
"/products": {}
"/products/power-cables/high-voltage-cables/n2xsfl2y": {}
"/products/power-cables/high-voltage-cables/na2xsfl2y-3": {}
"/products/power-cables/low-voltage-cables/n2x2y": {}
"/products/power-cables/low-voltage-cables/n2xy": {}
"/products/power-cables/low-voltage-cables/na2x2y": {}
"/products/power-cables/low-voltage-cables/na2xy": {}
"/products/power-cables/low-voltage-cables/nay2y": {}
"/products/power-cables/low-voltage-cables/naycwy": {}
"/products/power-cables/low-voltage-cables/nayy": {}
"/products/power-cables/low-voltage-cables/ny2y": {}
"/products/power-cables/low-voltage-cables/nycwy": {}
"/products/power-cables/low-voltage-cables/nyy": {}
"/products/power-cables/medium-voltage-cables/n2xs2y": {}
"/products/power-cables/medium-voltage-cables/n2xsf2y": {}
"/products/power-cables/medium-voltage-cables/n2xsfl2y-3": {}
"/products/power-cables/medium-voltage-cables/na2xs2y": {}
"/products/power-cables/medium-voltage-cables/na2xsf2y": {}
"/products/power-cables/medium-voltage-cables/na2xsfl2y": {}
"/products/power-cables/medium-voltage-cables/na2xsy": {}
"/products/solar-cables/h1z2z2-k": {}
"/stats/api/send": {}
"/team": {}
"/test": {}
"/vcf/klaus-mintel": {}
"/vcf/michael-bodemer": {}
}
export type ParamsOf<Route extends Routes> = ParamMap[Route]
interface LayoutSlotMap {
"/[locale]": never
}
export type { AppRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap, AppRouteHandlerRoutes }
declare global {
/**
* Props for Next.js App Router page components
* @example
* ```tsx
* export default function Page(props: PageProps<'/blog/[slug]'>) {
* const { slug } = await props.params
* return <div>Blog post: {slug}</div>
* }
* ```
*/
interface PageProps<AppRoute extends AppRoutes> {
params: Promise<ParamMap[AppRoute]>
searchParams: Promise<Record<string, string | string[] | undefined>>
}
/**
* Props for Next.js App Router layout components
* @example
* ```tsx
* export default function Layout(props: LayoutProps<'/dashboard'>) {
* return <div>{props.children}</div>
* }
* ```
*/
type LayoutProps<LayoutRoute extends LayoutRoutes> = {
params: Promise<ParamMap[LayoutRoute]>
children: React.ReactNode
} & {
[K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
}
/**
* Context for Next.js App Router route handlers
* @example
* ```tsx
* export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
* const { id } = await context.params
* return Response.json({ id })
* }
* ```
*/
interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
params: Promise<ParamMap[AppRouteHandlerRoute]>
}
}

178
.next/types/validator.ts Normal file
View File

@@ -0,0 +1,178 @@
// This file is generated automatically by Next.js
// Do not edit this file manually
// This file validates that all pages and layouts export the correct types
import type { AppRoutes, LayoutRoutes, ParamMap, AppRouteHandlerRoutes } from "./routes.js"
import type { ResolvingMetadata, ResolvingViewport } from "next/types.js"
import type { NextRequest } from 'next/server.js'
type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
generateMetadata?: (
props: { params: Promise<ParamMap[Route]> } & any,
parent: ResolvingMetadata
) => Promise<any> | any
generateViewport?: (
props: { params: Promise<ParamMap[Route]> } & any,
parent: ResolvingViewport
) => Promise<any> | any
metadata?: any
viewport?: any
}
type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
generateMetadata?: (
props: { params: Promise<ParamMap[Route]> } & any,
parent: ResolvingMetadata
) => Promise<any> | any
generateViewport?: (
props: { params: Promise<ParamMap[Route]> } & any,
parent: ResolvingViewport
) => Promise<any> | any
metadata?: any
viewport?: any
}
type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
}
// Validate ../../app/[locale]/[slug]/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/[slug]">> = Specific
const handler = {} as typeof import("../../app/[locale]/[slug]/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/blog/[slug]/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/blog/[slug]">> = Specific
const handler = {} as typeof import("../../app/[locale]/blog/[slug]/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/blog/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/blog">> = Specific
const handler = {} as typeof import("../../app/[locale]/blog/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/contact/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/contact">> = Specific
const handler = {} as typeof import("../../app/[locale]/contact/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]">> = Specific
const handler = {} as typeof import("../../app/[locale]/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/team/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/team">> = Specific
const handler = {} as typeof import("../../app/[locale]/team/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/test/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/[locale]/test">> = Specific
const handler = {} as typeof import("../../app/[locale]/test/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/test/page.tsx
{
type __IsExpected<Specific extends AppPageConfig<"/test">> = Specific
const handler = {} as typeof import("../../app/test/page.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/api/feedback/route.ts
{
type __IsExpected<Specific extends RouteHandlerConfig<"/api/feedback">> = Specific
const handler = {} as typeof import("../../app/api/feedback/route.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/api/save-session/route.ts
{
type __IsExpected<Specific extends RouteHandlerConfig<"/api/save-session">> = Specific
const handler = {} as typeof import("../../app/api/save-session/route.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/api/whoami/route.ts
{
type __IsExpected<Specific extends RouteHandlerConfig<"/api/whoami">> = Specific
const handler = {} as typeof import("../../app/api/whoami/route.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/health/route.ts
{
type __IsExpected<Specific extends RouteHandlerConfig<"/health">> = Specific
const handler = {} as typeof import("../../app/health/route.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/stats/api/send/route.ts
{
type __IsExpected<Specific extends RouteHandlerConfig<"/stats/api/send">> = Specific
const handler = {} as typeof import("../../app/stats/api/send/route.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}
// Validate ../../app/[locale]/layout.tsx
{
type __IsExpected<Specific extends LayoutConfig<"/[locale]">> = Specific
const handler = {} as typeof import("../../app/[locale]/layout.js")
type __Check = __IsExpected<typeof handler>
// @ts-ignore
type __Unused = __Check
}