From ce3c086f4c6686ecd163e605ebc586a6c7d4f057 Mon Sep 17 00:00:00 2001 From: MichalC <103170279+wSBMichalee@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:12:05 +0200 Subject: [PATCH] fix: localize Pages layout and implement /uslugi subpage blocks --- scripts/seed.ts | 197 ++++++++++++++++++++-- src/blocks/Eligibility/Component.tsx | 126 ++++++++++++++ src/blocks/Eligibility/config.ts | 28 +++ src/blocks/PageHeader/Component.tsx | 23 +++ src/blocks/PageHeader/config.ts | 9 + src/blocks/RenderBlocks.tsx | 7 + src/blocks/ServicesDetailed/Component.tsx | 80 +++++++++ src/blocks/ServicesDetailed/config.ts | 33 ++++ src/collections/Pages.ts | 8 + src/components/Hero/index.tsx | 57 ------- src/payload-types.ts | 103 +++++++++++ 11 files changed, 602 insertions(+), 69 deletions(-) create mode 100644 src/blocks/Eligibility/Component.tsx create mode 100644 src/blocks/Eligibility/config.ts create mode 100644 src/blocks/PageHeader/Component.tsx create mode 100644 src/blocks/PageHeader/config.ts create mode 100644 src/blocks/ServicesDetailed/Component.tsx create mode 100644 src/blocks/ServicesDetailed/config.ts delete mode 100644 src/components/Hero/index.tsx diff --git a/scripts/seed.ts b/scripts/seed.ts index 9fbe445..cc2292a 100644 --- a/scripts/seed.ts +++ b/scripts/seed.ts @@ -164,6 +164,164 @@ const homeLayoutDe = [ } ]; +const uslugiLayoutPl = [ + { + blockType: 'pageHeader', + title: 'Kompleksowe rozliczenia podatkowe dla Polaków w Niemczech', + subtitle: 'Profesjonalne sporządzanie deklaracji, weryfikacja decyzji podatkowych i bieżące wsparcie w kontaktach z niemieckim urzędem skarbowym (Finanzamt).', + }, + { + blockType: 'servicesDetailed', + title: 'Czym się zajmuję', + subtitle: 'Zapewniam rzetelne i kompleksowe wsparcie na każdym etapie rozliczenia podatku dochodowego w Niemczech.', + services: [ + { + title: 'Sporządzenie deklaracji podatkowej (Einkommensteuererklärung)', + description: 'Przygotowujemy kompletne zeznanie podatkowe, uwzględniając wszystkie przysługujące Ci ulgi, koszty uzyskania przychodu oraz odliczenia. Dbamy o maksymalizację Twojego zwrotu i pełną zgodność z niemieckim prawem.', + icon: 'fileText', + }, + { + title: 'Wstępne obliczenie przewidywanego zwrotu', + description: 'Przed wysłaniem dokumentów do urzędu wyliczamy dokładną kwotę spodziewanego zwrotu lub ewentualnej dopłaty. Dzięki temu wiesz dokładnie, czego się spodziewać jeszcze przed wydaniem decyzji przez Finanzamt.', + icon: 'calculator', + }, + { + title: 'Kontrola decyzji podatkowej (Steuerbescheid)', + description: 'Szczegółowo weryfikujemy otrzymaną decyzję z urzędu skarbowego pod kątem ewentualnych błędów urzędników. Sprawdzamy, czy urząd uwzględnił wszystkie zgłoszone koszty i ulgi.', + icon: 'shieldCheck', + }, + { + title: 'Składanie odwołań (Einspruch)', + description: 'W przypadku niekorzystnej lub błędnej decyzji urzędu sporządzamy oficjalne odwołanie i reprezentujemy Cię w postępowaniu wyjaśniającym, skutecznie dochodząc Twoich praw.', + icon: 'scale', + }, + { + title: 'Całoroczne doradztwo podatkowe', + description: 'Pozostajemy do Twojej dyspozycji przez cały rok podatkowy. Odpowiadamy na pytania, pomagamy w bieżącej korespondencji z urzędem i doradzamy przy zmianie sytuacji życiowej.', + icon: 'helpCircle', + }, + { + title: 'Doradztwo przy wyborze klasy podatkowej (Steuerklasse)', + description: 'Doradzamy optymalny dobór klas podatkowych dla małżeństw i osób pracujących w Niemczech. Pomagamy wybrać wariant (np. III/V lub IV/IV), który przyniesie największe korzyści finansowe.', + icon: 'users', + }, + { + title: 'Ulgi, dopłaty i odliczenia (Kindergeld, dojazdy, podwójne gospodarstwo)', + description: 'Pomagamy w uzyskaniu Kindergeld, Riester-Rente oraz prawidłowym odliczeniu kosztów podwójnego gospodarstwa domowego (doppelter Haushalt) i dojazdów do pracy (Pendlerpauschale).', + icon: 'coins', + }, + ], + }, + { + blockType: 'eligibility', + title: 'Dla kogo — zakres uprawnień doradczych wg §4 Nr. 11 StBerG', + subtitle: 'Jako punkt doradczy b.b.h. Lohnsteuerhilfeverein e.V. działamy ściśle w ramach ustawowych uprawnień dla stowarzyszeń pomocy podatkowej.', + eligibleTitle: 'Kto może skorzystać z naszej pomocy', + eligibleItems: [ + { text: 'Pracownicy zatrudnieni na umowę o pracę (Arbeitnehmer) oraz pracownicy tymczasowi' }, + { text: 'Urzędnicy państwowi (Beamte)' }, + { text: 'Emeryci i renciści (Rentner und Pensionäre)' }, + { text: 'Osoby bezrobotne oraz pobierające zasiłki socjalne' }, + { text: 'Odbiorcy świadczeń rodzinnych (Kindergeld, Elterngeld) oraz alimentów' }, + ], + limitationsTitle: 'Dopuszczalne przychody dodatkowe (najem, kapitał, inne)', + limitationsText: 'Osoby uzyskujące dodatkowe przychody (np. z najmu i dzierżawy, kapitałów pieniężnych, innych źródeł) — doradztwo jest możliwe wyłącznie wtedy, gdy łączne przychody z tych źródeł nie przekraczają 18 000 € (dla osób samotnych) lub 36 000 € (dla małżeństw rozliczających się wspólnie) w roku podatkowym.', + excludedTitle: 'Kogo NIE obejmują nasze uprawnienia (granica ustawowa)', + excludedItems: [ + { text: 'Osoby prowadzące jednoosobową działalność gospodarczą (Gewerbe)' }, + { text: 'Przedsiębiorcy, spółki oraz osoby samozatrudnione (Selbständige)' }, + { text: 'Osoby uzyskujące przychody z działalności rolniczej i leśnej (Land- und Forstwirtschaft)' }, + { text: 'Osoby z przychodami z najmu lub kapitału przekraczającymi limity 18 000 € / 36 000 €' }, + ], + legalNotice: 'Pomoc podatkowa jest świadczona wyłącznie na rzecz członków stowarzyszenia b.b.h. Lohnsteuerhilfeverein e.V. zgodnie z § 4 Nr. 11 Steuerberatungsgesetz (StBerG).', + }, + { + blockType: 'finalCta', + title: 'Masz pytania dotyczące Twojego rozliczenia?', + subtitle: 'Skontaktuj się bezpośrednio przez WhatsApp. Przeanalizujemy Twoją sytuację i pomożemy uzyskać należny zwrot.', + buttonText: 'Napisz na WhatsApp', + }, +]; + +const uslugiLayoutDe = [ + { + blockType: 'pageHeader', + title: 'Steuerberatung und Steuererklärungen für Arbeitnehmer', + subtitle: 'Professionelle Erstellung von Steuererklärungen, Bescheidprüfung und ganzheitliche Unterstützung bei der Kommunikation mit dem Finanzamt.', + }, + { + blockType: 'servicesDetailed', + title: 'Was ich anbiete', + subtitle: 'Umfassende und zuverlässige Betreuung bei allen Fragen rund um Ihre Einkommensteuererklärung.', + services: [ + { + title: 'Erstellung der Einkommensteuererklärung', + description: 'Wir erstellen Ihre vollständige Steuererklärung unter Berücksichtigung aller gesetzlichen Freibeträge, Werbungskosten und Pauschalen für eine maximale Rückerstattung.', + icon: 'fileText', + }, + { + title: 'Steuervorausberechnung', + description: 'Bereits vor der Übermittlung an das Finanzamt berechnen wir die voraussichtliche Steuererstattung oder Nachzahlung, damit Sie absolute Planungssicherheit haben.', + icon: 'calculator', + }, + { + title: 'Prüfung des Steuerbescheids', + description: 'Detaillierte Überprüfung Ihres Steuerbescheids auf Richtigkeit und Vollständigkeit. Wir stellen sicher, dass alle geltend gemachten Kosten anerkannt wurden.', + icon: 'shieldCheck', + }, + { + title: 'Einspruchsverfahren', + description: 'Sollte der Steuerbescheid fehlerhaft sein, legen wir fristgerecht Einspruch beim Finanzamt ein und vertreten Ihre Interessen gegenüber den Finanzbehörden.', + icon: 'scale', + }, + { + title: 'Ganzjährige steuerliche Betreuung', + description: 'Wir stehen Ihnen das gesamte Jahr über beratend zur Seite – bei Fragen zu Schreiben des Finanzamts, Belegen und steuerlichen Änderungen.', + icon: 'helpCircle', + }, + { + title: 'Wahl der optimalen Steuerklasse', + description: 'Beratung zur Steuerklassenwahl für Ehepaare und Lebenspartner zur Minimierung der monatlichen Lohnsteuerabzüge und Vermeidung von Nachzahlungen.', + icon: 'users', + }, + { + title: 'Freibeträge, Kindergeld & Fahrtkosten', + description: 'Unterstützung bei der Beantragung von Kindergeld sowie beim Absetzen von Fahrtkosten, doppelter Haushaltsführung und berufsbedingten Mehraufwendungen.', + icon: 'coins', + }, + ], + }, + { + blockType: 'eligibility', + title: 'Beratungsbefugnis gemäß § 4 Nr. 11 StBerG', + subtitle: 'Als Beratungsstelle des b.b.h. Lohnsteuerhilfevereins e.V. betreuen wir Sie streng im Rahmen der gesetzlichen Befugnisse.', + eligibleTitle: 'Wer von uns beraten werden darf', + eligibleItems: [ + { text: 'Arbeitnehmer, Angestellte und Arbeiter' }, + { text: 'Beamte und Beschäftigte im öffentlichen Dienst' }, + { text: 'Rentner und Pensionäre' }, + { text: 'Arbeitslose und Bezieher von Lohnersatzleistungen' }, + { text: 'Bezieher von Kindergeld, Elterngeld und Unterhaltsleistungen' }, + ], + limitationsTitle: 'Einnahmegrenzen bei Nebeneinkünften (Vermietung, Kapital)', + limitationsText: 'Bei sonstigen Einkünften (z. B. aus Vermietung und Verpachtung, Kapitalvermögen, privaten Veräußerungsgeschäften) darf die Summe der Einnahmen 18.000 € bei Alleinstehenden bzw. 36.000 € bei zusammenveranlagten Ehegatten im Kalenderjahr nicht übersteigen.', + excludedTitle: 'Ausschluss der Beratungsbefugnis (gesetzliche Grenze)', + excludedItems: [ + { text: 'Gewerbetreibende (Einzelunternehmer, Handwerker mit Gewerbe)' }, + { text: 'Freiberufler und Selbständige' }, + { text: 'Einkünfte aus Land- und Forstwirtschaft' }, + { text: 'Einnahmen aus Vermietung/Kapital über den gesetzlichen Grenzen (18.000 € / 36.000 €)' }, + ], + legalNotice: 'Die steuerliche Beratung erfolgt ausschließlich im Rahmen einer Mitgliedschaft beim b.b.h. Lohnsteuerhilfeverein e.V. gemäß § 4 Nr. 11 StBerG.', + }, + { + blockType: 'finalCta', + title: 'Haben Sie Fragen zu Ihrer Steuererklärung?', + subtitle: 'Kontaktieren Sie uns direkt per WhatsApp. Wir prüfen Ihre Situation und helfen Ihnen bei der Rückerstattung.', + buttonText: 'Auf WhatsApp schreiben', + }, +]; + async function run() { const payload = await getPayload({ config: configPromise }) @@ -178,17 +336,37 @@ async function run() { const pageIds: number[] = []; for (const page of PAGES) { + const isHome = page.isHome; + const isUslugi = page.pl === 'Usługi'; + + const layoutPl = isHome + ? homeLayoutPl + : isUslugi + ? uslugiLayoutPl + : [ + { + blockType: 'TextSection', + text: 'Treść w przygotowaniu', + }, + ]; + + const layoutDe = isHome + ? homeLayoutDe + : isUslugi + ? uslugiLayoutDe + : [ + { + blockType: 'TextSection', + text: 'Inhalt in Vorbereitung', + }, + ]; + const createdPage = await payload.create({ collection: 'pages', data: { title: page.pl, slug: page.isHome ? 'home' : toSlug(page.pl), - layout: (page.isHome ? homeLayoutPl : [ - { - blockType: 'TextSection', - text: 'Treść w przygotowaniu', - } - ]) as unknown as Page['layout'] + layout: layoutPl as unknown as Page['layout'], }, locale: 'pl', }); @@ -201,12 +379,7 @@ async function run() { data: { title: page.de, slug: page.isHome ? 'home' : toSlug(page.de), - layout: (page.isHome ? homeLayoutDe : [ - { - blockType: 'TextSection', - text: 'Inhalt in Vorbereitung', - } - ]) as unknown as Page['layout'] + layout: layoutDe as unknown as Page['layout'], }, locale: 'de', }); diff --git a/src/blocks/Eligibility/Component.tsx b/src/blocks/Eligibility/Component.tsx new file mode 100644 index 0000000..dd7fca1 --- /dev/null +++ b/src/blocks/Eligibility/Component.tsx @@ -0,0 +1,126 @@ +import React from 'react' +import { CheckCircle2, XCircle, AlertTriangle, ShieldAlert } from 'lucide-react' + +export interface EligibilityProps { + title: string + subtitle?: string | null + eligibleTitle: string + eligibleItems?: Array<{ id?: string | null; text: string }> | null + limitationsTitle: string + limitationsText: string + excludedTitle: string + excludedItems?: Array<{ id?: string | null; text: string }> | null + legalNotice?: string | null +} + +export const EligibilityBlock: React.FC = ({ + title, + subtitle, + eligibleTitle, + eligibleItems, + limitationsTitle, + limitationsText, + excludedTitle, + excludedItems, + legalNotice, +}) => { + return ( +
+
+
+
+ + Zakres uprawnień doradczych +
+

+ {title} +

+ {subtitle && ( +

+ {subtitle} +

+ )} +
+ +
+ {/* Kolumna 1: Kto się kwalifikuje */} +
+
+
+ +
+

+ {eligibleTitle} +

+
+ +
    + {(eligibleItems || []).map((item, idx) => ( +
  • + + + {item.text} + +
  • + ))} +
+
+ + {/* Kolumna 2: Ograniczenia i Wykluczenia */} +
+ {/* Limit przychodów */} +
+
+
+ +
+

+ {limitationsTitle} +

+
+

+ {limitationsText} +

+
+ + {/* Wykluczenia - świadomy wyjątek kolorystyczny (czerwony) dla bezpieczeństwa prawnego klienta */} + {/* Świadomy wyjątek: czerwony kolor ostrzegawczy dla wykluczeń prawnych (poza paletą motywu) */} +
+
+
+ +
+

+ {excludedTitle} +

+
+ +
    + {(excludedItems || []).map((item, idx) => ( +
  • + + + {item.text} + +
  • + ))} +
+
+
+
+ + {legalNotice && ( +
+

{legalNotice}

+
+ )} +
+
+ ) +} diff --git a/src/blocks/Eligibility/config.ts b/src/blocks/Eligibility/config.ts new file mode 100644 index 0000000..78f91d5 --- /dev/null +++ b/src/blocks/Eligibility/config.ts @@ -0,0 +1,28 @@ +import type { Block } from 'payload' + +export const Eligibility: Block = { + slug: 'eligibility', + fields: [ + { name: 'title', type: 'text', required: true }, + { name: 'subtitle', type: 'textarea' }, + { name: 'eligibleTitle', type: 'text', required: true }, + { + name: 'eligibleItems', + type: 'array', + minRows: 1, + required: true, + fields: [{ name: 'text', type: 'text', required: true }], + }, + { name: 'limitationsTitle', type: 'text', required: true }, + { name: 'limitationsText', type: 'textarea', required: true }, + { name: 'excludedTitle', type: 'text', required: true }, + { + name: 'excludedItems', + type: 'array', + minRows: 1, + required: true, + fields: [{ name: 'text', type: 'text', required: true }], + }, + { name: 'legalNotice', type: 'textarea' }, + ], +} diff --git a/src/blocks/PageHeader/Component.tsx b/src/blocks/PageHeader/Component.tsx new file mode 100644 index 0000000..b06ac1a --- /dev/null +++ b/src/blocks/PageHeader/Component.tsx @@ -0,0 +1,23 @@ +import React from 'react' + +export interface PageHeaderProps { + title: string + subtitle?: string | null +} + +export const PageHeaderBlock: React.FC = ({ title, subtitle }) => { + return ( +
+
+

+ {title} +

+ {subtitle && ( +

+ {subtitle} +

+ )} +
+
+ ) +} diff --git a/src/blocks/PageHeader/config.ts b/src/blocks/PageHeader/config.ts new file mode 100644 index 0000000..2631ac4 --- /dev/null +++ b/src/blocks/PageHeader/config.ts @@ -0,0 +1,9 @@ +import type { Block } from 'payload' + +export const PageHeader: Block = { + slug: 'pageHeader', + fields: [ + { name: 'title', type: 'text', required: true }, + { name: 'subtitle', type: 'textarea' }, + ], +} diff --git a/src/blocks/RenderBlocks.tsx b/src/blocks/RenderBlocks.tsx index f2c9af7..ccf89e7 100644 --- a/src/blocks/RenderBlocks.tsx +++ b/src/blocks/RenderBlocks.tsx @@ -11,7 +11,14 @@ import { TestimonialsBlock } from './Testimonials/Component' import { FAQTeaserBlock } from './FAQTeaser/Component' import { FinalCTABlock } from './FinalCTA/Component' +import { PageHeaderBlock } from './PageHeader/Component' +import { ServicesDetailedBlock } from './ServicesDetailed/Component' +import { EligibilityBlock } from './Eligibility/Component' + const blockComponents = { + pageHeader: PageHeaderBlock, + servicesDetailed: ServicesDetailedBlock, + eligibility: EligibilityBlock, hero: HeroBlock, trustBar: TrustBarBlock, uniqueValue: UniqueValueBlock, diff --git a/src/blocks/ServicesDetailed/Component.tsx b/src/blocks/ServicesDetailed/Component.tsx new file mode 100644 index 0000000..2b70203 --- /dev/null +++ b/src/blocks/ServicesDetailed/Component.tsx @@ -0,0 +1,80 @@ +import React from 'react' +import { + FileText, + Calculator, + ShieldCheck, + Scale, + HelpCircle, + Users, + Coins, + LucideIcon, +} from 'lucide-react' + +const iconMap: Record = { + fileText: FileText, + calculator: Calculator, + shieldCheck: ShieldCheck, + scale: Scale, + helpCircle: HelpCircle, + users: Users, + coins: Coins, +} + +export interface ServicesDetailedProps { + title: string + subtitle?: string | null + services?: Array<{ + id?: string | null + title: string + description: string + icon?: string | null + }> | null +} + +export const ServicesDetailedBlock: React.FC = ({ + title, + subtitle, + services, +}) => { + return ( +
+
+
+

+ {title} +

+ {subtitle && ( +

+ {subtitle} +

+ )} +
+ +
+ {(services || []).map((service, index) => { + const Icon = (service.icon && iconMap[service.icon]) || FileText + + return ( +
+
+
+ +
+

+ {service.title} +

+

+ {service.description} +

+
+
+ ) + })} +
+
+
+ ) +} diff --git a/src/blocks/ServicesDetailed/config.ts b/src/blocks/ServicesDetailed/config.ts new file mode 100644 index 0000000..09980f2 --- /dev/null +++ b/src/blocks/ServicesDetailed/config.ts @@ -0,0 +1,33 @@ +import type { Block } from 'payload' + +export const ServicesDetailed: Block = { + slug: 'servicesDetailed', + fields: [ + { name: 'title', type: 'text', required: true }, + { name: 'subtitle', type: 'textarea' }, + { + name: 'services', + type: 'array', + minRows: 1, + required: true, + fields: [ + { name: 'title', type: 'text', required: true }, + { name: 'description', type: 'textarea', required: true }, + { + name: 'icon', + type: 'select', + options: [ + 'fileText', + 'calculator', + 'shieldCheck', + 'scale', + 'helpCircle', + 'users', + 'coins', + ], + defaultValue: 'fileText', + }, + ], + }, + ], +} diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts index 3e1456d..5ca8d59 100644 --- a/src/collections/Pages.ts +++ b/src/collections/Pages.ts @@ -10,6 +10,10 @@ import { Testimonials } from '../blocks/Testimonials/config' import { FAQTeaser } from '../blocks/FAQTeaser/config' import { FinalCTA } from '../blocks/FinalCTA/config' +import { PageHeader } from '../blocks/PageHeader/config' +import { ServicesDetailed } from '../blocks/ServicesDetailed/config' +import { Eligibility } from '../blocks/Eligibility/config' + export const Pages: CollectionConfig = { slug: 'pages', admin: { @@ -29,8 +33,12 @@ export const Pages: CollectionConfig = { { name: 'layout', type: 'blocks', + localized: true, minRows: 1, blocks: [ + PageHeader, + ServicesDetailed, + Eligibility, Hero, TrustBar, UniqueValue, diff --git a/src/components/Hero/index.tsx b/src/components/Hero/index.tsx deleted file mode 100644 index 64093f6..0000000 --- a/src/components/Hero/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { ArrowRight, Calculator } from "lucide-react"; -import Link from "next/link"; - -export function Hero() { - return ( -
- {/* Subtelne tło dekoracyjne, bez przesadzonych efektów - oddychający layout */} -
- -
-
- - {/* Typografia i treść */} -
-
- - Lohnsteuerhilfeverein e.V. -
- -

- Twój spokój w świecie{" "} - niemieckich podatków -

- -

- Profesjonalne doradztwo podatkowe, rozliczenia i pełne wsparcie w kontaktach z Finanzamt. - Zadbamy o Twoje finanse, abyś Ty mógł skupić się na tym, co ważne. -

- -
- - Umów konsultację - - - - Poznaj nasze usługi - -
-
- - {/* Miejsce na realne zdjęcie Janusza - neutralny placeholder */} -
-
- JK - Miejsce na zdjęcie - Zostanie dodane przez panel CMS -
-
- -
-
-
- ); -} diff --git a/src/payload-types.ts b/src/payload-types.ts index b335c62..6f8cd7e 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -213,6 +213,46 @@ export interface Page { slug: string; layout?: | ( + | { + title: string; + subtitle?: string | null; + id?: string | null; + blockName?: string | null; + blockType: 'pageHeader'; + } + | { + title: string; + subtitle?: string | null; + services: { + title: string; + description: string; + icon?: ('fileText' | 'calculator' | 'shieldCheck' | 'scale' | 'helpCircle' | 'users' | 'coins') | null; + id?: string | null; + }[]; + id?: string | null; + blockName?: string | null; + blockType: 'servicesDetailed'; + } + | { + title: string; + subtitle?: string | null; + eligibleTitle: string; + eligibleItems: { + text: string; + id?: string | null; + }[]; + limitationsTitle: string; + limitationsText: string; + excludedTitle: string; + excludedItems: { + text: string; + id?: string | null; + }[]; + legalNotice?: string | null; + id?: string | null; + blockName?: string | null; + blockType: 'eligibility'; + } | { title: string; subtitle: string; @@ -497,6 +537,55 @@ export interface PagesSelect { layout?: | T | { + pageHeader?: + | T + | { + title?: T; + subtitle?: T; + id?: T; + blockName?: T; + }; + servicesDetailed?: + | T + | { + title?: T; + subtitle?: T; + services?: + | T + | { + title?: T; + description?: T; + icon?: T; + id?: T; + }; + id?: T; + blockName?: T; + }; + eligibility?: + | T + | { + title?: T; + subtitle?: T; + eligibleTitle?: T; + eligibleItems?: + | T + | { + text?: T; + id?: T; + }; + limitationsTitle?: T; + limitationsText?: T; + excludedTitle?: T; + excludedItems?: + | T + | { + text?: T; + id?: T; + }; + legalNotice?: T; + id?: T; + blockName?: T; + }; hero?: | T | { @@ -723,6 +812,12 @@ export interface Footer { logo?: (number | null) | Media; link?: string | null; }; + copyright: string; + creator: { + label?: string | null; + name: string; + url: string; + }; updatedAt?: string | null; createdAt?: string | null; } @@ -942,6 +1037,14 @@ export interface FooterSelect { logo?: T; link?: T; }; + copyright?: T; + creator?: + | T + | { + label?: T; + name?: T; + url?: T; + }; updatedAt?: T; createdAt?: T; globalType?: T;