mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 23:14:12 +00:00
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>
6202 lines
No EOL
160 KiB
TypeScript
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 {}
|
|
} |