/* tslint:disable */ /* eslint-disable */ /** * This file was automatically generated by Payload. * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, * and re-run `payload generate:types` to regenerate this file. */ /** * Supported timezones in IANA format. * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "supportedTimezones". */ export type SupportedTimezones = | 'Pacific/Midway' | 'Pacific/Niue' | 'Pacific/Honolulu' | 'Pacific/Rarotonga' | 'America/Anchorage' | 'Pacific/Gambier' | 'America/Los_Angeles' | 'America/Tijuana' | 'America/Denver' | 'America/Phoenix' | 'America/Chicago' | 'America/Guatemala' | 'America/New_York' | 'America/Bogota' | 'America/Caracas' | 'America/Santiago' | 'America/Buenos_Aires' | 'America/Sao_Paulo' | 'Atlantic/South_Georgia' | 'Atlantic/Azores' | 'Atlantic/Cape_Verde' | 'Europe/London' | 'Europe/Berlin' | 'Africa/Lagos' | 'Europe/Athens' | 'Africa/Cairo' | 'Europe/Moscow' | 'Asia/Riyadh' | 'Asia/Dubai' | 'Asia/Baku' | 'Asia/Karachi' | 'Asia/Tashkent' | 'Asia/Calcutta' | 'Asia/Dhaka' | 'Asia/Almaty' | 'Asia/Jakarta' | 'Asia/Bangkok' | 'Asia/Shanghai' | 'Asia/Singapore' | 'Asia/Tokyo' | 'Asia/Seoul' | 'Australia/Brisbane' | 'Australia/Sydney' | 'Pacific/Guam' | 'Pacific/Noumea' | 'Pacific/Auckland' | 'Pacific/Fiji'; export interface Config { auth: { users: UserAuthOperations; }; blocks: {}; collections: { users: User; media: Media; tenants: Tenant; pages: Page; posts: Post; categories: Category; 'social-links': SocialLink; testimonials: Testimonial; faqs: Faq; team: Team; 'service-categories': ServiceCategory; services: Service; 'newsletter-subscribers': NewsletterSubscriber; 'portfolio-categories': PortfolioCategory; portfolios: Portfolio; 'product-categories': ProductCategory; products: Product; timelines: Timeline; workflows: Workflow; tags: Tag; authors: Author; 'cookie-configurations': CookieConfiguration; 'cookie-inventory': CookieInventory; 'consent-logs': ConsentLog; 'privacy-policy-settings': PrivacyPolicySetting; 'email-logs': EmailLog; 'audit-logs': AuditLog; forms: Form; 'form-submissions': FormSubmission; redirects: Redirect; 'payload-kv': PayloadKv; 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; 'payload-migrations': PayloadMigration; }; collectionsJoins: {}; collectionsSelect: { users: UsersSelect | UsersSelect; media: MediaSelect | MediaSelect; tenants: TenantsSelect | TenantsSelect; pages: PagesSelect | PagesSelect; posts: PostsSelect | PostsSelect; categories: CategoriesSelect | CategoriesSelect; 'social-links': SocialLinksSelect | SocialLinksSelect; testimonials: TestimonialsSelect | TestimonialsSelect; faqs: FaqsSelect | FaqsSelect; team: TeamSelect | TeamSelect; 'service-categories': ServiceCategoriesSelect | ServiceCategoriesSelect; services: ServicesSelect | ServicesSelect; 'newsletter-subscribers': NewsletterSubscribersSelect | NewsletterSubscribersSelect; 'portfolio-categories': PortfolioCategoriesSelect | PortfolioCategoriesSelect; portfolios: PortfoliosSelect | PortfoliosSelect; 'product-categories': ProductCategoriesSelect | ProductCategoriesSelect; products: ProductsSelect | ProductsSelect; timelines: TimelinesSelect | TimelinesSelect; workflows: WorkflowsSelect | WorkflowsSelect; tags: TagsSelect | TagsSelect; authors: AuthorsSelect | AuthorsSelect; 'cookie-configurations': CookieConfigurationsSelect | CookieConfigurationsSelect; 'cookie-inventory': CookieInventorySelect | CookieInventorySelect; 'consent-logs': ConsentLogsSelect | ConsentLogsSelect; 'privacy-policy-settings': PrivacyPolicySettingsSelect | PrivacyPolicySettingsSelect; 'email-logs': EmailLogsSelect | EmailLogsSelect; 'audit-logs': AuditLogsSelect | AuditLogsSelect; forms: FormsSelect | FormsSelect; 'form-submissions': FormSubmissionsSelect | FormSubmissionsSelect; redirects: RedirectsSelect | RedirectsSelect; 'payload-kv': PayloadKvSelect | PayloadKvSelect; 'payload-locked-documents': PayloadLockedDocumentsSelect | PayloadLockedDocumentsSelect; 'payload-preferences': PayloadPreferencesSelect | PayloadPreferencesSelect; 'payload-migrations': PayloadMigrationsSelect | PayloadMigrationsSelect; }; db: { defaultIDType: number; }; fallbackLocale: ('false' | 'none' | 'null') | false | null | ('de' | 'en') | ('de' | 'en')[]; globals: { 'site-settings': SiteSetting; navigation: Navigation; 'seo-settings': SeoSetting; }; globalsSelect: { 'site-settings': SiteSettingsSelect | SiteSettingsSelect; navigation: NavigationSelect | NavigationSelect; 'seo-settings': SeoSettingsSelect | SeoSettingsSelect; }; locale: 'de' | 'en'; user: User & { collection: 'users'; }; jobs: { tasks: unknown; workflows: unknown; }; } export interface UserAuthOperations { forgotPassword: { email: string; password: string; }; login: { email: string; password: string; }; registerFirstUser: { email: string; password: string; }; unlock: { email: string; password: string; }; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "users". */ export interface User { id: number; /** * Super Admins haben Zugriff auf alle Tenants und können neue Tenants erstellen. */ isSuperAdmin?: boolean | null; tenants?: | { tenant: number | Tenant; id?: string | null; }[] | null; updatedAt: string; createdAt: string; email: string; resetPasswordToken?: string | null; resetPasswordExpiration?: string | null; salt?: string | null; hash?: string | null; loginAttempts?: number | null; lockUntil?: string | null; sessions?: | { id: string; createdAt?: string | null; expiresAt: string; }[] | null; password?: string | null; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "tenants". */ export interface Tenant { id: number; name: string; slug: string; domains?: | { domain: string; id?: string | null; }[] | null; /** * SMTP-Einstellungen für diesen Tenant. Leer = globale Einstellungen. */ email?: { /** * Tipp: Verwenden Sie eine E-Mail-Adresse der Domain, für die SPF/DKIM konfiguriert ist. */ fromAddress?: string | null; fromName?: string | null; replyTo?: string | null; /** * Aktivieren Sie diese Option, um einen eigenen SMTP-Server statt der globalen Einstellungen zu verwenden. */ useCustomSmtp?: boolean | null; /** * Hinweis: Stellen Sie sicher, dass SPF- und DKIM-Einträge für Ihre Domain konfiguriert sind, um eine optimale E-Mail-Zustellung zu gewährleisten. */ smtp?: { /** * Hostname ohne Protokoll (z.B. smtp.gmail.com) */ host: string; /** * 587 (STARTTLS) oder 465 (SSL) */ port?: number | null; /** * Für Port 465 aktivieren */ secure?: boolean | null; /** * Meist die E-Mail-Adresse */ user: string; /** * Leer lassen um bestehendes Passwort zu behalten */ pass?: string | null; }; }; updatedAt: string; createdAt: string; } /** * Bilder und Dokumente mit automatischer Optimierung * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "media". */ export interface Media { id: number; tenant?: (number | null) | Tenant; /** * Beschreibung für Screenreader und SEO (Pflichtfeld) */ alt: string; /** * Optionale Bildunterschrift für Darstellung unter dem Bild */ caption?: string | null; /** * Fotograf, Agentur oder Quelle */ credit?: string | null; /** * Schlagwörter für die Suche und Filterung */ tags?: string[] | null; updatedAt: string; createdAt: string; url?: string | null; thumbnailURL?: string | null; filename?: string | null; mimeType?: string | null; filesize?: number | null; width?: number | null; height?: number | null; focalX?: number | null; focalY?: number | null; sizes?: { thumbnail?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; small?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; medium?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; large?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; xlarge?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; '2k'?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; og?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; medium_avif?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; large_avif?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; xlarge_avif?: { url?: string | null; width?: number | null; height?: number | null; mimeType?: string | null; filesize?: number | null; filename?: string | null; }; }; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "pages". */ export interface Page { id: number; tenant?: (number | null) | Tenant; title: string; /** * URL-Pfad (z.B. "ueber-uns" / "about-us") */ slug: string; hero?: { image?: (number | null) | Media; headline?: string | null; subline?: string | null; }; layout?: | ( | { backgroundImage?: (number | null) | Media; headline: string; subline?: string | null; alignment?: ('left' | 'center' | 'right') | null; overlay?: boolean | null; cta?: { text?: string | null; link?: string | null; style?: ('primary' | 'secondary' | 'outline') | null; }; id?: string | null; blockName?: string | null; blockType: 'hero-block'; } | { /** * Mindestens 1 Slide erforderlich, maximal 10 Slides */ slides: { /** * Empfohlen: 1920x1080px oder größer */ backgroundImage: number | Media; /** * Optional: Alternatives Bild für mobile Geräte (Portrait-Format empfohlen) */ mobileBackgroundImage?: (number | null) | Media; /** * Hauptüberschrift des Slides */ headline: string; /** * Optionaler Untertitel oder kurze Beschreibung */ subline?: string | null; textAlignment?: ('left' | 'center' | 'right') | null; verticalPosition?: ('top' | 'center' | 'bottom') | null; overlay?: { enabled?: boolean | null; color?: ('dark' | 'light' | 'primary' | 'gradient-bottom' | 'gradient-top') | null; opacity?: ('20' | '30' | '40' | '50' | '60' | '70' | '80') | null; }; primaryCta?: { enabled?: boolean | null; text?: string | null; /** * URL oder interner Pfad (z.B. /kontakt) */ link?: string | null; style?: ('primary' | 'secondary' | 'outline-white' | 'outline-dark') | null; openInNewTab?: boolean | null; }; secondaryCta?: { enabled?: boolean | null; text?: string | null; link?: string | null; style?: ('primary' | 'secondary' | 'outline-white' | 'outline-dark' | 'text') | null; openInNewTab?: boolean | null; }; textColor?: ('white' | 'dark' | 'primary') | null; id?: string | null; }[]; settings?: { /** * Art des Übergangs zwischen den Slides */ animation?: ('fade' | 'slide' | 'zoom' | 'flip' | 'none') | null; animationDuration?: ('300' | '500' | '800' | '1200') | null; autoplay?: { enabled?: boolean | null; interval?: ('3000' | '4000' | '5000' | '6000' | '7000' | '8000' | '10000') | null; /** * Autoplay pausiert, wenn der Mauszeiger über dem Slider ist */ pauseOnHover?: boolean | null; /** * Autoplay pausiert nach manueller Navigation */ pauseOnInteraction?: boolean | null; }; /** * Nach dem letzten Slide automatisch zum ersten springen */ loop?: boolean | null; }; navigation?: { arrows?: { enabled?: boolean | null; style?: ('default' | 'minimal' | 'square' | 'hover-only') | null; position?: ('sides' | 'bottom-left' | 'bottom-right' | 'bottom-center') | null; hideOnMobile?: boolean | null; }; dots?: { enabled?: boolean | null; style?: ('dots' | 'lines' | 'numbers' | 'thumbnails' | 'progress') | null; position?: ('bottom-center' | 'bottom-left' | 'bottom-right' | 'left' | 'right') | null; color?: ('white' | 'dark' | 'primary') | null; }; /** * Ermöglicht Wischen auf Touch-Geräten */ swipe?: boolean | null; /** * Navigation mit Pfeiltasten ermöglichen */ keyboard?: boolean | null; }; layout?: { height?: ('viewport' | 'large' | 'medium' | 'small' | 'compact' | 'auto') | null; mobileHeight?: ('same' | 'viewport' | 'large' | 'medium' | 'small' | 'compact') | null; contentWidth?: ('container' | 'narrow' | 'wide' | 'full') | null; /** * Slider nimmt die volle Bildschirmbreite ein */ fullWidth?: boolean | null; }; accessibility?: { /** * Beschreibung für Screenreader */ ariaLabel?: string | null; /** * Autoplay deaktivieren, wenn der User "prefers-reduced-motion" aktiviert hat */ reducedMotion?: boolean | null; }; id?: string | null; blockName?: string | null; blockType: 'hero-slider-block'; } | { /** * Optionaler Titel über der Galerie */ title?: string | null; description?: string | null; /** * Mindestens 1 Bild, maximal 50 Bilder */ images: { image: number | Media; caption?: string | null; /** * Alternativer Text für Barrierefreiheit (falls abweichend vom Media Alt) */ alt?: string | null; /** * Optionaler Link beim Klick (statt Lightbox) */ link?: string | null; id?: string | null; }[]; layout?: ('slider' | 'grid' | 'masonry' | 'single' | 'thumbs' | 'filmstrip') | null; grid?: { cols?: ('2' | '3' | '4' | '5' | '6') | null; gap?: ('0' | '8' | '16' | '24' | '32') | null; aspectRatio?: ('square' | '4-3' | '16-9' | '3-4' | 'auto') | null; }; slider?: { effect?: ('slide' | 'fade' | 'zoom' | 'flip' | 'coverflow' | 'cube') | null; speed?: ('300' | '500' | '800') | null; perView?: ('1' | '2' | '3' | '4' | 'auto') | null; gap?: ('0' | '8' | '16' | '24') | null; auto?: boolean | null; delay?: ('3000' | '4000' | '5000' | '6000' | '8000') | null; pauseHover?: boolean | null; loop?: boolean | null; centered?: boolean | null; }; nav?: { arrows?: boolean | null; arrowStyle?: ('default' | 'minimal' | 'square' | 'hover') | null; dots?: boolean | null; dotStyle?: ('dots' | 'lines' | 'numbers' | 'progress') | null; counter?: boolean | null; swipe?: boolean | null; keys?: boolean | null; }; lightbox?: { /** * Bilder bei Klick in Vollansicht öffnen */ enabled?: boolean | null; zoom?: boolean | null; download?: boolean | null; share?: boolean | null; captions?: boolean | null; thumbs?: boolean | null; bg?: ('dark' | 'light' | 'blur') | null; }; style?: { height?: ('auto' | '300' | '400' | '500' | '600' | 'full') | null; imgFit?: ('cover' | 'contain' | 'fill') | null; rounded?: ('none' | 'sm' | 'md' | 'lg' | 'full') | null; shadow?: boolean | null; border?: boolean | null; hoverEffect?: ('none' | 'zoom' | 'brighten' | 'darken' | 'overlay') | null; captionPos?: ('below' | 'overlay' | 'hover' | 'hidden') | null; bg?: ('none' | 'white' | 'light' | 'dark') | null; padding?: ('none' | 'sm' | 'md' | 'lg') | null; }; a11y?: { label?: string | null; reducedMotion?: boolean | null; }; id?: string | null; blockName?: string | null; blockType: 'image-slider-block'; } | { content: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; }; width?: ('narrow' | 'medium' | 'full') | null; id?: string | null; blockName?: string | null; blockType: 'text-block'; } | { image: number | Media; imagePosition?: ('left' | 'right') | null; headline?: string | null; content?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; cta?: { text?: string | null; link?: string | null; }; id?: string | null; blockName?: string | null; blockType: 'image-text-block'; } | { headline?: string | null; cards?: | { image?: (number | null) | Media; title: string; description?: string | null; link?: string | null; linkText?: string | null; id?: string | null; }[] | null; columns?: ('2' | '3' | '4') | null; id?: string | null; blockName?: string | null; blockType: 'card-grid-block'; } | { quote: string; author?: string | null; role?: string | null; image?: (number | null) | Media; style?: ('simple' | 'highlighted' | 'with-image') | null; id?: string | null; blockName?: string | null; blockType: 'quote-block'; } | { headline: string; description?: string | null; buttons?: | { text: string; link: string; style?: ('primary' | 'secondary' | 'outline') | null; id?: string | null; }[] | null; backgroundColor?: ('dark' | 'light' | 'accent') | null; id?: string | null; blockName?: string | null; blockType: 'cta-block'; } | { headline?: string | null; description?: string | null; recipientEmail?: string | null; showPhone?: boolean | null; showAddress?: boolean | null; showSocials?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'contact-form-block'; } | { title?: string | null; subtitle?: string | null; layout?: ('vertical' | 'alternating' | 'horizontal') | null; showConnector?: boolean | null; markerStyle?: ('dot' | 'number' | 'icon' | 'date') | null; items?: | { /** * z.B. "2024", "Januar 2024", "15.03.2024" */ year?: string | null; title: string; description?: string | null; /** * Emoji oder Icon-Name */ icon?: string | null; image?: (number | null) | Media; link?: { label?: string | null; href?: string | null; }; id?: string | null; }[] | null; backgroundColor?: ('white' | 'light' | 'dark') | null; id?: string | null; blockName?: string | null; blockType: 'timeline-block'; } | { style?: ('line' | 'space' | 'dots') | null; spacing?: ('small' | 'medium' | 'large') | null; id?: string | null; blockName?: string | null; blockType: 'divider-block'; } | { /** * YouTube oder Vimeo URL */ videoUrl: string; caption?: string | null; aspectRatio?: ('16:9' | '4:3' | '1:1') | null; id?: string | null; blockName?: string | null; blockType: 'video-block'; } | { title?: string | null; subtitle?: string | null; postType: 'blog' | 'news' | 'press' | 'announcement' | 'all'; layout?: ('grid' | 'list' | 'featured' | 'compact' | 'masonry') | null; columns?: ('2' | '3' | '4') | null; limit?: number | null; showFeaturedOnly?: boolean | null; /** * Leer = alle Kategorien */ filterByCategory?: (number | Category)[] | null; showExcerpt?: boolean | null; showDate?: boolean | null; showAuthor?: boolean | null; showCategory?: boolean | null; showPagination?: boolean | null; showReadMore?: boolean | null; readMoreLabel?: string | null; readMoreLink?: string | null; backgroundColor?: ('white' | 'light' | 'dark') | null; id?: string | null; blockName?: string | null; blockType: 'posts-list-block'; } | { title?: string | null; subtitle?: string | null; layout?: ('slider' | 'grid' | 'single' | 'masonry' | 'list') | null; columns?: ('2' | '3' | '4') | null; displayMode?: ('all' | 'selected') | null; selectedTestimonials?: (number | Testimonial)[] | null; limit?: number | null; displayOptions?: { showRating?: boolean | null; showImage?: boolean | null; showCompany?: boolean | null; showSource?: boolean | null; showDate?: boolean | null; /** * Lange Testimonials werden abgeschnitten mit "Mehr lesen" */ truncateText?: boolean | null; maxLength?: number | null; }; slider?: { effect?: ('slide' | 'fade' | 'cards' | 'coverflow' | 'none') | null; speed?: ('300' | '500' | '800') | null; /** * Anzahl gleichzeitig sichtbarer Testimonials */ perView?: ('1' | '2' | '3' | 'auto') | null; gap?: ('0' | '16' | '24' | '32' | '48') | null; auto?: boolean | null; delay?: ('3000' | '4000' | '5000' | '6000' | '8000' | '10000') | null; hoverPause?: boolean | null; loop?: boolean | null; /** * Der aktive Slide wird in der Mitte angezeigt */ centered?: boolean | null; }; nav?: { arrows?: boolean | null; arrowStyle?: ('default' | 'minimal' | 'square' | 'hover' | 'outside') | null; arrowPos?: ('sides' | 'bl' | 'br' | 'bc') | null; dots?: boolean | null; dotStyle?: ('dots' | 'lines' | 'numbers' | 'progress' | 'fraction') | null; dotPos?: ('bottom' | 'bl' | 'br') | null; swipe?: boolean | null; keys?: boolean | null; }; style?: { bg?: ('white' | 'light' | 'dark' | 'accent' | 'none') | null; card?: ('shadow' | 'border' | 'flat' | 'glass') | null; quote?: ('icon' | 'quotes' | 'none' | 'large') | null; imgPos?: ('top' | 'left' | 'bottom' | 'bg') | null; imgSize?: ('sm' | 'md' | 'lg' | 'xl') | null; align?: ('left' | 'center' | 'right') | null; spacing?: ('sm' | 'normal' | 'lg') | null; }; a11y?: { label?: string | null; /** * Autoplay deaktivieren bei "prefers-reduced-motion" */ reducedMotion?: boolean | null; }; id?: string | null; blockName?: string | null; blockType: 'testimonials-block'; } | { title?: string | null; subtitle?: string | null; layout?: ('inline' | 'stacked' | 'with-image' | 'minimal' | 'card') | null; image?: (number | null) | Media; imagePosition?: ('left' | 'right') | null; collectName?: boolean | null; showInterests?: boolean | null; availableInterests?: ('general' | 'blog' | 'products' | 'offers' | 'events')[] | null; buttonText?: string | null; placeholderEmail?: string | null; successMessage?: string | null; errorMessage?: string | null; privacyText?: string | null; privacyLink?: string | null; /** * Wird gespeichert um zu tracken, wo die Anmeldung erfolgte */ source?: string | null; backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null; id?: string | null; blockName?: string | null; blockType: 'newsletter-block'; } | { title?: string | null; subtitle?: string | null; layout?: ('horizontal' | 'vertical' | 'alternating' | 'connected' | 'timeline') | null; showNumbers?: boolean | null; showIcons?: boolean | null; steps?: | { title: string; description?: string | null; /** * Emoji oder Icon-Name (z.B. "📞", "✓", "1") */ icon?: string | null; image?: (number | null) | Media; id?: string | null; }[] | null; cta?: { show?: boolean | null; label?: string | null; href?: string | null; variant?: ('default' | 'ghost' | 'light') | null; }; backgroundColor?: ('white' | 'light' | 'dark') | null; id?: string | null; blockName?: string | null; blockType: 'process-steps-block'; } | { title?: string | null; subtitle?: string | null; sourceMode?: ('collection' | 'inline') | null; displayMode?: ('all' | 'featured' | 'category' | 'selected') | null; /** * Zeigt nur FAQs mit dieser Kategorie */ category?: string | null; selectedFAQs?: (number | Faq)[] | null; limit?: number | null; inlineFAQs?: | { question: string; answer: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; }; /** * Kurzfassung als reiner Text für SEO Structured Data */ answerPlainText?: string | null; id?: string | null; }[] | null; layout?: ('accordion' | 'grid' | 'list' | 'two-column') | null; columns?: ('2' | '3') | null; expandFirst?: boolean | null; allowMultipleOpen?: boolean | null; showCategory?: boolean | null; showIcon?: boolean | null; groupByCategory?: boolean | null; /** * Generiert SEO-optimiertes JSON-LD Structured Data */ enableSchemaOrg?: boolean | null; backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null; /** * Zeigt einen "Frage nicht gefunden? Kontaktieren Sie uns" Button */ showContactCTA?: boolean | null; contactCTAText?: string | null; contactCTALink?: string | null; contactCTAButtonText?: string | null; id?: string | null; blockName?: string | null; blockType: 'faq-block'; } | { title?: string | null; subtitle?: string | null; /** * Optionaler Text vor der Team-Anzeige */ introduction?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; displayMode?: ('all' | 'featured' | 'department' | 'selected') | null; /** * Zeigt nur Mitglieder dieser Abteilung */ department?: string | null; selectedMembers?: (number | Team)[] | null; limit?: number | null; layout?: ('grid' | 'list' | 'slider' | 'compact' | 'detailed') | null; columns?: ('2' | '3' | '4') | null; showRole?: boolean | null; showDepartment?: boolean | null; showBio?: boolean | null; /** * Nur wenn beim Mitglied "Kontaktdaten öffentlich anzeigen" aktiviert ist */ showContact?: boolean | null; showSocialLinks?: boolean | null; showQualifications?: boolean | null; showSpecializations?: boolean | null; showLanguages?: boolean | null; groupByDepartment?: boolean | null; autoplay?: boolean | null; autoplaySpeed?: number | null; /** * Klick auf Mitglied öffnet Modal/Lightbox mit allen Details */ enableDetailView?: boolean | null; imageStyle?: ('circle' | 'rounded' | 'square') | null; backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null; showCTA?: boolean | null; ctaText?: string | null; ctaLink?: string | null; id?: string | null; blockName?: string | null; blockType: 'team-block'; } | { title?: string | null; subtitle?: string | null; /** * Optionaler Text vor der Leistungsübersicht */ introduction?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; displayMode?: ('all' | 'featured' | 'category' | 'selected') | null; /** * Zeigt nur Leistungen dieser Kategorie */ category?: (number | null) | ServiceCategory; selectedServices?: (number | Service)[] | null; limit?: number | null; layout?: | ('grid' | 'list' | 'tabs' | 'accordion' | 'featured-grid' | 'slider' | 'compact' | 'masonry') | null; columns?: ('2' | '3' | '4') | null; /** * Anzahl der hervorgehobenen Leistungen oben */ featuredCount?: number | null; tabsStyle?: ('horizontal' | 'vertical' | 'pills') | null; showAllTab?: boolean | null; expandFirst?: boolean | null; allowMultipleOpen?: boolean | null; autoplay?: boolean | null; autoplaySpeed?: number | null; slidesPerView?: ('1' | '2' | '3' | '4') | null; showImage?: boolean | null; showIcon?: boolean | null; showDescription?: boolean | null; showCategory?: boolean | null; showPricing?: boolean | null; showFeatures?: boolean | null; featuresLimit?: number | null; showCTA?: boolean | null; showNewBadge?: boolean | null; /** * Zeigt Kategorie-Überschriften zwischen den Leistungen */ groupByCategory?: boolean | null; /** * Karten/Einträge verlinken zur Leistungs-Detail-Seite */ linkToDetail?: boolean | null; detailLinkText?: string | null; /** * z.B. "/leistungen" → "/leistungen/intensivpflege" */ servicesBasePath?: string | null; cardStyle?: ('elevated' | 'bordered' | 'flat' | 'filled') | null; backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null; showSectionCTA?: boolean | null; sectionCTAText?: string | null; sectionCTALink?: string | null; id?: string | null; blockName?: string | null; blockType: 'services-block'; } | { /** * Woher sollen die Autoren-Daten kommen? */ source?: ('post' | 'manual') | null; /** * Wählen Sie die anzuzeigenden Autoren */ authors?: (number | Author)[] | null; /** * Auch Co-Autoren des Artikels anzeigen */ showCoAuthors?: boolean | null; layout?: ('card' | 'inline' | 'compact' | 'feature') | null; show?: { avatar?: boolean | null; name?: boolean | null; title?: boolean | null; bio?: ('none' | 'short' | 'full') | null; social?: boolean | null; email?: boolean | null; website?: boolean | null; postCount?: boolean | null; }; style?: { avatarSize?: ('sm' | 'md' | 'lg') | null; avatarShape?: ('circle' | 'square' | 'rounded') | null; bg?: ('none' | 'light' | 'dark' | 'accent') | null; border?: boolean | null; shadow?: boolean | null; /** * Linie zur Trennung vom Artikel-Inhalt */ divider?: boolean | null; }; /** * z.B. "Über den Autor", "Geschrieben von" (optional) */ label?: string | null; linkToProfile?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'author-bio-block'; } | { title?: string | null; source?: ('auto' | 'manual' | 'category' | 'tag' | 'latest' | 'popular' | 'author') | null; /** * Wählen Sie die anzuzeigenden Artikel */ posts?: (number | Post)[] | null; category?: (number | null) | Category; tag?: (number | null) | Tag; limit?: number | null; /** * Den Artikel, auf dem dieser Block ist, nicht anzeigen */ excludeCurrent?: boolean | null; layout?: ('grid' | 'list' | 'slider' | 'compact' | 'cards') | null; cols?: ('2' | '3' | '4') | null; show?: { image?: boolean | null; date?: boolean | null; author?: boolean | null; category?: boolean | null; excerpt?: boolean | null; readingTime?: boolean | null; tags?: boolean | null; }; style?: { imgRatio?: ('square' | '4-3' | '16-9' | '3-4') | null; rounded?: ('none' | 'sm' | 'md' | 'lg') | null; shadow?: boolean | null; hover?: ('none' | 'lift' | 'zoom' | 'overlay') | null; bg?: ('none' | 'light' | 'dark') | null; gap?: ('16' | '24' | '32') | null; }; showAllLink?: boolean | null; allLinkText?: string | null; /** * z.B. /blog oder /news */ allLinkUrl?: string | null; id?: string | null; blockName?: string | null; blockType: 'related-posts-block'; } | { /** * z.B. "Teilen:", "Artikel teilen" (optional) */ label?: string | null; platforms?: { facebook?: boolean | null; twitter?: boolean | null; linkedin?: boolean | null; xing?: boolean | null; whatsapp?: boolean | null; telegram?: boolean | null; email?: boolean | null; copy?: boolean | null; print?: boolean | null; pinterest?: boolean | null; reddit?: boolean | null; }; layout?: ('horizontal' | 'vertical' | 'floating' | 'sticky') | null; align?: ('left' | 'center' | 'right') | null; floatSide?: ('left' | 'right') | null; style?: { variant?: ('filled' | 'outline' | 'icon' | 'minimal') | null; size?: ('sm' | 'md' | 'lg') | null; shape?: ('square' | 'rounded' | 'circle' | 'pill') | null; colorScheme?: ('brand' | 'gray' | 'dark' | 'light' | 'accent') | null; gap?: ('0' | '4' | '8' | '12') | null; showLabel?: boolean | null; /** * Zeigt Anzahl der Shares (sofern verfügbar) */ showCount?: boolean | null; }; behavior?: { /** * Share-Dialoge in kleinem Popup statt neuem Tab */ openInPopup?: boolean | null; /** * Auf mobilen Geräten den System-Share-Dialog verwenden */ useNativeShare?: boolean | null; /** * Text der angezeigt wird nach dem Kopieren */ copyFeedback?: string | null; }; /** * Überschreibt automatische Werte (optional) */ content?: { /** * Leer lassen für automatischen Seitentitel */ customTitle?: string | null; /** * Leer lassen für automatische Meta-Description */ customDescription?: string | null; /** * Komma-getrennt, ohne # (z.B. "blog,news,tech") */ hashtags?: string | null; /** * Twitter-Handle ohne @ (z.B. "c2sgmbh") */ via?: string | null; }; id?: string | null; blockName?: string | null; blockType: 'share-buttons-block'; } | { title?: string | null; /** * Welche Überschriften-Ebenen einschließen? */ levels?: { h2?: boolean | null; h3?: boolean | null; h4?: boolean | null; h5?: boolean | null; h6?: boolean | null; }; layout?: ('list' | 'numbered' | 'inline' | 'sidebar' | 'dropdown') | null; sidebarPos?: ('left' | 'right') | null; behavior?: { smoothScroll?: boolean | null; /** * Markiert den aktuell sichtbaren Abschnitt */ highlightActive?: boolean | null; /** * Abstand zum oberen Rand nach dem Scrollen (für Fixed Headers) */ scrollOffset?: number | null; /** * User kann das Inhaltsverzeichnis ein-/ausklappen */ collapsible?: boolean | null; startCollapsed?: boolean | null; /** * Fortschrittsbalken oder Prozent-Anzeige */ showProgress?: boolean | null; progressStyle?: ('bar' | 'percent' | 'circle') | null; }; style?: { bg?: ('none' | 'light' | 'dark' | 'accent') | null; border?: boolean | null; borderSide?: ('all' | 'left' | 'top') | null; rounded?: ('none' | 'sm' | 'md' | 'lg') | null; shadow?: boolean | null; indent?: boolean | null; /** * Link-Symbol neben Einträgen */ showIcon?: boolean | null; fontSize?: ('sm' | 'base' | 'lg') | null; lineHeight?: ('tight' | 'normal' | 'relaxed') | null; }; /** * Inhaltsverzeichnis nur anzeigen, wenn mindestens X Einträge */ minItems?: number | null; /** * Maximale Anzahl angezeigter Einträge (0 = unbegrenzt) */ maxItems?: number | null; a11yLabel?: string | null; id?: string | null; blockName?: string | null; blockType: 'toc-block'; } | { title?: string | null; subtitle?: string | null; filters?: { showSearch?: boolean | null; searchPlaceholder?: string | null; showDepartment?: boolean | null; showSpecialization?: boolean | null; showLanguage?: boolean | null; showHierarchy?: boolean | null; filterLayout?: ('horizontal' | 'sidebar' | 'dropdown' | 'tabs') | null; filterStyle?: ('buttons' | 'select' | 'checkbox') | null; showResultCount?: boolean | null; showResetButton?: boolean | null; }; display?: { layout?: ('grid' | 'list' | 'compact') | null; columns?: ('2' | '3' | '4') | null; initialLimit?: number | null; loadMore?: ('button' | 'infinite' | 'pagination' | 'all') | null; loadMoreText?: string | null; }; card?: { showImage?: boolean | null; imageStyle?: ('circle' | 'rounded' | 'square') | null; showRole?: boolean | null; showDepartment?: boolean | null; showBio?: boolean | null; showContact?: boolean | null; showSocial?: boolean | null; showSpecializations?: boolean | null; showLanguages?: boolean | null; showVCard?: boolean | null; linkToProfile?: boolean | null; /** * z.B. "/team" ergibt "/team/max-mustermann" */ profileBasePath?: string | null; /** * Klick öffnet Modal statt Profilseite */ enableModal?: boolean | null; }; style?: { bg?: ('none' | 'light' | 'dark') | null; cardBg?: ('white' | 'transparent' | 'light') | null; cardShadow?: boolean | null; cardHover?: ('none' | 'lift' | 'shadow' | 'border') | null; gap?: ('16' | '24' | '32') | null; animation?: ('none' | 'fade' | 'slide' | 'scale') | null; }; emptyState?: { title?: string | null; message?: string | null; showResetButton?: boolean | null; }; id?: string | null; blockName?: string | null; blockType: 'team-filter-block'; } | { title?: string | null; subtitle?: string | null; source?: ('auto' | 'department' | 'manual') | null; /** * Oberstes Element (z.B. Geschäftsführer). Leer = automatisch ermitteln. */ rootMember?: (number | null) | Team; /** * Zeigt nur diese Abteilung */ department?: string | null; selectedMembers?: (number | Team)[] | null; /** * Wie viele Hierarchie-Ebenen anzeigen */ maxDepth?: number | null; layout?: ('tree' | 'tree-horizontal' | 'org' | 'radial' | 'layers') | null; direction?: ('top' | 'bottom' | 'left' | 'right') | null; node?: { style?: ('card' | 'compact' | 'avatar' | 'text') | null; showImage?: boolean | null; imageSize?: ('sm' | 'md' | 'lg') | null; imageShape?: ('circle' | 'rounded' | 'square') | null; showName?: boolean | null; showRole?: boolean | null; showDepartment?: boolean | null; showContact?: boolean | null; clickAction?: ('none' | 'modal' | 'link' | 'expand') | null; profileBasePath?: string | null; }; connectors?: { style?: ('straight' | 'angular' | 'curved' | 'dashed') | null; color?: ('gray' | 'dark' | 'accent' | 'gradient') | null; thickness?: ('1' | '2' | '3') | null; /** * Animierte Linien beim Laden */ animated?: boolean | null; }; levels?: { /** * Verschiedene Farben pro Hierarchie-Ebene */ colorByLevel?: boolean | null; /** * Höhere Ebenen größer darstellen */ sizeByLevel?: boolean | null; collapsible?: boolean | null; /** * Wie viele Ebenen anfangs sichtbar */ initiallyExpanded?: number | null; }; interaction?: { zoomable?: boolean | null; pannable?: boolean | null; /** * Kleine Übersichtskarte bei großen Organigrammen */ minimap?: boolean | null; search?: boolean | null; /** * Bei Hover Pfad zur Wurzel hervorheben */ highlight?: boolean | null; fullscreen?: boolean | null; /** * Als PNG oder PDF exportieren */ export?: boolean | null; }; style?: { bg?: ('none' | 'light' | 'white' | 'dark' | 'gradient') | null; nodeBg?: ('white' | 'light' | 'transparent' | 'accent') | null; nodeShadow?: boolean | null; nodeBorder?: boolean | null; spacing?: ('sm' | 'md' | 'lg') | null; minHeight?: ('auto' | '300' | '400' | '500' | '600' | 'full') | null; }; /** * Erklärt Farben und Symbole */ showLegend?: boolean | null; a11yLabel?: string | null; id?: string | null; blockName?: string | null; blockType: 'org-chart-block'; } )[] | null; seo?: { metaTitle?: string | null; metaDescription?: string | null; ogImage?: (number | null) | Media; }; status?: ('draft' | 'published') | null; publishedAt?: string | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "categories". */ export interface Category { id: number; tenant?: (number | null) | Tenant; name: string; slug: string; description?: string | null; updatedAt: string; createdAt: string; } /** * Kundenstimmen und Bewertungen * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "testimonials". */ export interface Testimonial { id: number; tenant?: (number | null) | Tenant; /** * Die Aussage des Kunden */ quote: string; author: string; /** * z.B. "Patient", "Geschäftsführer", "Marketing Manager" */ role?: string | null; company?: string | null; /** * Portrait-Foto (empfohlen: quadratisch, min. 200x200px) */ image?: (number | null) | Media; /** * Optional: Sterne-Bewertung */ rating?: number | null; /** * z.B. "Google Reviews", "Trustpilot", "Persönlich" */ source?: string | null; /** * URL zur Original-Bewertung (falls öffentlich) */ sourceUrl?: string | null; date?: string | null; /** * Inaktive Testimonials werden nicht angezeigt */ isActive?: boolean | null; /** * Niedrigere Zahlen werden zuerst angezeigt */ order?: number | null; updatedAt: string; createdAt: string; } /** * Häufig gestellte Fragen (FAQ) * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "faqs". */ export interface Faq { id: number; tenant?: (number | null) | Tenant; /** * Die Frage, die beantwortet wird */ question: string; /** * Die ausführliche Antwort auf die Frage */ answer: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; }; /** * Kurzfassung der Antwort als reiner Text für Schema.org Structured Data. Falls leer, wird die Rich-Text-Antwort verwendet. */ answerPlainText?: string | null; /** * Optionale Kategorie zur Gruppierung (z.B. "Allgemein", "Preise", "Lieferung") */ category?: string | null; /** * Optionaler Icon-Name (z.B. "question-circle", "info") */ icon?: string | null; /** * Andere FAQs die thematisch zusammenhängen */ relatedFAQs?: (number | Faq)[] | null; /** * Inaktive FAQs werden nicht angezeigt */ isActive?: boolean | null; /** * Hervorgehobene FAQs werden prominent angezeigt */ isFeatured?: boolean | null; /** * Niedrigere Zahlen werden zuerst angezeigt */ order?: number | null; updatedAt: string; createdAt: string; } /** * Team-Mitglieder und Mitarbeiter * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "team". */ export interface Team { id: number; tenant?: (number | null) | Tenant; /** * Vollständiger Name */ name: string; /** * URL-freundlicher Identifier (z.B. "max-mustermann") */ slug: string; /** * z.B. "Geschäftsführer", "Pflegedienstleitung", "Fotograf" */ role: string; /** * z.B. "Verwaltung", "Pflege", "Marketing" */ department?: string | null; /** * Portrait-Foto (empfohlen: quadratisch, min. 400x400px) */ image?: (number | null) | Media; /** * Kurze Beschreibung zur Person */ bio?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Ein-Satz-Beschreibung für kompakte Darstellung */ bioShort?: string | null; /** * Öffentliche Kontakt-E-Mail (optional) */ email?: string | null; /** * Öffentliche Telefonnummer (optional) */ phone?: string | null; showContactInfo?: boolean | null; socialLinks?: | { platform: 'linkedin' | 'xing' | 'twitter' | 'instagram' | 'facebook' | 'website' | 'github'; url: string; id?: string | null; }[] | null; /** * Ausbildungen, Zertifikate, Abschlüsse */ qualifications?: | { title: string; year?: number | null; institution?: string | null; id?: string | null; }[] | null; specializations?: | { title: string; id?: string | null; }[] | null; languages?: | { language: string; level?: ('native' | 'fluent' | 'good' | 'basic') | null; id?: string | null; }[] | null; /** * Optional: Verknüpfung mit Login-User (z.B. für Autoren-Zuordnung) */ linkedUser?: (number | null) | User; /** * Inaktive Mitglieder werden nicht angezeigt */ isActive?: boolean | null; /** * Für Startseiten-Anzeige oder besondere Hervorhebung */ isFeatured?: boolean | null; /** * Niedrigere Zahlen werden zuerst angezeigt */ order?: number | null; /** * Eintrittsdatum (optional) */ startDate?: string | null; /** * Direkter Vorgesetzter (für Organigramm) */ reportsTo?: (number | null) | Team; /** * Für Organigramm-Darstellung */ hierarchyLevel?: ('executive' | 'department_head' | 'team_lead' | 'employee' | 'trainee') | null; /** * Kontaktkarte zum Download anbieten */ allowVCard?: boolean | null; updatedAt: string; createdAt: string; } /** * Kategorien für Leistungen/Services * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "service-categories". */ export interface ServiceCategory { id: number; tenant?: (number | null) | Tenant; /** * z.B. "Pflege", "Beratung", "Schulung" */ name: string; /** * URL-freundlicher Name (z.B. "pflege", "beratung") */ slug: string; /** * Kurze Beschreibung der Kategorie */ description?: string | null; /** * Icon-Name (z.B. "heart", "users", "book") */ icon?: string | null; /** * Optionales Kategorie-Bild */ image?: (number | null) | Media; /** * Akzentfarbe für die Kategorie (z.B. "#3B82F6") */ color?: string | null; isActive?: boolean | null; /** * Niedrigere Zahlen werden zuerst angezeigt */ order?: number | null; updatedAt: string; createdAt: string; } /** * Leistungen und Dienstleistungen * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "services". */ export interface Service { id: number; tenant?: (number | null) | Tenant; /** * Name der Leistung (z.B. "Intensivpflege", "Beratungsgespräch") */ title: string; /** * URL-Pfad für Detail-Seite (z.B. "intensivpflege") */ slug: string; /** * Optionaler Untertitel oder Slogan */ subtitle?: string | null; /** * Kurze Beschreibung für Übersichtsseiten (1-2 Sätze) */ shortDescription: string; /** * Detaillierte Beschreibung für die Detail-Seite */ description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Icon-Name (z.B. "heart", "shield", "clock") */ icon?: string | null; /** * Alternativ: Icon als hochgeladenes Bild */ iconImage?: (number | null) | Media; /** * Bild für Karten und Header der Detail-Seite */ image?: (number | null) | Media; /** * Zusätzliche Bilder für die Detail-Seite */ gallery?: | { image: number | Media; caption?: string | null; id?: string | null; }[] | null; /** * Kategorie zur Gruppierung der Leistung */ category?: (number | null) | ServiceCategory; /** * Vorteile und Merkmale dieser Leistung */ features?: | { title: string; description?: string | null; /** * Optionales Icon für das Merkmal */ icon?: string | null; id?: string | null; }[] | null; pricingType?: ('on-request' | 'fixed' | 'from' | 'range' | 'hourly' | 'monthly' | 'free') | null; /** * Preis in Euro */ price?: number | null; /** * Maximaler Preis bei Preisspanne */ priceMax?: number | null; /** * z.B. "pro Stunde", "pro Monat", "pro Behandlung" */ priceUnit?: string | null; /** * Zusätzliche Info (z.B. "zzgl. MwSt.", "inkl. Anfahrt") */ priceNote?: string | null; /** * Ausführliche Preisinformationen für Detail-Seite */ pricingDetails?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; ctaText?: string | null; /** * Ziel-URL oder Pfad (z.B. "/kontakt", "#formular") */ ctaLink?: string | null; ctaStyle?: ('primary' | 'secondary' | 'outline') | null; secondaryCta?: { enabled?: boolean | null; text?: string | null; link?: string | null; }; /** * Andere Leistungen die thematisch passen */ relatedServices?: (number | Service)[] | null; /** * Ansprechpartner für diese Leistung */ teamMembers?: (number | Team)[] | null; /** * FAQs zu dieser Leistung */ faqs?: (number | Faq)[] | null; detailSections?: | { title: string; content: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; }; icon?: string | null; id?: string | null; }[] | null; /** * Optionales Zitat zur Leistung */ testimonialQuote?: string | null; testimonialAuthor?: string | null; /** * Titel für Suchmaschinen (falls anders als Titel) */ metaTitle?: string | null; /** * Beschreibung für Suchmaschinen */ metaDescription?: string | null; ogImage?: (number | null) | Media; /** * Inaktive Leistungen werden nicht angezeigt */ isActive?: boolean | null; /** * Für Startseiten-Anzeige oder besondere Hervorhebung */ isFeatured?: boolean | null; /** * Zeigt "Neu"-Badge an */ isNew?: boolean | null; /** * Niedrigere Zahlen werden zuerst angezeigt */ order?: number | null; updatedAt: string; createdAt: string; } /** * Blog-Autoren und Gastautoren * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "authors". */ export interface Author { id: number; tenant?: (number | null) | Tenant; /** * Anzeigename des Autors */ name: string; /** * URL-freundlicher Identifier (z.B. "max-mustermann") */ slug: string; /** * Avatar/Profilbild (empfohlen: quadratisch, min. 200x200px) */ avatar?: (number | null) | Media; /** * Ausführliche Biografie für Autorenseite */ bio?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Ein bis zwei Sätze für Anzeige unter Artikeln */ bioShort?: string | null; /** * z.B. "Senior Editor", "Gastautor", "Chefredakteur" */ title?: string | null; /** * Öffentliche Kontakt-E-Mail (optional) */ email?: string | null; /** * Persönliche Website oder Blog */ website?: string | null; social?: { /** * Twitter-Handle ohne @ (z.B. "maxmustermann") */ twitter?: string | null; /** * LinkedIn-Profil-URL oder Username */ linkedin?: string | null; /** * GitHub-Username */ github?: string | null; /** * Instagram-Handle ohne @ */ instagram?: string | null; }; /** * Optional: Verknüpfung mit Team-Eintrag */ linkedTeam?: (number | null) | Team; /** * Optional: Verknüpfung mit Login-User */ linkedUser?: (number | null) | User; /** * Inaktive Autoren erscheinen nicht in Listen */ isActive?: boolean | null; /** * Markierung für Gastautoren */ isGuest?: boolean | null; /** * Für besondere Darstellung auf Autorenseite */ featured?: boolean | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "posts". */ export interface Post { id: number; tenant?: (number | null) | Tenant; title: string; /** * URL-Pfad (z.B. "mein-beitrag" / "my-post") */ slug: string; /** * Art des Beitrags */ type: 'blog' | 'news' | 'press' | 'announcement'; /** * Auf Startseite/oben anzeigen */ isFeatured?: boolean | null; /** * Für Übersichten und SEO (max. 300 Zeichen). Wird automatisch aus Content generiert, falls leer. */ excerpt?: string | null; featuredImage?: (number | null) | Media; content: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; }; categories?: (number | Category)[] | null; /** * Schlagwörter für bessere Auffindbarkeit */ tags?: (number | Tag)[] | null; /** * Hauptautor des Beitrags */ author?: (number | null) | Author; /** * Weitere beteiligte Autoren */ coAuthors?: (number | Author)[] | null; /** * Freitext-Autor für ältere Beiträge ohne Autoren-Eintrag */ authorLegacy?: string | null; /** * Wird automatisch berechnet */ readingTime?: number | null; status?: ('draft' | 'published' | 'archived') | null; publishedAt?: string | null; seo?: { metaTitle?: string | null; metaDescription?: string | null; ogImage?: (number | null) | Media; }; updatedAt: string; createdAt: string; } /** * Schlagwörter für Blog-Posts * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "tags". */ export interface Tag { id: number; tenant?: (number | null) | Tenant; name: string; /** * URL-freundlicher Identifier (z.B. "javascript") */ slug: string; /** * Optionale Beschreibung für Tag-Archivseiten */ description?: string | null; /** * Optionale Farbe für Tag-Badge (z.B. "#3B82F6" oder "blue") */ color?: string | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "social-links". */ export interface SocialLink { id: number; tenant?: (number | null) | Tenant; platform: 'facebook' | 'x' | 'instagram' | 'youtube' | 'linkedin' | 'xing'; url: string; isActive?: boolean | null; updatedAt: string; createdAt: string; } /** * Newsletter-Abonnenten (DSGVO-konform) * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "newsletter-subscribers". */ export interface NewsletterSubscriber { id: number; tenant?: (number | null) | Tenant; email: string; firstName?: string | null; lastName?: string | null; status: 'pending' | 'confirmed' | 'unsubscribed' | 'bounced'; interests?: ('general' | 'blog' | 'products' | 'offers' | 'events')[] | null; /** * z.B. "Footer", "Popup", "Blog-Artikel", "Kontakt-Seite" */ source?: string | null; subscribedAt?: string | null; confirmedAt?: string | null; unsubscribedAt?: string | null; confirmationToken?: string | null; /** * DSGVO-Nachweis der Anmeldung */ ipAddress?: string | null; userAgent?: string | null; updatedAt: string; createdAt: string; } /** * Kategorien für Portfolio-Galerien (z.B. Hochzeit, Portrait, Landschaft) * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "portfolio-categories". */ export interface PortfolioCategory { id: number; tenant?: (number | null) | Tenant; /** * z.B. "Hochzeitsfotografie", "Portraits", "Landschaften" */ name: string; /** * URL-freundlicher Name (z.B. "hochzeit", "portrait") */ slug: string; /** * Kurzbeschreibung der Kategorie für SEO und Übersichten */ description?: string | null; /** * Repräsentatives Bild für die Kategorieübersicht */ coverImage?: (number | null) | Media; /** * Niedrigere Zahlen erscheinen zuerst */ order?: number | null; /** * Inaktive Kategorien werden nicht angezeigt */ isActive?: boolean | null; updatedAt: string; createdAt: string; } /** * Portfolio-Galerien mit Fotografien * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "portfolios". */ export interface Portfolio { id: number; tenant?: (number | null) | Tenant; /** * Name der Galerie / des Projekts */ title: string; /** * URL-freundlicher Name (z.B. "hochzeit-maria-thomas") */ slug: string; /** * Ausführliche Beschreibung des Projekts/Shootings */ description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Kurze Beschreibung für Übersichten und SEO (max. 300 Zeichen) */ excerpt?: string | null; /** * Hauptkategorie dieser Galerie */ category: number | PortfolioCategory; /** * Zusätzliche Schlagwörter für Filterung (z.B. "outdoor", "studio", "schwarz-weiß") */ tags?: string[] | null; /** * Hauptbild für Übersichten und Vorschauen */ coverImage: number | Media; /** * Alle Bilder dieser Galerie */ images: { image: number | Media; /** * Optionale Beschreibung für dieses Bild */ caption?: string | null; /** * Als Highlight-Bild markieren */ isHighlight?: boolean | null; id?: string | null; }[]; /** * Zusätzliche Informationen zum Shooting */ projectDetails?: { /** * Name des Kunden (optional, für Referenzen) */ client?: string | null; /** * Wo wurde das Shooting durchgeführt? */ location?: string | null; shootingDate?: string | null; /** * Kamera, Objektive etc. (optional) */ equipment?: string[] | null; }; /** * Veröffentlichungsstatus */ status: 'draft' | 'published' | 'archived'; /** * Auf der Startseite anzeigen */ isFeatured?: boolean | null; /** * Wann soll die Galerie veröffentlicht werden? */ publishedAt?: string | null; /** * Für manuelle Sortierung (niedrigere Zahlen zuerst) */ order?: number | null; seo?: { /** * Überschreibt den Standardtitel für Suchmaschinen */ metaTitle?: string | null; /** * Beschreibung für Suchmaschinen (max. 160 Zeichen) */ metaDescription?: string | null; /** * Bild für Social Media Shares (verwendet Cover-Bild wenn leer) */ ogImage?: (number | null) | Media; }; updatedAt: string; createdAt: string; } /** * Kategorien zur Gruppierung von Produkten * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "product-categories". */ export interface ProductCategory { id: number; tenant?: (number | null) | Tenant; name: string; /** * URL-freundlicher Name (z.B. "elektronik", "software") */ slug: string; /** * Kurze Beschreibung der Kategorie */ description?: string | null; image?: (number | null) | Media; /** * Icon-Name (z.B. Lucide-Icons: "package", "cpu", "code") */ icon?: string | null; /** * Optional: Für verschachtelte Kategorien */ parent?: (number | null) | ProductCategory; /** * Kleinere Zahlen erscheinen zuerst */ order?: number | null; /** * Inaktive Kategorien werden nicht angezeigt */ isActive?: boolean | null; /** * Suchmaschinenoptimierung für Kategorieseiten */ seo?: { metaTitle?: string | null; metaDescription?: string | null; }; updatedAt: string; createdAt: string; } /** * Produkte und Artikel * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "products". */ export interface Product { id: number; tenant?: (number | null) | Tenant; title: string; /** * URL-freundlicher Name (z.B. "premium-widget") */ slug: string; /** * Eindeutige Artikelnummer für interne Verwaltung */ sku?: string | null; /** * Kurze Beschreibung für Produktlisten (max. 200 Zeichen) */ shortDescription?: string | null; description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Hauptkategorie des Produkts */ category?: (number | null) | ProductCategory; /** * Zusätzliche Schlagworte für Filterung */ tags?: | { tag: string; id?: string | null; }[] | null; featuredImage: number | Media; /** * Zusätzliche Produktbilder */ gallery?: | { image: number | Media; caption?: string | null; id?: string | null; }[] | null; pricing?: { /** * Regulärer Preis in Euro */ price?: number | null; /** * Reduzierter Preis (optional) */ salePrice?: number | null; currency?: ('EUR' | 'USD' | 'CHF') | null; priceType?: ('fixed' | 'from' | 'on_request' | 'free') | null; /** * z.B. "zzgl. MwSt.", "pro Monat", "Einmalzahlung" */ priceNote?: string | null; }; /** * Technische Daten und Spezifikationen */ details?: { /** * Technische Daten als Schlüssel-Wert-Paare */ specifications?: | { key: string; value: string; id?: string | null; }[] | null; /** * Wichtigste Produktvorteile */ features?: | { feature: string; /** * Optional: Lucide-Icon Name */ icon?: string | null; id?: string | null; }[] | null; }; inventory?: { stockStatus?: ('in_stock' | 'low_stock' | 'out_of_stock' | 'on_order' | 'preorder') | null; /** * Aktuelle Stückzahl (optional) */ stockQuantity?: number | null; /** * z.B. "1-3 Werktage", "Sofort lieferbar" */ deliveryTime?: string | null; }; /** * Produktempfehlungen für Cross-Selling */ relatedProducts?: (number | Product)[] | null; /** * Produktdatenblätter, Anleitungen, etc. */ downloadFiles?: | { file: number | Media; title?: string | null; id?: string | null; }[] | null; /** * Handlungsaufforderung für das Produkt */ cta?: { type?: ('contact' | 'quote' | 'cart' | 'external' | 'download') | null; /** * z.B. "Jetzt anfragen", "Kaufen", "Herunterladen" */ buttonText?: string | null; /** * URL für externen Shop oder Bestellseite */ externalUrl?: string | null; }; seo?: { /** * Überschreibt den Produktnamen für Suchmaschinen */ metaTitle?: string | null; /** * Kurze Beschreibung für Suchergebnisse (max. 160 Zeichen) */ metaDescription?: string | null; /** * Bild für Social Media Shares (1200x630px empfohlen) */ ogImage?: (number | null) | Media; }; status?: ('draft' | 'published' | 'archived') | null; /** * Auf Startseite oder in Highlights anzeigen */ isFeatured?: boolean | null; /** * "Neu"-Badge anzeigen */ isNew?: boolean | null; /** * Kleinere Zahlen erscheinen zuerst */ order?: number | null; publishedAt?: string | null; updatedAt: string; createdAt: string; } /** * Chronologische Darstellungen für Unternehmensgeschichte, Meilensteine, etc. * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "timelines". */ export interface Timeline { id: number; tenant?: (number | null) | Tenant; /** * Interner Name zur Identifikation (z.B. "Unternehmensgeschichte") */ name: string; /** * URL-freundlicher Identifier (z.B. "company-history") */ slug: string; /** * Optionale Beschreibung der Timeline */ description?: string | null; type: 'history' | 'milestones' | 'releases' | 'career' | 'events' | 'process'; status: 'draft' | 'published' | 'archived'; displayOptions?: { layout?: ('vertical' | 'alternating' | 'horizontal' | 'compact') | null; sortOrder?: ('desc' | 'asc') | null; showConnector?: boolean | null; showImages?: boolean | null; groupByYear?: boolean | null; markerStyle?: ('dot' | 'number' | 'icon' | 'date') | null; colorScheme?: ('primary' | 'secondary' | 'neutral' | 'colorful') | null; }; /** * Die einzelnen Einträge der Timeline */ events: { dateType?: ('year' | 'monthYear' | 'fullDate' | 'range' | 'custom') | null; year?: number | null; month?: ('1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12') | null; day?: number | null; endYear?: number | null; endMonth?: ('1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12') | null; ongoing?: boolean | null; /** * z.B. "Frühjahr 2024", "Q1 2023", "1990er Jahre" */ customDate?: string | null; title: string; /** * Optional: z.B. Rolle, Position, Ort */ subtitle?: string | null; description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Für kompakte Ansichten (max. 200 Zeichen empfohlen) */ shortDescription?: string | null; image?: (number | null) | Media; /** * Zusätzliche Bilder für dieses Ereignis */ gallery?: | { image: number | Media; caption?: string | null; id?: string | null; }[] | null; /** * Zur Filterung und farblichen Unterscheidung */ category?: | ('milestone' | 'founding' | 'product' | 'team' | 'award' | 'partnership' | 'expansion' | 'technology' | 'other') | null; /** * Highlights werden visuell hervorgehoben */ importance?: ('highlight' | 'normal' | 'minor') | null; /** * Explizite Nummerierung (optional, sonst wird Reihenfolge verwendet) */ stepNumber?: number | null; /** * z.B. "2-3 Tage", "1 Woche", "30 Minuten" */ duration?: string | null; /** * Person oder Rolle (z.B. "HR-Team", "Projektleiter") */ responsible?: string | null; /** * Wer muss in diesem Schritt aktiv werden? */ actionRequired?: ('customer' | 'internal' | 'both' | 'automatic') | null; /** * Was wird in diesem Schritt erstellt oder benötigt? */ deliverables?: | { name: string; type?: ('output' | 'input' | 'document') | null; id?: string | null; }[] | null; /** * Emoji oder Lucide Icon-Name (z.B. "rocket", "award", "users") */ icon?: string | null; /** * Überschreibt die Kategorie-Farbe (z.B. "#FF5733" oder "blue") */ color?: string | null; links?: | { label: string; url: string; type?: ('internal' | 'external' | 'download') | null; id?: string | null; }[] | null; /** * Für spezielle Anwendungsfälle (z.B. Statistiken, Kennzahlen) */ metadata?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; id?: string | null; }[]; seo?: { metaTitle?: string | null; metaDescription?: string | null; }; updatedAt: string; createdAt: string; } /** * Komplexe Prozesse und Workflows mit Phasen, Abhängigkeiten und Status-Tracking * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "workflows". */ export interface Workflow { id: number; tenant?: (number | null) | Tenant; /** * Name des Workflows (z.B. "Projektablauf Webentwicklung") */ name: string; /** * URL-freundlicher Identifier */ slug: string; /** * Ausführliche Beschreibung des Workflows */ description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Kurze Zusammenfassung für Übersichten */ shortDescription?: string | null; type: 'project' | 'business' | 'approval' | 'onboarding' | 'support' | 'development' | 'marketing' | 'other'; status: 'draft' | 'published' | 'archived'; /** * Optionales Bild für den Workflow */ image?: (number | null) | Media; properties?: { /** * z.B. "4-6 Wochen", "3 Monate" */ estimatedDuration?: string | null; complexity?: ('simple' | 'medium' | 'complex' | 'very_complex') | null; /** * Kann der Workflow wiederholt durchlaufen werden? */ isIterative?: boolean | null; /** * Können mehrere Phasen gleichzeitig aktiv sein? */ allowParallelPhases?: boolean | null; }; displayOptions?: { layout?: ('vertical' | 'horizontal' | 'flowchart' | 'kanban' | 'gantt') | null; showPhaseNumbers?: boolean | null; showStepNumbers?: boolean | null; showDurations?: boolean | null; showResponsible?: boolean | null; /** * Zeigt Fortschrittsbalken basierend auf abgeschlossenen Schritten */ showProgress?: boolean | null; colorScheme?: ('phase' | 'status' | 'priority' | 'brand') | null; }; /** * Hauptabschnitte des Workflows */ phases: { name: string; description?: string | null; /** * Lucide Icon-Name (z.B. "rocket", "settings", "check-circle") */ icon?: string | null; /** * HEX-Farbe (z.B. "#3B82F6") oder Tailwind-Klasse */ color?: string | null; /** * z.B. "1 Woche", "2-3 Tage" */ estimatedDuration?: string | null; /** * Rolle oder Person (z.B. "Projektleiter", "Design-Team") */ responsible?: string | null; /** * Einzelne Schritte in dieser Phase */ steps: { name: string; description?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; /** * Für kompakte Ansichten */ shortDescription?: string | null; stepType?: ('task' | 'decision' | 'milestone' | 'approval' | 'wait' | 'automatic') | null; priority?: ('critical' | 'high' | 'normal' | 'low' | 'optional') | null; /** * z.B. "2 Stunden", "1 Tag" */ estimatedDuration?: string | null; responsible?: string | null; icon?: string | null; /** * Welche Schritte müssen vorher abgeschlossen sein? */ dependencies?: { /** * IDs oder Namen der Vorgänger-Schritte (komma-separiert). Leer = vorheriger Schritt */ dependsOnSteps?: string | null; canRunParallel?: boolean | null; /** * Muss abgeschlossen sein, bevor der nächste Schritt beginnt */ isBlocking?: boolean | null; }; /** * Für Entscheidungsschritte: Welche Wege gibt es? */ conditions?: | { /** * z.B. "Wenn genehmigt", "Bei Budget > 10.000€" */ condition: string; /** * ID oder Name des nächsten Schritts */ nextStep?: string | null; /** * z.B. "green" für positiv, "red" für negativ */ color?: string | null; id?: string | null; }[] | null; /** * To-Do-Punkte für diesen Schritt */ checklist?: | { item: string; isRequired?: boolean | null; id?: string | null; }[] | null; resources?: | { name: string; type?: ('document' | 'template' | 'link' | 'tool' | 'video') | null; file?: (number | null) | Media; url?: string | null; description?: string | null; id?: string | null; }[] | null; /** * Was wird in diesem Schritt produziert? */ outputs?: | { name: string; description?: string | null; id?: string | null; }[] | null; /** * Für spezielle Anwendungsfälle */ metadata?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; id?: string | null; }[]; /** * Was wird am Ende dieser Phase abgeliefert? */ deliverables?: | { name: string; description?: string | null; id?: string | null; }[] | null; id?: string | null; }[]; /** * Ressourcen, die für den gesamten Workflow relevant sind */ globalResources?: | { name: string; type?: ('document' | 'template' | 'checklist' | 'link' | 'tool') | null; file?: (number | null) | Media; url?: string | null; description?: string | null; id?: string | null; }[] | null; seo?: { metaTitle?: string | null; metaDescription?: string | null; }; updatedAt: string; createdAt: string; } /** * Cookie-Banner Konfiguration pro Tenant * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "cookie-configurations". */ export interface CookieConfiguration { id: number; /** * Jeder Tenant kann nur eine Konfiguration haben */ tenant: number | Tenant; /** * Interner Titel zur Identifikation */ title: string; /** * Bei inhaltlichen Änderungen erhöhen → erzwingt erneuten Consent bei allen Nutzern */ revision: number; /** * Welche Kategorien sollen im Banner angezeigt werden? */ enabledCategories: ('necessary' | 'functional' | 'analytics' | 'marketing')[]; translations?: { de?: { bannerTitle?: string | null; bannerDescription?: string | null; acceptAllButton?: string | null; acceptNecessaryButton?: string | null; settingsButton?: string | null; saveButton?: string | null; privacyPolicyUrl?: string | null; categoryLabels?: { necessary?: { title?: string | null; description?: string | null; }; functional?: { title?: string | null; description?: string | null; }; analytics?: { title?: string | null; description?: string | null; }; marketing?: { title?: string | null; description?: string | null; }; }; }; }; styling?: { position?: ('bottom' | 'top' | 'middle') | null; theme?: ('dark' | 'light' | 'auto') | null; }; updatedAt: string; createdAt: string; } /** * Cookie-Dokumentation für die Datenschutzerklärung * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "cookie-inventory". */ export interface CookieInventory { id: number; tenant: number | Tenant; /** * Technischer Name des Cookies (z.B. "_ga") */ name: string; /** * Anbieter (z.B. "Google LLC") */ provider: string; category: 'necessary' | 'functional' | 'analytics' | 'marketing'; /** * Speicherdauer (z.B. "2 Jahre") */ duration: string; /** * Verständliche Erklärung für Endnutzer */ description: string; isActive?: boolean | null; updatedAt: string; createdAt: string; } /** * WORM Audit-Trail für Cookie-Einwilligungen (unveränderbar) * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "consent-logs". */ export interface ConsentLog { id: number; /** * Server-generierte eindeutige ID */ consentId: string; /** * Client-seitige Referenz (Cookie-UUID) für Traceability */ clientRef?: string | null; tenant: number | Tenant; /** * Akzeptierte Kategorien zum Zeitpunkt der Einwilligung */ categories: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; /** * Version der Konfiguration zum Zeitpunkt der Zustimmung */ revision: number; /** * Browser/Device (für Forensik und Bot-Erkennung) */ userAgent?: string | null; /** * HMAC-Hash der IP (täglich rotierender, tenant-spezifischer Salt) */ anonymizedIp?: string | null; /** * Automatische Löschung nach 3 Jahren */ expiresAt: string; updatedAt: string; createdAt: string; } /** * Externe Datenschutzerklärung Konfiguration (Alfright) * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "privacy-policy-settings". */ export interface PrivacyPolicySetting { id: number; /** * Jeder Tenant kann nur eine Konfiguration haben */ tenant: number | Tenant; /** * Interner Titel zur Identifikation */ title: string; /** * Quelle der Datenschutzerklärung */ provider: 'alfright' | 'internal'; /** * Einstellungen für die Alfright Integration */ alfright?: { /** * Alfright Tenant-ID (aus dem iframe-Code) */ tenantId: string; /** * Alfright API-Key / Dokument-ID (aus dem iframe-Code, z.B. "9f315103c43245bcb0806dd56c2be757") */ apiKey: string; /** * Sprache der Datenschutzerklärung */ language: 'de-de' | 'de-at' | 'de-ch' | 'en-gb' | 'en-us'; /** * Höhe des iframes in Pixeln (empfohlen: 3000-5000) */ iframeHeight: number; }; /** * Farben und Schriften an das Website-Design anpassen */ styling?: { /** * Farbe der Überschriften (Hex-Code, z.B. #ca8a04 für Gold) */ headerColor: string; /** * Schriftart der Überschriften */ headerFont: string; /** * Schriftgröße der Hauptüberschriften */ headerSize: string; /** * Schriftgröße der Unterüberschriften */ subheaderSize: string; /** * Textfarbe (Hex-Code, z.B. #f3f4f6 für hellen Text) */ fontColor: string; /** * Schriftart für Fließtext */ textFont: string; /** * Schriftgröße für Fließtext */ textSize: string; /** * Linkfarbe (Hex-Code) */ linkColor: string; /** * Hintergrundfarbe (Hex-Code, z.B. #111827 für Dark Theme) */ backgroundColor: string; }; /** * Cookie-Tabelle aus CookieInventory unterhalb der Datenschutzerklärung anzeigen */ showCookieTable?: boolean | null; /** * Überschrift für die Cookie-Tabelle */ cookieTableTitle?: string | null; /** * Einleitungstext für die Cookie-Tabelle */ cookieTableDescription?: string | null; seo?: { /** * Meta-Titel für die Seite */ metaTitle?: string | null; /** * Meta-Beschreibung für Suchmaschinen */ metaDescription?: string | null; }; updatedAt: string; createdAt: string; } /** * Protokoll aller gesendeten E-Mails * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "email-logs". */ export interface EmailLog { id: number; tenant: number | Tenant; to: string; from: string; subject: string; status: 'pending' | 'sent' | 'failed'; /** * SMTP Message-ID bei erfolgreichem Versand */ messageId?: string | null; error?: string | null; source: 'manual' | 'form' | 'system' | 'newsletter'; /** * Zusätzliche Kontextinformationen (z.B. Form-ID) */ metadata?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; updatedAt: string; createdAt: string; } /** * Protokoll wichtiger System-Aktionen * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "audit-logs". */ export interface AuditLog { id: number; action: | 'login_success' | 'login_failed' | 'logout' | 'password_changed' | 'password_reset' | 'create' | 'update' | 'delete' | 'config_changed' | 'email_failed' | 'access_denied' | 'rate_limit'; severity: 'info' | 'warning' | 'error' | 'critical'; entityType?: ('users' | 'tenants' | 'pages' | 'posts' | 'media' | 'forms' | 'email' | 'global' | 'system') | null; /** * ID des betroffenen Dokuments */ entityId?: string | null; /** * Benutzer, der die Aktion ausgeführt hat */ user?: (number | null) | User; /** * E-Mail zum Zeitpunkt der Aktion (für gelöschte User) */ userEmail?: string | null; /** * Betroffener Tenant (falls zutreffend) */ tenant?: (number | null) | Tenant; ipAddress?: string | null; userAgent?: string | null; /** * Detaillierte Beschreibung der Aktion */ description?: string | null; /** * Zustand vor der Änderung */ previousValue?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; /** * Zustand nach der Änderung */ newValue?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; /** * Weitere Kontextinformationen */ metadata?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "forms". */ export interface Form { id: number; title: string; fields?: | ( | { name: string; label?: string | null; width?: number | null; required?: boolean | null; defaultValue?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'checkbox'; } | { name: string; label?: string | null; width?: number | null; required?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'email'; } | { message?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; id?: string | null; blockName?: string | null; blockType: 'message'; } | { name: string; label?: string | null; width?: number | null; defaultValue?: number | null; required?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'number'; } | { name: string; label?: string | null; width?: number | null; defaultValue?: string | null; placeholder?: string | null; options?: | { label: string; value: string; id?: string | null; }[] | null; required?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'select'; } | { name: string; label?: string | null; width?: number | null; defaultValue?: string | null; required?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'text'; } | { name: string; label?: string | null; width?: number | null; defaultValue?: string | null; required?: boolean | null; id?: string | null; blockName?: string | null; blockType: 'textarea'; } )[] | null; submitButtonLabel?: string | null; /** * Choose whether to display an on-page message or redirect to a different page after they submit the form. */ confirmationType?: ('message' | 'redirect') | null; confirmationMessage?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; redirect?: { type?: ('reference' | 'custom') | null; reference?: { relationTo: 'pages'; value: number | Page; } | null; url?: string | null; }; /** * Send custom emails when the form submits. Use comma separated lists to send the same email to multiple recipients. To reference a value from this form, wrap that field's name with double curly brackets, i.e. {{firstName}}. You can use a wildcard {{*}} to output all data and {{*:table}} to format it as an HTML table in the email. */ emails?: | { emailTo?: string | null; cc?: string | null; bcc?: string | null; replyTo?: string | null; emailFrom?: string | null; subject: string; /** * Enter the message that should be sent in this email. */ message?: { root: { type: string; children: { type: any; version: number; [k: string]: unknown; }[]; direction: ('ltr' | 'rtl') | null; format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; indent: number; version: number; }; [k: string]: unknown; } | null; id?: string | null; }[] | null; updatedAt: string; createdAt: string; } /** * Eingegangene Formular-Einsendungen * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "form-submissions". */ export interface FormSubmission { id: number; form: number | Form; submissionData?: | { field: string; value: string; id?: string | null; }[] | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "redirects". */ export interface Redirect { id: number; from: string; to?: { type?: ('reference' | 'custom') | null; reference?: { relationTo: 'pages'; value: number | Page; } | null; url?: string | null; }; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv". */ export interface PayloadKv { id: number; key: string; data: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents". */ export interface PayloadLockedDocument { id: number; document?: | ({ relationTo: 'users'; value: number | User; } | null) | ({ relationTo: 'media'; value: number | Media; } | null) | ({ relationTo: 'tenants'; value: number | Tenant; } | null) | ({ relationTo: 'pages'; value: number | Page; } | null) | ({ relationTo: 'posts'; value: number | Post; } | null) | ({ relationTo: 'categories'; value: number | Category; } | null) | ({ relationTo: 'social-links'; value: number | SocialLink; } | null) | ({ relationTo: 'testimonials'; value: number | Testimonial; } | null) | ({ relationTo: 'faqs'; value: number | Faq; } | null) | ({ relationTo: 'team'; value: number | Team; } | null) | ({ relationTo: 'service-categories'; value: number | ServiceCategory; } | null) | ({ relationTo: 'services'; value: number | Service; } | null) | ({ relationTo: 'newsletter-subscribers'; value: number | NewsletterSubscriber; } | null) | ({ relationTo: 'portfolio-categories'; value: number | PortfolioCategory; } | null) | ({ relationTo: 'portfolios'; value: number | Portfolio; } | null) | ({ relationTo: 'product-categories'; value: number | ProductCategory; } | null) | ({ relationTo: 'products'; value: number | Product; } | null) | ({ relationTo: 'timelines'; value: number | Timeline; } | null) | ({ relationTo: 'workflows'; value: number | Workflow; } | null) | ({ relationTo: 'tags'; value: number | Tag; } | null) | ({ relationTo: 'authors'; value: number | Author; } | null) | ({ relationTo: 'cookie-configurations'; value: number | CookieConfiguration; } | null) | ({ relationTo: 'cookie-inventory'; value: number | CookieInventory; } | null) | ({ relationTo: 'consent-logs'; value: number | ConsentLog; } | null) | ({ relationTo: 'privacy-policy-settings'; value: number | PrivacyPolicySetting; } | null) | ({ relationTo: 'email-logs'; value: number | EmailLog; } | null) | ({ relationTo: 'audit-logs'; value: number | AuditLog; } | null) | ({ relationTo: 'forms'; value: number | Form; } | null) | ({ relationTo: 'form-submissions'; value: number | FormSubmission; } | null) | ({ relationTo: 'redirects'; value: number | Redirect; } | null); globalSlug?: string | null; user: { relationTo: 'users'; value: number | User; }; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-preferences". */ export interface PayloadPreference { id: number; user: { relationTo: 'users'; value: number | User; }; key?: string | null; value?: | { [k: string]: unknown; } | unknown[] | string | number | boolean | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-migrations". */ export interface PayloadMigration { id: number; name?: string | null; batch?: number | null; updatedAt: string; createdAt: string; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "users_select". */ export interface UsersSelect { isSuperAdmin?: T; tenants?: | T | { tenant?: T; id?: T; }; updatedAt?: T; createdAt?: T; email?: T; resetPasswordToken?: T; resetPasswordExpiration?: T; salt?: T; hash?: T; loginAttempts?: T; lockUntil?: T; sessions?: | T | { id?: T; createdAt?: T; expiresAt?: T; }; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "media_select". */ export interface MediaSelect { tenant?: T; alt?: T; caption?: T; credit?: T; tags?: T; updatedAt?: T; createdAt?: T; url?: T; thumbnailURL?: T; filename?: T; mimeType?: T; filesize?: T; width?: T; height?: T; focalX?: T; focalY?: T; sizes?: | T | { thumbnail?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; small?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; medium?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; large?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; xlarge?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; '2k'?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; og?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; medium_avif?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; large_avif?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; xlarge_avif?: | T | { url?: T; width?: T; height?: T; mimeType?: T; filesize?: T; filename?: T; }; }; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "tenants_select". */ export interface TenantsSelect { name?: T; slug?: T; domains?: | T | { domain?: T; id?: T; }; email?: | T | { fromAddress?: T; fromName?: T; replyTo?: T; useCustomSmtp?: T; smtp?: | T | { host?: T; port?: T; secure?: T; user?: T; pass?: T; }; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "pages_select". */ export interface PagesSelect { tenant?: T; title?: T; slug?: T; hero?: | T | { image?: T; headline?: T; subline?: T; }; layout?: | T | { 'hero-block'?: | T | { backgroundImage?: T; headline?: T; subline?: T; alignment?: T; overlay?: T; cta?: | T | { text?: T; link?: T; style?: T; }; id?: T; blockName?: T; }; 'hero-slider-block'?: | T | { slides?: | T | { backgroundImage?: T; mobileBackgroundImage?: T; headline?: T; subline?: T; textAlignment?: T; verticalPosition?: T; overlay?: | T | { enabled?: T; color?: T; opacity?: T; }; primaryCta?: | T | { enabled?: T; text?: T; link?: T; style?: T; openInNewTab?: T; }; secondaryCta?: | T | { enabled?: T; text?: T; link?: T; style?: T; openInNewTab?: T; }; textColor?: T; id?: T; }; settings?: | T | { animation?: T; animationDuration?: T; autoplay?: | T | { enabled?: T; interval?: T; pauseOnHover?: T; pauseOnInteraction?: T; }; loop?: T; }; navigation?: | T | { arrows?: | T | { enabled?: T; style?: T; position?: T; hideOnMobile?: T; }; dots?: | T | { enabled?: T; style?: T; position?: T; color?: T; }; swipe?: T; keyboard?: T; }; layout?: | T | { height?: T; mobileHeight?: T; contentWidth?: T; fullWidth?: T; }; accessibility?: | T | { ariaLabel?: T; reducedMotion?: T; }; id?: T; blockName?: T; }; 'image-slider-block'?: | T | { title?: T; description?: T; images?: | T | { image?: T; caption?: T; alt?: T; link?: T; id?: T; }; layout?: T; grid?: | T | { cols?: T; gap?: T; aspectRatio?: T; }; slider?: | T | { effect?: T; speed?: T; perView?: T; gap?: T; auto?: T; delay?: T; pauseHover?: T; loop?: T; centered?: T; }; nav?: | T | { arrows?: T; arrowStyle?: T; dots?: T; dotStyle?: T; counter?: T; swipe?: T; keys?: T; }; lightbox?: | T | { enabled?: T; zoom?: T; download?: T; share?: T; captions?: T; thumbs?: T; bg?: T; }; style?: | T | { height?: T; imgFit?: T; rounded?: T; shadow?: T; border?: T; hoverEffect?: T; captionPos?: T; bg?: T; padding?: T; }; a11y?: | T | { label?: T; reducedMotion?: T; }; id?: T; blockName?: T; }; 'text-block'?: | T | { content?: T; width?: T; id?: T; blockName?: T; }; 'image-text-block'?: | T | { image?: T; imagePosition?: T; headline?: T; content?: T; cta?: | T | { text?: T; link?: T; }; id?: T; blockName?: T; }; 'card-grid-block'?: | T | { headline?: T; cards?: | T | { image?: T; title?: T; description?: T; link?: T; linkText?: T; id?: T; }; columns?: T; id?: T; blockName?: T; }; 'quote-block'?: | T | { quote?: T; author?: T; role?: T; image?: T; style?: T; id?: T; blockName?: T; }; 'cta-block'?: | T | { headline?: T; description?: T; buttons?: | T | { text?: T; link?: T; style?: T; id?: T; }; backgroundColor?: T; id?: T; blockName?: T; }; 'contact-form-block'?: | T | { headline?: T; description?: T; recipientEmail?: T; showPhone?: T; showAddress?: T; showSocials?: T; id?: T; blockName?: T; }; 'timeline-block'?: | T | { title?: T; subtitle?: T; layout?: T; showConnector?: T; markerStyle?: T; items?: | T | { year?: T; title?: T; description?: T; icon?: T; image?: T; link?: | T | { label?: T; href?: T; }; id?: T; }; backgroundColor?: T; id?: T; blockName?: T; }; 'divider-block'?: | T | { style?: T; spacing?: T; id?: T; blockName?: T; }; 'video-block'?: | T | { videoUrl?: T; caption?: T; aspectRatio?: T; id?: T; blockName?: T; }; 'posts-list-block'?: | T | { title?: T; subtitle?: T; postType?: T; layout?: T; columns?: T; limit?: T; showFeaturedOnly?: T; filterByCategory?: T; showExcerpt?: T; showDate?: T; showAuthor?: T; showCategory?: T; showPagination?: T; showReadMore?: T; readMoreLabel?: T; readMoreLink?: T; backgroundColor?: T; id?: T; blockName?: T; }; 'testimonials-block'?: | T | { title?: T; subtitle?: T; layout?: T; columns?: T; displayMode?: T; selectedTestimonials?: T; limit?: T; displayOptions?: | T | { showRating?: T; showImage?: T; showCompany?: T; showSource?: T; showDate?: T; truncateText?: T; maxLength?: T; }; slider?: | T | { effect?: T; speed?: T; perView?: T; gap?: T; auto?: T; delay?: T; hoverPause?: T; loop?: T; centered?: T; }; nav?: | T | { arrows?: T; arrowStyle?: T; arrowPos?: T; dots?: T; dotStyle?: T; dotPos?: T; swipe?: T; keys?: T; }; style?: | T | { bg?: T; card?: T; quote?: T; imgPos?: T; imgSize?: T; align?: T; spacing?: T; }; a11y?: | T | { label?: T; reducedMotion?: T; }; id?: T; blockName?: T; }; 'newsletter-block'?: | T | { title?: T; subtitle?: T; layout?: T; image?: T; imagePosition?: T; collectName?: T; showInterests?: T; availableInterests?: T; buttonText?: T; placeholderEmail?: T; successMessage?: T; errorMessage?: T; privacyText?: T; privacyLink?: T; source?: T; backgroundColor?: T; id?: T; blockName?: T; }; 'process-steps-block'?: | T | { title?: T; subtitle?: T; layout?: T; showNumbers?: T; showIcons?: T; steps?: | T | { title?: T; description?: T; icon?: T; image?: T; id?: T; }; cta?: | T | { show?: T; label?: T; href?: T; variant?: T; }; backgroundColor?: T; id?: T; blockName?: T; }; 'faq-block'?: | T | { title?: T; subtitle?: T; sourceMode?: T; displayMode?: T; category?: T; selectedFAQs?: T; limit?: T; inlineFAQs?: | T | { question?: T; answer?: T; answerPlainText?: T; id?: T; }; layout?: T; columns?: T; expandFirst?: T; allowMultipleOpen?: T; showCategory?: T; showIcon?: T; groupByCategory?: T; enableSchemaOrg?: T; backgroundColor?: T; showContactCTA?: T; contactCTAText?: T; contactCTALink?: T; contactCTAButtonText?: T; id?: T; blockName?: T; }; 'team-block'?: | T | { title?: T; subtitle?: T; introduction?: T; displayMode?: T; department?: T; selectedMembers?: T; limit?: T; layout?: T; columns?: T; showRole?: T; showDepartment?: T; showBio?: T; showContact?: T; showSocialLinks?: T; showQualifications?: T; showSpecializations?: T; showLanguages?: T; groupByDepartment?: T; autoplay?: T; autoplaySpeed?: T; enableDetailView?: T; imageStyle?: T; backgroundColor?: T; showCTA?: T; ctaText?: T; ctaLink?: T; id?: T; blockName?: T; }; 'services-block'?: | T | { title?: T; subtitle?: T; introduction?: T; displayMode?: T; category?: T; selectedServices?: T; limit?: T; layout?: T; columns?: T; featuredCount?: T; tabsStyle?: T; showAllTab?: T; expandFirst?: T; allowMultipleOpen?: T; autoplay?: T; autoplaySpeed?: T; slidesPerView?: T; showImage?: T; showIcon?: T; showDescription?: T; showCategory?: T; showPricing?: T; showFeatures?: T; featuresLimit?: T; showCTA?: T; showNewBadge?: T; groupByCategory?: T; linkToDetail?: T; detailLinkText?: T; servicesBasePath?: T; cardStyle?: T; backgroundColor?: T; showSectionCTA?: T; sectionCTAText?: T; sectionCTALink?: T; id?: T; blockName?: T; }; 'author-bio-block'?: | T | { source?: T; authors?: T; showCoAuthors?: T; layout?: T; show?: | T | { avatar?: T; name?: T; title?: T; bio?: T; social?: T; email?: T; website?: T; postCount?: T; }; style?: | T | { avatarSize?: T; avatarShape?: T; bg?: T; border?: T; shadow?: T; divider?: T; }; label?: T; linkToProfile?: T; id?: T; blockName?: T; }; 'related-posts-block'?: | T | { title?: T; source?: T; posts?: T; category?: T; tag?: T; limit?: T; excludeCurrent?: T; layout?: T; cols?: T; show?: | T | { image?: T; date?: T; author?: T; category?: T; excerpt?: T; readingTime?: T; tags?: T; }; style?: | T | { imgRatio?: T; rounded?: T; shadow?: T; hover?: T; bg?: T; gap?: T; }; showAllLink?: T; allLinkText?: T; allLinkUrl?: T; id?: T; blockName?: T; }; 'share-buttons-block'?: | T | { label?: T; platforms?: | T | { facebook?: T; twitter?: T; linkedin?: T; xing?: T; whatsapp?: T; telegram?: T; email?: T; copy?: T; print?: T; pinterest?: T; reddit?: T; }; layout?: T; align?: T; floatSide?: T; style?: | T | { variant?: T; size?: T; shape?: T; colorScheme?: T; gap?: T; showLabel?: T; showCount?: T; }; behavior?: | T | { openInPopup?: T; useNativeShare?: T; copyFeedback?: T; }; content?: | T | { customTitle?: T; customDescription?: T; hashtags?: T; via?: T; }; id?: T; blockName?: T; }; 'toc-block'?: | T | { title?: T; levels?: | T | { h2?: T; h3?: T; h4?: T; h5?: T; h6?: T; }; layout?: T; sidebarPos?: T; behavior?: | T | { smoothScroll?: T; highlightActive?: T; scrollOffset?: T; collapsible?: T; startCollapsed?: T; showProgress?: T; progressStyle?: T; }; style?: | T | { bg?: T; border?: T; borderSide?: T; rounded?: T; shadow?: T; indent?: T; showIcon?: T; fontSize?: T; lineHeight?: T; }; minItems?: T; maxItems?: T; a11yLabel?: T; id?: T; blockName?: T; }; 'team-filter-block'?: | T | { title?: T; subtitle?: T; filters?: | T | { showSearch?: T; searchPlaceholder?: T; showDepartment?: T; showSpecialization?: T; showLanguage?: T; showHierarchy?: T; filterLayout?: T; filterStyle?: T; showResultCount?: T; showResetButton?: T; }; display?: | T | { layout?: T; columns?: T; initialLimit?: T; loadMore?: T; loadMoreText?: T; }; card?: | T | { showImage?: T; imageStyle?: T; showRole?: T; showDepartment?: T; showBio?: T; showContact?: T; showSocial?: T; showSpecializations?: T; showLanguages?: T; showVCard?: T; linkToProfile?: T; profileBasePath?: T; enableModal?: T; }; style?: | T | { bg?: T; cardBg?: T; cardShadow?: T; cardHover?: T; gap?: T; animation?: T; }; emptyState?: | T | { title?: T; message?: T; showResetButton?: T; }; id?: T; blockName?: T; }; 'org-chart-block'?: | T | { title?: T; subtitle?: T; source?: T; rootMember?: T; department?: T; selectedMembers?: T; maxDepth?: T; layout?: T; direction?: T; node?: | T | { style?: T; showImage?: T; imageSize?: T; imageShape?: T; showName?: T; showRole?: T; showDepartment?: T; showContact?: T; clickAction?: T; profileBasePath?: T; }; connectors?: | T | { style?: T; color?: T; thickness?: T; animated?: T; }; levels?: | T | { colorByLevel?: T; sizeByLevel?: T; collapsible?: T; initiallyExpanded?: T; }; interaction?: | T | { zoomable?: T; pannable?: T; minimap?: T; search?: T; highlight?: T; fullscreen?: T; export?: T; }; style?: | T | { bg?: T; nodeBg?: T; nodeShadow?: T; nodeBorder?: T; spacing?: T; minHeight?: T; }; showLegend?: T; a11yLabel?: T; id?: T; blockName?: T; }; }; seo?: | T | { metaTitle?: T; metaDescription?: T; ogImage?: T; }; status?: T; publishedAt?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "posts_select". */ export interface PostsSelect { tenant?: T; title?: T; slug?: T; type?: T; isFeatured?: T; excerpt?: T; featuredImage?: T; content?: T; categories?: T; tags?: T; author?: T; coAuthors?: T; authorLegacy?: T; readingTime?: T; status?: T; publishedAt?: T; seo?: | T | { metaTitle?: T; metaDescription?: T; ogImage?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "categories_select". */ export interface CategoriesSelect { tenant?: T; name?: T; slug?: T; description?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "social-links_select". */ export interface SocialLinksSelect { tenant?: T; platform?: T; url?: T; isActive?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "testimonials_select". */ export interface TestimonialsSelect { tenant?: T; quote?: T; author?: T; role?: T; company?: T; image?: T; rating?: T; source?: T; sourceUrl?: T; date?: T; isActive?: T; order?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "faqs_select". */ export interface FaqsSelect { tenant?: T; question?: T; answer?: T; answerPlainText?: T; category?: T; icon?: T; relatedFAQs?: T; isActive?: T; isFeatured?: T; order?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "team_select". */ export interface TeamSelect { tenant?: T; name?: T; slug?: T; role?: T; department?: T; image?: T; bio?: T; bioShort?: T; email?: T; phone?: T; showContactInfo?: T; socialLinks?: | T | { platform?: T; url?: T; id?: T; }; qualifications?: | T | { title?: T; year?: T; institution?: T; id?: T; }; specializations?: | T | { title?: T; id?: T; }; languages?: | T | { language?: T; level?: T; id?: T; }; linkedUser?: T; isActive?: T; isFeatured?: T; order?: T; startDate?: T; reportsTo?: T; hierarchyLevel?: T; allowVCard?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "service-categories_select". */ export interface ServiceCategoriesSelect { tenant?: T; name?: T; slug?: T; description?: T; icon?: T; image?: T; color?: T; isActive?: T; order?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "services_select". */ export interface ServicesSelect { tenant?: T; title?: T; slug?: T; subtitle?: T; shortDescription?: T; description?: T; icon?: T; iconImage?: T; image?: T; gallery?: | T | { image?: T; caption?: T; id?: T; }; category?: T; features?: | T | { title?: T; description?: T; icon?: T; id?: T; }; pricingType?: T; price?: T; priceMax?: T; priceUnit?: T; priceNote?: T; pricingDetails?: T; ctaText?: T; ctaLink?: T; ctaStyle?: T; secondaryCta?: | T | { enabled?: T; text?: T; link?: T; }; relatedServices?: T; teamMembers?: T; faqs?: T; detailSections?: | T | { title?: T; content?: T; icon?: T; id?: T; }; testimonialQuote?: T; testimonialAuthor?: T; metaTitle?: T; metaDescription?: T; ogImage?: T; isActive?: T; isFeatured?: T; isNew?: T; order?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "newsletter-subscribers_select". */ export interface NewsletterSubscribersSelect { tenant?: T; email?: T; firstName?: T; lastName?: T; status?: T; interests?: T; source?: T; subscribedAt?: T; confirmedAt?: T; unsubscribedAt?: T; confirmationToken?: T; ipAddress?: T; userAgent?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "portfolio-categories_select". */ export interface PortfolioCategoriesSelect { tenant?: T; name?: T; slug?: T; description?: T; coverImage?: T; order?: T; isActive?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "portfolios_select". */ export interface PortfoliosSelect { tenant?: T; title?: T; slug?: T; description?: T; excerpt?: T; category?: T; tags?: T; coverImage?: T; images?: | T | { image?: T; caption?: T; isHighlight?: T; id?: T; }; projectDetails?: | T | { client?: T; location?: T; shootingDate?: T; equipment?: T; }; status?: T; isFeatured?: T; publishedAt?: T; order?: T; seo?: | T | { metaTitle?: T; metaDescription?: T; ogImage?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "product-categories_select". */ export interface ProductCategoriesSelect { tenant?: T; name?: T; slug?: T; description?: T; image?: T; icon?: T; parent?: T; order?: T; isActive?: T; seo?: | T | { metaTitle?: T; metaDescription?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "products_select". */ export interface ProductsSelect { tenant?: T; title?: T; slug?: T; sku?: T; shortDescription?: T; description?: T; category?: T; tags?: | T | { tag?: T; id?: T; }; featuredImage?: T; gallery?: | T | { image?: T; caption?: T; id?: T; }; pricing?: | T | { price?: T; salePrice?: T; currency?: T; priceType?: T; priceNote?: T; }; details?: | T | { specifications?: | T | { key?: T; value?: T; id?: T; }; features?: | T | { feature?: T; icon?: T; id?: T; }; }; inventory?: | T | { stockStatus?: T; stockQuantity?: T; deliveryTime?: T; }; relatedProducts?: T; downloadFiles?: | T | { file?: T; title?: T; id?: T; }; cta?: | T | { type?: T; buttonText?: T; externalUrl?: T; }; seo?: | T | { metaTitle?: T; metaDescription?: T; ogImage?: T; }; status?: T; isFeatured?: T; isNew?: T; order?: T; publishedAt?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "timelines_select". */ export interface TimelinesSelect { tenant?: T; name?: T; slug?: T; description?: T; type?: T; status?: T; displayOptions?: | T | { layout?: T; sortOrder?: T; showConnector?: T; showImages?: T; groupByYear?: T; markerStyle?: T; colorScheme?: T; }; events?: | T | { dateType?: T; year?: T; month?: T; day?: T; endYear?: T; endMonth?: T; ongoing?: T; customDate?: T; title?: T; subtitle?: T; description?: T; shortDescription?: T; image?: T; gallery?: | T | { image?: T; caption?: T; id?: T; }; category?: T; importance?: T; stepNumber?: T; duration?: T; responsible?: T; actionRequired?: T; deliverables?: | T | { name?: T; type?: T; id?: T; }; icon?: T; color?: T; links?: | T | { label?: T; url?: T; type?: T; id?: T; }; metadata?: T; id?: T; }; seo?: | T | { metaTitle?: T; metaDescription?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "workflows_select". */ export interface WorkflowsSelect { tenant?: T; name?: T; slug?: T; description?: T; shortDescription?: T; type?: T; status?: T; image?: T; properties?: | T | { estimatedDuration?: T; complexity?: T; isIterative?: T; allowParallelPhases?: T; }; displayOptions?: | T | { layout?: T; showPhaseNumbers?: T; showStepNumbers?: T; showDurations?: T; showResponsible?: T; showProgress?: T; colorScheme?: T; }; phases?: | T | { name?: T; description?: T; icon?: T; color?: T; estimatedDuration?: T; responsible?: T; steps?: | T | { name?: T; description?: T; shortDescription?: T; stepType?: T; priority?: T; estimatedDuration?: T; responsible?: T; icon?: T; dependencies?: | T | { dependsOnSteps?: T; canRunParallel?: T; isBlocking?: T; }; conditions?: | T | { condition?: T; nextStep?: T; color?: T; id?: T; }; checklist?: | T | { item?: T; isRequired?: T; id?: T; }; resources?: | T | { name?: T; type?: T; file?: T; url?: T; description?: T; id?: T; }; outputs?: | T | { name?: T; description?: T; id?: T; }; metadata?: T; id?: T; }; deliverables?: | T | { name?: T; description?: T; id?: T; }; id?: T; }; globalResources?: | T | { name?: T; type?: T; file?: T; url?: T; description?: T; id?: T; }; seo?: | T | { metaTitle?: T; metaDescription?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "tags_select". */ export interface TagsSelect { tenant?: T; name?: T; slug?: T; description?: T; color?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "authors_select". */ export interface AuthorsSelect { tenant?: T; name?: T; slug?: T; avatar?: T; bio?: T; bioShort?: T; title?: T; email?: T; website?: T; social?: | T | { twitter?: T; linkedin?: T; github?: T; instagram?: T; }; linkedTeam?: T; linkedUser?: T; isActive?: T; isGuest?: T; featured?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "cookie-configurations_select". */ export interface CookieConfigurationsSelect { tenant?: T; title?: T; revision?: T; enabledCategories?: T; translations?: | T | { de?: | T | { bannerTitle?: T; bannerDescription?: T; acceptAllButton?: T; acceptNecessaryButton?: T; settingsButton?: T; saveButton?: T; privacyPolicyUrl?: T; categoryLabels?: | T | { necessary?: | T | { title?: T; description?: T; }; functional?: | T | { title?: T; description?: T; }; analytics?: | T | { title?: T; description?: T; }; marketing?: | T | { title?: T; description?: T; }; }; }; }; styling?: | T | { position?: T; theme?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "cookie-inventory_select". */ export interface CookieInventorySelect { tenant?: T; name?: T; provider?: T; category?: T; duration?: T; description?: T; isActive?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "consent-logs_select". */ export interface ConsentLogsSelect { consentId?: T; clientRef?: T; tenant?: T; categories?: T; revision?: T; userAgent?: T; anonymizedIp?: T; expiresAt?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "privacy-policy-settings_select". */ export interface PrivacyPolicySettingsSelect { tenant?: T; title?: T; provider?: T; alfright?: | T | { tenantId?: T; apiKey?: T; language?: T; iframeHeight?: T; }; styling?: | T | { headerColor?: T; headerFont?: T; headerSize?: T; subheaderSize?: T; fontColor?: T; textFont?: T; textSize?: T; linkColor?: T; backgroundColor?: T; }; showCookieTable?: T; cookieTableTitle?: T; cookieTableDescription?: T; seo?: | T | { metaTitle?: T; metaDescription?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "email-logs_select". */ export interface EmailLogsSelect { tenant?: T; to?: T; from?: T; subject?: T; status?: T; messageId?: T; error?: T; source?: T; metadata?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "audit-logs_select". */ export interface AuditLogsSelect { action?: T; severity?: T; entityType?: T; entityId?: T; user?: T; userEmail?: T; tenant?: T; ipAddress?: T; userAgent?: T; description?: T; previousValue?: T; newValue?: T; metadata?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "forms_select". */ export interface FormsSelect { title?: T; fields?: | T | { checkbox?: | T | { name?: T; label?: T; width?: T; required?: T; defaultValue?: T; id?: T; blockName?: T; }; email?: | T | { name?: T; label?: T; width?: T; required?: T; id?: T; blockName?: T; }; message?: | T | { message?: T; id?: T; blockName?: T; }; number?: | T | { name?: T; label?: T; width?: T; defaultValue?: T; required?: T; id?: T; blockName?: T; }; select?: | T | { name?: T; label?: T; width?: T; defaultValue?: T; placeholder?: T; options?: | T | { label?: T; value?: T; id?: T; }; required?: T; id?: T; blockName?: T; }; text?: | T | { name?: T; label?: T; width?: T; defaultValue?: T; required?: T; id?: T; blockName?: T; }; textarea?: | T | { name?: T; label?: T; width?: T; defaultValue?: T; required?: T; id?: T; blockName?: T; }; }; submitButtonLabel?: T; confirmationType?: T; confirmationMessage?: T; redirect?: | T | { type?: T; reference?: T; url?: T; }; emails?: | T | { emailTo?: T; cc?: T; bcc?: T; replyTo?: T; emailFrom?: T; subject?: T; message?: T; id?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "form-submissions_select". */ export interface FormSubmissionsSelect { form?: T; submissionData?: | T | { field?: T; value?: T; id?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "redirects_select". */ export interface RedirectsSelect { from?: T; to?: | T | { type?: T; reference?: T; url?: T; }; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-kv_select". */ export interface PayloadKvSelect { key?: T; data?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-locked-documents_select". */ export interface PayloadLockedDocumentsSelect { document?: T; globalSlug?: T; user?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-preferences_select". */ export interface PayloadPreferencesSelect { user?: T; key?: T; value?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-migrations_select". */ export interface PayloadMigrationsSelect { name?: T; batch?: T; updatedAt?: T; createdAt?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "site-settings". */ export interface SiteSetting { id: number; siteName?: string | null; siteTagline?: string | null; logo?: (number | null) | Media; favicon?: (number | null) | Media; contact?: { email?: string | null; phone?: string | null; address?: string | null; }; footer?: { copyrightText?: string | null; showSocialLinks?: boolean | null; }; seo?: { defaultMetaTitle?: string | null; defaultMetaDescription?: string | null; defaultOgImage?: (number | null) | Media; }; updatedAt?: string | null; createdAt?: string | null; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "navigation". */ export interface Navigation { id: number; mainMenu?: | { label: string; type?: ('page' | 'custom' | 'submenu') | null; page?: (number | null) | Page; url?: string | null; openInNewTab?: boolean | null; submenu?: | { label: string; linkType?: ('page' | 'custom') | null; page?: (number | null) | Page; url?: string | null; id?: string | null; }[] | null; id?: string | null; }[] | null; footerMenu?: | { label: string; linkType?: ('page' | 'custom') | null; page?: (number | null) | Page; url?: string | null; id?: string | null; }[] | null; updatedAt?: string | null; createdAt?: string | null; } /** * Globale SEO-Konfiguration und Schema.org Daten * * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "seo-settings". */ export interface SeoSetting { id: number; metaDefaults?: { /** * Wird an jeden Seitentitel angehängt (z.B. "Startseite | Firmenname") */ titleSuffix?: string | null; /** * Wird verwendet, wenn keine spezifische Beschreibung gesetzt ist */ defaultDescription?: string | null; /** * Fallback-Bild für Social Media Shares (empfohlen: 1200x630px) */ defaultOgImage?: (number | null) | Media; /** * Globale Keywords (optional, geringe SEO-Relevanz) */ keywords?: string[] | null; }; /** * Daten für das Organization Schema */ organization: { name: string; /** * Vollständiger rechtlicher Firmenname (falls abweichend) */ legalName?: string | null; description?: string | null; /** * Firmenlogo für Schema.org (min. 112x112px, empfohlen: 512x512px) */ logo?: (number | null) | Media; foundingDate?: string | null; }; contact?: { email?: string | null; /** * Im Format +49 123 456789 */ phone?: string | null; fax?: string | null; }; address?: { street?: string | null; postalCode?: string | null; city?: string | null; region?: string | null; country?: string | null; /** * ISO 3166-1 Alpha-2 Code */ countryCode?: string | null; }; /** * Für Local Business Schema */ geo?: { latitude?: number | null; longitude?: number | null; }; /** * URLs zu Social Media Profilen (für sameAs Schema) */ socialProfiles?: | { platform?: | ('facebook' | 'instagram' | 'twitter' | 'linkedin' | 'youtube' | 'tiktok' | 'pinterest' | 'xing' | 'other') | null; url: string; id?: string | null; }[] | null; /** * Zusätzliche Daten für lokale Unternehmen */ localBusiness?: { enabled?: boolean | null; type?: | ( | 'LocalBusiness' | 'Physician' | 'Dentist' | 'Attorney' | 'Restaurant' | 'Hotel' | 'Store' | 'HealthClub' | 'HairSalon' | 'AutoRepair' | 'RealEstateAgent' | 'FinancialService' | 'ProfessionalService' | 'MedicalBusiness' ) | null; priceRange?: ('€' | '€€' | '€€€' | '€€€€') | null; /** * Im Format "Mo-Fr 09:00-17:00" */ openingHours?: | { specification?: string | null; id?: string | null; }[] | null; }; robots?: { /** * Wenn deaktiviert, wird die gesamte Website von Suchmaschinen ausgeschlossen */ allowIndexing?: boolean | null; /** * Pfade die nicht gecrawlt werden sollen (z.B. "/intern", "/preview") */ additionalDisallow?: string[] | null; }; /** * Codes für Suchmaschinen-Verifizierung */ verification?: { /** * Meta-Tag Content (nur der Code, nicht das gesamte Tag) */ google?: string | null; bing?: string | null; yandex?: string | null; }; updatedAt?: string | null; createdAt?: string | null; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "site-settings_select". */ export interface SiteSettingsSelect { siteName?: T; siteTagline?: T; logo?: T; favicon?: T; contact?: | T | { email?: T; phone?: T; address?: T; }; footer?: | T | { copyrightText?: T; showSocialLinks?: T; }; seo?: | T | { defaultMetaTitle?: T; defaultMetaDescription?: T; defaultOgImage?: T; }; updatedAt?: T; createdAt?: T; globalType?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "navigation_select". */ export interface NavigationSelect { mainMenu?: | T | { label?: T; type?: T; page?: T; url?: T; openInNewTab?: T; submenu?: | T | { label?: T; linkType?: T; page?: T; url?: T; id?: T; }; id?: T; }; footerMenu?: | T | { label?: T; linkType?: T; page?: T; url?: T; id?: T; }; updatedAt?: T; createdAt?: T; globalType?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "seo-settings_select". */ export interface SeoSettingsSelect { metaDefaults?: | T | { titleSuffix?: T; defaultDescription?: T; defaultOgImage?: T; keywords?: T; }; organization?: | T | { name?: T; legalName?: T; description?: T; logo?: T; foundingDate?: T; }; contact?: | T | { email?: T; phone?: T; fax?: T; }; address?: | T | { street?: T; postalCode?: T; city?: T; region?: T; country?: T; countryCode?: T; }; geo?: | T | { latitude?: T; longitude?: T; }; socialProfiles?: | T | { platform?: T; url?: T; id?: T; }; localBusiness?: | T | { enabled?: T; type?: T; priceRange?: T; openingHours?: | T | { specification?: T; id?: T; }; }; robots?: | T | { allowIndexing?: T; additionalDisallow?: T; }; verification?: | T | { google?: T; bing?: T; yandex?: T; }; updatedAt?: T; createdAt?: T; globalType?: T; } /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "auth". */ export interface Auth { [k: string]: unknown; } declare module 'payload' { export interface GeneratedTypes extends Config {} }