cms.c2sgmbh/src/payload-types.ts
Martin Porwoll 2b097eefb3 feat: add comprehensive blogging and team features
Blogging Collections:
- Tags Collection with name, slug, description, color
- Authors Collection with avatar, bio, social media links

Posts Collection extended:
- Tags and Author relationships
- Co-Authors support
- Automatic reading time calculation
- Legacy author text field fallback

New Blogging Blocks:
- AuthorBioBlock: Display author info with various layouts
- RelatedPostsBlock: Show related articles (auto/manual/category/tag)
- ShareButtonsBlock: Social sharing (Facebook, Twitter, LinkedIn, etc.)
- TableOfContentsBlock: Auto-generated TOC from headings

Team Collection extended:
- Slug field for profile pages (auto-generated)
- Hierarchy fields (reportsTo, hierarchyLevel) for org charts
- vCard export flag

New Team API Endpoints:
- GET /api/team - List with search and filters
- GET /api/team/[slug]/vcard - vCard download (VCF)

New Team Blocks:
- TeamFilterBlock: Interactive team display with search/filter
- OrgChartBlock: Hierarchical organization chart visualization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 21:49:13 +00:00

6202 lines
No EOL
160 KiB
TypeScript

/* 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<false> | UsersSelect<true>;
media: MediaSelect<false> | MediaSelect<true>;
tenants: TenantsSelect<false> | TenantsSelect<true>;
pages: PagesSelect<false> | PagesSelect<true>;
posts: PostsSelect<false> | PostsSelect<true>;
categories: CategoriesSelect<false> | CategoriesSelect<true>;
'social-links': SocialLinksSelect<false> | SocialLinksSelect<true>;
testimonials: TestimonialsSelect<false> | TestimonialsSelect<true>;
faqs: FaqsSelect<false> | FaqsSelect<true>;
team: TeamSelect<false> | TeamSelect<true>;
'service-categories': ServiceCategoriesSelect<false> | ServiceCategoriesSelect<true>;
services: ServicesSelect<false> | ServicesSelect<true>;
'newsletter-subscribers': NewsletterSubscribersSelect<false> | NewsletterSubscribersSelect<true>;
'portfolio-categories': PortfolioCategoriesSelect<false> | PortfolioCategoriesSelect<true>;
portfolios: PortfoliosSelect<false> | PortfoliosSelect<true>;
'product-categories': ProductCategoriesSelect<false> | ProductCategoriesSelect<true>;
products: ProductsSelect<false> | ProductsSelect<true>;
timelines: TimelinesSelect<false> | TimelinesSelect<true>;
workflows: WorkflowsSelect<false> | WorkflowsSelect<true>;
tags: TagsSelect<false> | TagsSelect<true>;
authors: AuthorsSelect<false> | AuthorsSelect<true>;
'cookie-configurations': CookieConfigurationsSelect<false> | CookieConfigurationsSelect<true>;
'cookie-inventory': CookieInventorySelect<false> | CookieInventorySelect<true>;
'consent-logs': ConsentLogsSelect<false> | ConsentLogsSelect<true>;
'privacy-policy-settings': PrivacyPolicySettingsSelect<false> | PrivacyPolicySettingsSelect<true>;
'email-logs': EmailLogsSelect<false> | EmailLogsSelect<true>;
'audit-logs': AuditLogsSelect<false> | AuditLogsSelect<true>;
forms: FormsSelect<false> | FormsSelect<true>;
'form-submissions': FormSubmissionsSelect<false> | FormSubmissionsSelect<true>;
redirects: RedirectsSelect<false> | RedirectsSelect<true>;
'payload-kv': PayloadKvSelect<false> | PayloadKvSelect<true>;
'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>;
'payload-preferences': PayloadPreferencesSelect<false> | PayloadPreferencesSelect<true>;
'payload-migrations': PayloadMigrationsSelect<false> | PayloadMigrationsSelect<true>;
};
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<false> | SiteSettingsSelect<true>;
navigation: NavigationSelect<false> | NavigationSelect<true>;
'seo-settings': SeoSettingsSelect<false> | SeoSettingsSelect<true>;
};
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
key?: T;
data?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-locked-documents_select".
*/
export interface PayloadLockedDocumentsSelect<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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<T extends boolean = true> {
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 {}
}